function cadastraSNotasFaltas()
 {
     if (is_array($this->disciplina_modulo)) {
         //				$obj = new clsPmieducarNotaAluno();
         //				$lst_obj = $obj->lista( null, null, $this->ref_cod_tipo_avaliacao, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, null, $this->ref_cod_matricula, null, null, null, null, null, null, 1, $this->modulo );
         //				if (!is_array($lst_obj) && count($lst_obj))
         //				{
         foreach ($this->disciplina_modulo as $avaliacao) {
             if (is_numeric($avaliacao["nota"])) {
                 $obj = new clsPmieducarNotaAluno(null, $avaliacao["nota"], $this->ref_cod_tipo_avaliacao, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $avaliacao["ref_cod_disciplina"], $this->ref_cod_matricula, null, $this->pessoa_logada, null, null, 1, $this->modulo);
             } else {
                 $avaliacao["nota"] = str_replace(".", "", $avaliacao["nota"]);
                 $avaliacao["nota"] = str_replace(",", ".", $avaliacao["nota"]);
                 $obj = new clsPmieducarNotaAluno(null, null, null, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $avaliacao["ref_cod_disciplina"], $this->ref_cod_matricula, null, $this->pessoa_logada, null, null, 1, $this->modulo, null, $avaliacao["nota"]);
             }
             if (is_numeric($avaliacao["nota"])) {
                 $cadastrou = $obj->cadastra();
                 //					if( $cadastrou && ($this->situacao != 7) )
                 if ($cadastrou && $this->qtd_modulos >= $this->modulo) {
                     if (!$this->falta_ch_globalizada && is_numeric($avaliacao["faltas"])) {
                         $obj = new clsPmieducarFaltaAluno(null, null, $this->pessoa_logada, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $avaliacao["ref_cod_disciplina"], $this->ref_cod_matricula, $avaliacao["faltas"], null, null, 1, $this->modulo);
                         $cadastrou1 = $obj->cadastra();
                         if (!$cadastrou1) {
                             $this->mensagem = "Cadastro n&atilde;o realizado.<br>";
                             echo "<!--\nErro ao cadastrar clsPmieducarFaltaAluno\nvalores obrigatorios\nis_numeric( {$this->pessoa_logada} ) && is_numeric( {$this->ref_ref_cod_serie} ) && is_numeric( {$this->ref_ref_cod_escola} ) && is_numeric( {$avaliacao["ref_cod_disciplina"]} ) && is_numeric( {$this->ref_cod_matricula} ) && is_numeric( {$avaliacao["faltas"]} ) )\n-->";
                             return false;
                         }
                     }
                 } elseif (!$cadastrou) {
                     $this->mensagem = "Cadastro n&atilde;o realizado.<br>";
                     echo "<!--\nErro ao cadastrar clsPmieducarNotaAluno\nvalores obrigatorios\nis_numeric( {$avaliacao["nota"]} ) && is_numeric( {$this->ref_cod_tipo_avaliacao} ) && is_numeric( {$this->ref_ref_cod_serie} ) && is_numeric( {$this->ref_ref_cod_escola} ) && is_numeric( {$avaliacao["ref_cod_disciplina"]} ) && is_numeric( {$this->ref_cod_matricula} ) && is_numeric( {$this->pessoa_logada} )\n-->";
                     return false;
                 }
             }
         }
         if ($cadastrou) {
             $obj_matricula = new clsPmieducarMatricula($this->ref_cod_matricula, null, null, null, $this->pessoa_logada);
             $obj_matricula->avancaModulo();
         }
         if ($cadastrou && $this->qtd_modulos >= $this->modulo && $this->falta_ch_globalizada && is_numeric($this->total_faltas)) {
             $obj = new clsPmieducarFaltas($this->ref_cod_matricula, $this->modulo, $this->pessoa_logada, $this->total_faltas);
             if ($obj->existe()) {
                 $cadastrou1 = $obj->edita();
             } else {
                 $cadastrou1 = $obj->cadastra();
             }
             if (!$cadastrou1) {
                 $this->mensagem = "Cadastro n&atilde;o realizado.<br>";
                 echo "<!--\nErro ao cadastrar clsPmieducarFaltas\nvalores obrigatorios\nis_numeric( {$this->ref_cod_matricula} ) && is_numeric( {$this->modulo} ) && is_numeric( {$this->pessoa_logada} ) && is_numeric( {$this->total_faltas} )\n-->";
                 return false;
             }
         }
         //				}
     } else {
         $this->mensagem = "Cadastro n&atilde;o realizado (N&atilde;o foi gerado o Array de notas e faltas das disciplinas).<br>";
         return false;
     }
 }
 function Novo()
 {
     @session_start();
     $this->pessoa_logada = $_SESSION['id_pessoa'];
     @session_write_close();
     $obj_permissoes = new clsPermissoes();
     $obj_permissoes->permissao_cadastra(650, $this->pessoa_logada, 7, "educar_turma_mvto_det.php");
     if ($this->passo == 1) {
         // selecionou o curso, nao cadastra nada
         return true;
     } else {
         if ($this->passo == 2) {
             // deu notas e faltas aos alunos
             $objCurso = new clsPmieducarCurso($this->ref_cod_curso);
             $detalhe_curso = $objCurso->detalhe();
             $db = new clsBanco();
             $qtd_disciplinas = $db->CampoUnico("SELECT COUNT(0) FROM pmieducar.escola_serie_disciplina WHERE ref_ref_cod_serie = '{$this->ref_cod_serie_disciplina}' AND ref_ref_cod_escola = '{$this->ref_ref_cod_escola}' AND ativo = 1");
             foreach ($this->nota as $matricula => $sequencial) {
                 // cadastra a nota
                 if ($this->is_nota_exame) {
                     $nota = str_replace(",", ".", $sequencial);
                     $objNotaAluno = new clsPmieducarNotaAluno(null, null, null, $this->ref_cod_serie_disciplina, $this->ref_ref_cod_escola, $this->ref_cod_disciplina, $matricula, null, $this->pessoa_logada, null, null, null, $this->num_modulo, null, $nota);
                 } else {
                     $objNotaAluno = new clsPmieducarNotaAluno(null, $sequencial, $detalhe_curso["ref_cod_tipo_avaliacao"], $this->ref_cod_serie_disciplina, $this->ref_ref_cod_escola, $this->ref_cod_disciplina, $matricula, null, $this->pessoa_logada, null, null, null, $this->num_modulo, null);
                 }
                 $existe_nota = $objNotaAluno->lista(null, null, $detalhe_curso["ref_cod_tipo_avaliacao"], $this->ref_cod_serie_disciplina, $this->ref_ref_cod_escola, $this->ref_cod_disciplina, $matricula, null, null, null, null, null, null, 1, $this->num_modulo, null, null);
                 /**
                  * somente cadastra
                  * se nao tiver nenhuma nota
                  * cadastrada para a disciplina
                  */
                 if ($existe_nota) {
                     $cadastrado = $objNotaAluno->edita();
                 } else {
                     $cadastrado = $objNotaAluno->cadastra();
                 }
                 $existe_nota = null;
                 $ultima_nota = false;
                 if ($cadastrado) {
                     // nota cadastrada com sucesso
                     // verifica se essa eh a ultima nota desse modulo. Se for passa o aluno pro proximo modulo
                     $qtd_dispensas = (int) $db->CampoUnico("SELECT COUNT(0) AS dispensas FROM pmieducar.dispensa_disciplina WHERE ref_cod_matricula = '{$matricula}' AND ativo = 1");
                     $qtd_notas = (int) $db->CampoUnico("SELECT COUNT(0) AS notas FROM pmieducar.nota_aluno WHERE ref_cod_matricula = '{$matricula}' AND ativo = 1 AND modulo = '{$this->num_modulo}'");
                     if ($qtd_dispensas + $qtd_notas >= $qtd_disciplinas) {
                         // eh a ultima nota do modulo, vamos passar o aluno adiante
                         $ultima_nota = true;
                         $objMatricula = new clsPmieducarMatricula($matricula, null, null, null, $this->pessoa_logada);
                         $det_matricula = $objMatricula->detalhe();
                         $max_modulo_nota = (int) $db->CampoUnico("SELECT max(modulo) FROM pmieducar.nota_aluno WHERE ref_cod_matricula = '{$matricula}' AND ativo = 1");
                         /**
                          * so avança o modulo
                          * caso ele seja igual ao da maior nota
                          * e que seja a ultima disciplina
                          */
                         if ($det_matricula['modulo'] <= $max_modulo_nota) {
                             $objMatricula->avancaModulo();
                         }
                     }
                     // tratamento para faltas
                     if (!$this->falta_ch_globalizada) {
                         // se a falta nao for globalizada adiciona falta
                         $this->falta[$matricula] = $this->falta[$matricula] ? $this->falta[$matricula] : 0;
                         $objFaltaAluno = new clsPmieducarFaltaAluno(null, null, $this->pessoa_logada, $this->ref_cod_serie_disciplina, $this->ref_ref_cod_escola, $this->ref_cod_disciplina, $matricula, $this->falta[$matricula], null, null, null, $this->num_modulo);
                         $existe_falta = $objFaltaAluno->lista(null, null, null, $this->ref_cod_serie_disciplina, $this->ref_ref_cod_escola, $this->ref_cod_disciplina, $matricula, null, null, null, null, null, 1, $this->num_modulo);
                         /**
                          * somente cadastra se
                          * jah nao tiver sido cadastrado
                          */
                         if ($existe_falta) {
                             $objFaltaAluno->edita();
                         } else {
                             $objFaltaAluno->cadastra();
                         }
                     } else {
                         // falta eh globalizada
                         if ($this->ultima_nota[$matricula]) {
                             // essa eh a ultima nota do aluno nesse modulo, vamos adicionar a falta globalizada dele
                             $this->falta[$matricula] = $this->falta[$matricula] ? $this->falta[$matricula] : 0;
                             $objFaltas = new clsPmieducarFaltas($matricula, $this->num_modulo, $this->pessoa_logada, $this->falta[$matricula]);
                             if ($objFaltas->existe()) {
                                 $objFaltas->edita();
                             } else {
                                 $objFaltas->cadastra();
                             }
                         }
                     }
                     // quando for o ultimo modulo o aluno deve ser aprovado, reprovado, marcado como excessao, ou colocado em exame
                     if ($ultima_nota && $this->num_modulo == $this->max_modulos) {
                         // esta na ultima nota do ultimo modulo
                         $objEscolaSerieDisciplina = new clsPmieducarEscolaSerieDisciplina();
                         $listaEscolaSerieDisciplina = $objEscolaSerieDisciplina->lista($this->ref_cod_serie_disciplina, $this->ref_ref_cod_escola, null, 1);
                         //$this->ref_cod_serie_disciplina $this->ref_ref_cod_serie
                         $reprovado_por_nota = false;
                         $existiu_excessao = false;
                         $obj_serie = new clsPmieducarSerie($this->ref_cod_serie_disciplina);
                         $det_serie = $obj_serie->detalhe();
                         $media_especial = dbBool($det_serie['media_especial']);
                         if (is_array($listaEscolaSerieDisciplina)) {
                             // percorre todas as disciplinas
                             $reprovou_ultima_nota = false;
                             $foi_aprovado = null;
                             foreach ($listaEscolaSerieDisciplina as $value) {
                                 $excessao = false;
                                 $nota = false;
                                 //  ve as faltas
                                 if (!$this->falta_ch_globalizada) {
                                     $objFaltaAluno = new clsPmieducarFaltaAluno();
                                     $faltas = $objFaltaAluno->total_faltas_disciplina($matricula, $value["ref_cod_disciplina"], $value["ref_ref_cod_serie"]);
                                     if ($reprovou) {
                                         // se reprovou cria uma excessao
                                         $existiu_excessao = true;
                                         $excessao = true;
                                     }
                                 }
                                 /**
                                  * se a media for especial somente
                                  * verifica se nao esta reprovado por falta
                                  */
                                 if ($media_especial) {
                                     continue;
                                 }
                                 if (!dbBool($det_serie["ultima_nota_define"])) {
                                     //  ve a media
                                     /**
                                      * @author HY 15-12-2006
                                      * @see quando for dar as notas e for calcular a ultima
                                      * ao fazer a media e essa nota estiver abaixo nao
                                      * pode ser feito o arredondamento, somente se estiver
                                      *  acima da media deixando o aluno em exame
                                      */
                                     $objNotaAluno = new clsPmieducarNotaAluno();
                                     $media = $objNotaAluno->getMediaAluno($matricula, $value["ref_cod_disciplina"], $value["ref_ref_cod_serie"], $this->max_modulos, $detalhe_curso["media"]);
                                     if ($media < $detalhe_curso["media"]) {
                                         //  se reprovar em alguma marca uma flag de reprovado por nota (nao edita o aluno porque ele ainda vai fazer exame)
                                         $reprovado_por_nota = true;
                                         $nota = true;
                                     }
                                 } else {
                                     //									echo "<pre>"; print_r($detalhe_curso); die();
                                     $objNotaAluno = new clsPmieducarNotaAluno();
                                     $ultima_nota_modulo = $objNotaAluno->getUltimaNotaModulo($matricula, $value["ref_cod_disciplina"], $value["ref_ref_cod_serie"], $this->num_modulo);
                                     if ($ultima_nota_modulo < $detalhe_curso["media"]) {
                                         $foi_aprovado = 2;
                                         $reprovou_ultima_nota = true;
                                     }
                                 }
                                 if ($excessao) {
                                     // existiu uma excessao entao cria um registro de excessao no banco
                                     $objExcessao = new clsPmieducarMatriculaExcessao(null, $matricula, $this->ref_cod_turma, 1, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $value["ref_cod_disciplina"], true, $nota);
                                     $objExcessao->cadastra();
                                 }
                             }
                             if (dbBool($det_serie["ultima_nota_define"])) {
                                 if ($reprovou_ultima_nota) {
                                     $objMatricula = new clsPmieducarMatricula($matricula, null, null, null, $this->pessoa_logada, null, null, 2);
                                     $objMatricula->edita();
                                 } else {
                                     $objMatricula = new clsPmieducarMatricula($matricula, null, null, null, $this->pessoa_logada, null, null, 1);
                                     $objMatricula->edita();
                                     $foi_aprovado = 1;
                                 }
                             }
                             /**
                              * calcula outro modo de média se for especial
                              */
                             if ($media_especial) {
                                 $objNotaAluno = new clsPmieducarNotaAluno();
                                 $media = $objNotaAluno->getMediaEspecialAluno($matricula, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->max_modulos, $detalhe_curso["media"]);
                                 if ($media < $detalhe_curso["media"]) {
                                     //  se reprovar marca uma flag de reprovado por nota (
                                     $reprovado_por_nota = true;
                                     $nota = true;
                                 }
                             }
                         }
                         if (!$reprovado_por_nota && !$existiu_excessao && !dbBool($det_serie["ultima_nota_define"])) {
                             // nao foi reprovado em nenhuma disciplina e nao teve nenhuma excessao
                             //marca como aprovado
                             $foi_aprovado = 1;
                             $objMatricula = new clsPmieducarMatricula($matricula, null, null, null, $this->pessoa_logada, null, null, 1);
                             $objMatricula->edita();
                         }
                         /**
                          * media especial e reprovado por falta.. marca aluno como reprovado se nao marca como aprovado
                          */
                         if ($media_especial) {
                             $aprovado = $reprovado_por_nota ? '2' : '1';
                             $foi_aprovado = $aprovado;
                             $objMatricula = new clsPmieducarMatricula($matricula, null, null, null, $this->pessoa_logada, null, null, $aprovado);
                             $objMatricula->edita();
                         }
                     } else {
                         if ($this->num_modulo - 1 == $this->max_modulos) {
                             // se estiver recebendo nota do exame temos que ver se eh a ultima, se for temos que aprovar/reprovar o aluno
                             // num_modulo == max_modulo = ultimo modulo
                             // num_modulo - 1 == max_modulo = exame
                             // esta no exame
                             $objNotaAluno = new clsPmieducarNotaAluno();
                             $qtd_exames = $objNotaAluno->getQtdMateriasExame($matricula, $this->max_modulos, $detalhe_curso["media"], true);
                             $qtd_notas_exame = $objNotaAluno->getQtdNotasExame($matricula, $this->max_modulos);
                             //die("recebendo nota de exame!!!! [{$qtd_exames}] [{$qtd_notas_exame}]");
                             if ($qtd_exames == $qtd_notas_exame) {
                                 // eh a ultima disciplina do exame
                                 $reprovado = false;
                                 $disciplinas_exame = $objNotaAluno->getDisciplinasExameDoAluno($matricula, $this->max_modulos, $detalhe_curso["media"], true);
                                 if (is_array($disciplinas_exame)) {
                                     foreach ($disciplinas_exame as $disciplina) {
                                         $media_exame = $objNotaAluno->getMediaAlunoExame($matricula, $disciplina["cod_disciplina"], $disciplina["cod_serie"], $this->max_modulos);
                                         // se reprovou marca como reprovado e sai do loop (break)
                                         //abaixo original
                                         //									$media_exame = $objNotaAluno->getMediaAluno($matricula,$disciplina["cod_disciplina"],$disciplina["cod_serie"],$this->max_modulos + 1, false, true);
                                         if ($media_exame < $detalhe_curso["media_exame"]) {
                                             // reprovou
                                             //remove possiveis excessoes
                                             $objExcessoes = new clsPmieducarMatriculaExcessao();
                                             $objExcessoes->excluirPorMatricula($matricula);
                                             // marca como reprovado
                                             $foi_aprovado = 2;
                                             $objMatricula = new clsPmieducarMatricula($matricula, null, null, null, $this->pessoa_logada, null, null, 2);
                                             $objMatricula->edita();
                                             $reprovado = true;
                                             break;
                                         }
                                     }
                                 }
                                 if (!$reprovado) {
                                     // se chegar aqui sem ter sido reprovado, marca como aprovado
                                     //remove possiveis excessoes
                                     $objExcessoes = new clsPmieducarMatriculaExcessao();
                                     $objExcessoes->excluirPorMatricula($matricula);
                                     // aprova
                                     $foi_aprovado = 1;
                                     $objMatricula = new clsPmieducarMatricula($matricula, null, null, null, $this->pessoa_logada, null, null, 1);
                                     $objMatricula->edita();
                                 } else {
                                     // se chegar aqui sem ter sido reprovado, marca como aprovado
                                     //remove possiveis excessoes
                                     $objExcessoes = new clsPmieducarMatriculaExcessao();
                                     $objExcessoes->excluirPorMatricula($matricula);
                                     // reprova
                                     $foi_aprovado = 2;
                                     $objMatricula = new clsPmieducarMatricula($matricula, null, null, null, $this->pessoa_logada, null, null, 2);
                                     $objMatricula->edita();
                                 }
                             }
                         }
                     }
                 }
                 /**************HISTORICO ESCOLAR****************************/
                 if ($foi_aprovado == 1 || $foi_aprovado == 2) {
                     $obj_serie = new clsPmieducarSerie($this->ref_ref_cod_serie);
                     $det_serie = $obj_serie->detalhe();
                     $carga_horaria_serie = $det_serie["carga_horaria"];
                     $obj_escola = new clsPmieducarEscola($this->ref_ref_cod_escola);
                     $det_escola = $obj_escola->detalhe();
                     $ref_idpes = $det_escola["ref_idpes"];
                     $this->ref_cod_instituicao = $det_escola["ref_cod_instituicao"];
                     $obj_ano_letivo = new clsPmieducarEscolaAnoLetivo();
                     $lst_ano_letivo = $obj_ano_letivo->lista($this->ref_ref_cod_escola, null, null, null, 1, null, null, null, null, 1);
                     if (is_array($lst_ano_letivo)) {
                         $det_ano_letivo = array_shift($lst_ano_letivo);
                         $this->ano_letivo = $det_ano_letivo["ano"];
                     }
                     // busca informacoes da escola
                     if ($ref_idpes) {
                         $obj_escola = new clsPessoaJuridica($ref_idpes);
                         $det_escola = $obj_escola->detalhe();
                         $nm_escola = $det_escola["fantasia"];
                         if ($det_escola) {
                             $cidade = $det_escola["cidade"];
                             $uf = $det_escola["sigla_uf"];
                         }
                     } else {
                         if (class_exists("clsPmieducarEscolaComplemento")) {
                             $obj_escola = new clsPmieducarEscolaComplemento($this->ref_ref_cod_escola);
                             $det_escola = $obj_escola->detalhe();
                             $nm_escola = $det_escola["nm_escola"];
                             $cidade = $det_escola["municipio"];
                         }
                     }
                     $this->padrao_ano_escolar = $detalhe_curso["padrao_ano_escolar"];
                     if ($this->padrao_ano_escolar) {
                         $extra_curricular = 0;
                     } else {
                         $extra_curricular = 1;
                     }
                     $sql = "SELECT SUM(falta) FROM pmieducar.faltas WHERE ref_cod_matricula = {$matricula}";
                     $db5 = new clsBanco();
                     $total_faltas = $db5->CampoUnico($sql);
                     $obj_tipo_avaliacao = new clsPmieducarTipoAvaliacao($detalhe_curso["ref_cod_tipo_avaliacao"]);
                     $det_tipo_avaliacao = $obj_tipo_avaliacao->detalhe();
                     $this->conceitual = $det_tipo_avaliacao["conceitual"];
                     $obj_aluno = new clsPmieducarMatricula($matricula);
                     $det_aluno = $obj_aluno->detalhe();
                     $this->ref_cod_aluno = $det_aluno["ref_cod_aluno"];
                     $obj = new clsPmieducarHistoricoEscolar($this->ref_cod_aluno, null, null, $this->pessoa_logada, $det_serie['nm_serie'], $this->ano_letivo, $carga_horaria_serie, null, $nm_escola, $cidade, $uf, null, $foi_aprovado, null, null, 1, $total_faltas, $this->ref_cod_instituicao, 0, $extra_curricular, $matricula);
                     $cadastrou2 = $obj->cadastra();
                     if ($cadastrou2 && !$this->conceitual) {
                         $obj_historico = new clsPmieducarHistoricoEscolar();
                         $sequencial = $obj_historico->getMaxSequencial($this->ref_cod_aluno);
                         $historico_disciplina = array();
                         $obj_disciplina_hist = new clsPmieducarEscolaSerieDisciplina();
                         $lst_disciplina_hist = $obj_disciplina_hist->lista($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, null, 1);
                         foreach ($lst_disciplina_hist as $disciplina_hist) {
                             $objFaltaAluno = new clsPmieducarFaltaAluno();
                             $faltas = $objFaltaAluno->total_faltas_disciplina($matricula, $disciplina_hist["ref_cod_disciplina"], $this->ref_ref_cod_serie);
                             $historico_disciplina[$disciplina_hist["ref_cod_disciplina"]] = $faltas;
                             $obj_nota_aluno = new clsPmieducarNotaAluno();
                             $obj_nota_aluno->setOrderby("modulo ASC");
                             $lst_nota_aluno = $obj_nota_aluno->lista(null, null, null, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $disciplina_hist["ref_cod_disciplina"], $matricula, null, null, null, null, null, null, 1);
                             $possui_nota_exame = false;
                             foreach ($lst_nota_aluno as $nota_aluno) {
                                 if (dbBool($det_serie["ultima_nota_define"])) {
                                     $obj_tipo_avaliacao_valores = new clsPmieducarTipoAvaliacaoValores($nota_aluno["ref_ref_cod_tipo_avaliacao"], $nota_aluno["ref_sequencial"], null, null, null, null, 1);
                                     $det_tipo_avaliacao_valores = $obj_tipo_avaliacao_valores->detalhe();
                                     $soma_notas[$disciplina_hist["ref_cod_disciplina"]] = $det_tipo_avaliacao_valores["valor"];
                                 } else {
                                     if ($nota_aluno["nota"]) {
                                         $soma_notas[$disciplina_hist["ref_cod_disciplina"]] += $nota_aluno["nota"] * 2;
                                         $possui_nota_exame = true;
                                     } else {
                                         $obj_tipo_avaliacao_valores = new clsPmieducarTipoAvaliacaoValores($nota_aluno["ref_ref_cod_tipo_avaliacao"], $nota_aluno["ref_sequencial"], null, null, null, null, 1);
                                         $det_tipo_avaliacao_valores = $obj_tipo_avaliacao_valores->detalhe();
                                         $soma_notas[$disciplina_hist["ref_cod_disciplina"]] += $det_tipo_avaliacao_valores["valor"];
                                     }
                                 }
                             }
                             if (!dbBool($det_serie["ultima_nota_define"])) {
                                 if ($possui_nota_exame) {
                                     $soma_notas[$disciplina_hist["ref_cod_disciplina"]] /= $this->num_modulo + 1;
                                 } else {
                                     $soma_notas[$disciplina_hist["ref_cod_disciplina"]] /= $this->max_modulos;
                                 }
                             }
                             /*************FALTAS******************/
                             //											$this->falta_ch_globalizada = $detalhe_curso["falta_ch_globalizada"];
                             $this->ref_cod_tipo_avaliacao = $detalhe_curso["ref_cod_tipo_avaliacao"];
                             if (!$detalhe_curso["falta_ch_globalizada"]) {
                                 $obj_falta_aluno = new clsPmieducarFaltaAluno();
                                 $lst_falta_aluno = $obj_falta_aluno->lista(null, null, null, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $disciplina_hist["ref_cod_disciplina"], $matricula, null, null, null, null, null, 1);
                                 if (is_array($lst_falta_aluno)) {
                                     foreach ($lst_falta_aluno as $key => $falta_aluno) {
                                         $soma_faltas[$disciplina_hist["ref_cod_disciplina"]][$key] = $falta_aluno["faltas"];
                                     }
                                 }
                             }
                         }
                         $faltas_media_aluno = array();
                         if (is_array($soma_faltas)) {
                             foreach ($soma_faltas as $cod_disciplina => $faltas) {
                                 foreach ($array_faltas as $falta) {
                                     $faltas_media_aluno[$disciplina] += $falta;
                                 }
                             }
                         }
                         $obj_historico = new clsPmieducarHistoricoEscolar();
                         $sequencial = $obj_historico->getMaxSequencial($this->ref_cod_aluno);
                         $historico_disciplina = array();
                         foreach ($soma_notas as $key => $nota) {
                             $historico_disciplina[$key] = array($nota, $faltas_media_aluno[$key]);
                         }
                         foreach ($historico_disciplina as $cod_disciplina => $campo) {
                             $obj_disciplina_cad = new clsPmieducarDisciplina($cod_disciplina);
                             $det_disciplina_cad = $obj_disciplina_cad->detalhe();
                             $nm_disciplina = $det_disciplina_cad["nm_disciplina"];
                             $obj_avaliacao_valores = new clsPmieducarTipoAvaliacaoValores();
                             $lst_avaliacao_valores = $obj_avaliacao_valores->lista($this->ref_cod_tipo_avaliacao, null, null, null, $campo[0], $campo[0]);
                             if (is_array($lst_avaliacao_valores)) {
                                 $det_avaliacao_valores = array_shift($lst_avaliacao_valores);
                                 $nm_nota = $det_avaliacao_valores["nome"];
                                 $obj = new clsPmieducarHistoricoDisciplinas(null, $this->ref_cod_aluno, $sequencial, $nm_disciplina, $nm_nota, $campo[1]);
                                 $cadastrou3 = $obj->cadastra();
                                 if (!$cadastrou3) {
                                     die("nao cadastrou");
                                 }
                             }
                         }
                     } else {
                         if (!$cadastrou2) {
                             $this->mensagem = "Cadastro do Hist&oacute;rico Escolar n&atilde;o realizado.<br>";
                             return false;
                         }
                     }
                 }
                 /**************HISTORICO ESCOLAR****************************/
             }
             $this->ref_cod_disciplina = null;
             $this->passo = 0;
             return true;
         } else {
             if ($this->passo == 3) {
                 if ($this->pula_passo) {
                     $this->pula_passo = false;
                     if (is_array($this->nota) && is_array($this->resultado_final) && is_array($this->falta)) {
                         foreach ($this->nota as $matricula => $value) {
                             $objTpAvalValores = new clsPmieducarTipoAvaliacaoValores($this->ref_cod_tipo_avaliacao, $value, null, null, null, null, 1);
                             $valorNota = $objTpAvalValores->detalhe();
                             $objNotaAluno = new clsPmieducarNotaAluno(null, $value, $this->ref_cod_tipo_avaliacao, $this->ref_cod_serie_disciplina, $this->ref_ref_cod_escola, $this->ref_cod_disciplina, $matricula, null, $this->pessoa_logada, null, null, null, $this->num_modulo, $this->ref_cod_curso, $valorNota["valor"]);
                             if (!$objNotaAluno->cadastra()) {
                                 die("não cadastrou (nota)");
                             }
                             $objMatricula = new clsPmieducarMatricula($matricula, null, null, null, $this->pessoa_logada, $this->pessoa_logada, null, $this->resultado_final[$matricula]);
                             if (!$objMatricula->edita()) {
                                 die("não cadastrou (resultado final)");
                             }
                             $objFaltaAluno = new clsPmieducarFaltaAluno();
                             $existe_falta = $objFaltaAluno->lista(null, null, null, $this->ref_cod_serie_disciplina, $this->ref_ref_cod_escola, $this->ref_cod_disciplina, $matricula, null, null, null, null, null, 1, $this->modulo, $this->ref_cod_disciplina);
                             if ($existe_falta) {
                                 $objFaltaAluno = new clsPmieducarFaltaAluno($existe_falta[0]['cod_falta_aluno'], $this->pessoa_logada, $this->pessoa_logada, $this->ref_cod_serie_disciplina, $this->ref_ref_cod_escola, $this->ref_cod_disciplina, $matricula, $this->falta[$matricula], null, null, null, $this->num_modulo);
                                 if (!$objFaltaAluno->edita()) {
                                     die("não editou (falta)");
                                 }
                             } else {
                                 $objFaltaAluno = new clsPmieducarFaltaAluno(null, null, $this->pessoa_logada, $this->ref_cod_serie_disciplina, $this->ref_ref_cod_escola, $this->ref_cod_disciplina, $matricula, $this->falta[$matricula], null, null, null, $this->num_modulo);
                                 if (!$objFaltaAluno->cadastra()) {
                                     die("não cadastrou (falta)");
                                 }
                             }
                         }
                     } else {
                         die("falto parâmetros");
                     }
                 }
                 //			die("nao");
                 // o professor decidiu sobre as excessoes
                 foreach ($this->excessao as $cod_excessao => $sentenca) {
                     $objExcessao = new clsPmieducarMatriculaExcessao($cod_excessao);
                     $detalhe_excessao = $objExcessao->detalhe();
                     // verifica se ela ainda existe porque se houve uma sentenca anterior para o mesmo aluno reprovando ele, todas as outras sentencas sao removidas
                     if ($detalhe_excessao) {
                         if ($sentenca == 0) {
                             // aluno reprovado
                             // reprova aluno
                             $objMatricula = new clsPmieducarMatricula($detalhe_excessao["ref_cod_matricula"], null, null, null, $this->pessoa_logada, null, null, 2);
                             $objMatricula->edita();
                             // remove excessoes
                             $objExcessao->excluirPorMatricula($detalhe_excessao["ref_cod_matricula"]);
                             $this->passo = 0;
                             return true;
                         } else {
                             if ($sentenca == 1) {
                                 // aluno podera fazer exame
                                 // remove excessao
                                 $objExcessao->excluir();
                                 $this->passo = 0;
                                 return true;
                             } else {
                                 if ($sentenca == 2) {
                                     // aluno aprovado
                                     // aprova aluno
                                     $objMatricula = new clsPmieducarMatricula($detalhe_excessao["ref_cod_matricula"], null, null, null, $this->pessoa_logada, null, null, 1);
                                     $objMatricula->edita();
                                     // remove excessao
                                     $objExcessao->excluir();
                                     $this->passo = 0;
                                     return true;
                                 }
                             }
                         }
                     }
                 }
             } else {
                 if ($this->passo == 4) {
                     //			echo "<pre>"; print_r($this->resultado_final); die();
                     // aprovou/reprovou alunos manualmente
                     $objCurso = new clsPmieducarCurso($this->ref_cod_curso);
                     foreach ($this->resultado_final as $key => $value) {
                         if ($value) {
                             // remove excessoes
                             $objExcessao = new clsPmieducarMatriculaExcessao();
                             $objExcessao->excluirPorMatricula($key);
                             // aprova/reprova
                             $objMatricula = new clsPmieducarMatricula($key, null, null, null, $this->pessoa_logada, null, null, $value);
                             $objMatricula->edita();
                         }
                     }
                     $this->passo = 0;
                     return true;
                 }
             }
         }
     }
     return false;
 }