--- tags: [ag-music, matricula, bugfix, codeigniter] created: 2026-04-20 updated: 2026-04-20 parent: "[[AG-Music]]" --- # Cancelar / Trancar / Destrancar Matricula ## Contexto Os 3 endpoints (cancelar, trancar, destrancar) retornavam `{success: false, message: "Erro interno do servidor"}`. Corrigidos em 2026-04-20. ## Bugs corrigidos ### 1. `$db` nao inicializado em apiCancelarMatricula - Linha ~1074 do `MatriculaController.php` usava `$db->table('lancamentos_financeiros')` sem declarar `$db` - Causava `Undefined variable $db` -> catch -> "Erro interno do servidor" - **Fix**: `$db = \Config\Database::connect();` antes do uso ### 2. Model::update() rejeita updates parciais em matriculas - `MatriculaModel::$validationRules` exige `aluno_id`, `curso_id`, `professor_id`, `sala_id`, `data_inicio`, `meses`, `valor_mensal` como required - `$this->matriculaModel->update($id, ['status' => 'cancelada'])` falha na validacao - Mesmo padrao ja documentado em [[Aula Edicao Conflitos]] para AulaModel - **Fix**: usar `$db->table('matriculas')->where('id', $id)->update($data)` direto ### 3. Campos de trancamento fora de allowedFields - Colunas `data_trancamento`, `motivo_trancamento`, `data_destrancamento`, `dias_trancados` existem no banco (migration 2026-02-03-200000) mas NAO estao em `MatriculaModel::$allowedFields` - `Model::update()` silenciosamente ignora esses campos mesmo se a validacao passasse - **Fix**: `$db->table()` direto (bypassa allowedFields) ### 4. Aulas com status 'suspensa' - `AulaModel::$validationRules` tem `status => in_list[agendada,em_andamento,concluida,cancelada,falta_professor,falta_aluno]` - 'suspensa' nao esta na lista, setar via Model falharia - **Fix**: `$db->table('aulas')` direto para mudar status de aulas ## Regra geral **NUNCA usar `$this->matriculaModel->update()` ou `$this->aulaModel->update()` para updates parciais.** Sempre: ```php $db = \Config\Database::connect(); $db->table('matriculas')->where('id', $id)->update($data); ``` ## Rotas afetadas - `POST /api/matricula/cancelar/{id}` e `/api/cancelar-matricula/{id}` - `POST /api/matricula/trancar/{id}` e `/api/trancar-matricula/{id}` - `POST /api/matricula/destrancar/{id}` e `/api/destrancar-matricula/{id}` ## Arquivos alterados - `app/Controllers/MatriculaController.php` (metodos `apiCancelarMatricula`, `apiTrancarMatricula`, `apiDestrancarMatricula`) ## Ver tambem - [[Aula Edicao Conflitos]] - mesmo padrao para AulaModel - [[AG-Music]] - visao geral