function Editar()
 {
     @session_start();
     $this->pessoa_logada = $_SESSION['id_pessoa'];
     @session_write_close();
     $obj_permissoes = new clsPermissoes();
     $obj_permissoes->permissao_cadastra(642, $this->pessoa_logada, 7, "educar_falta_nota_aluno_lst.php");
     //************************************* EDITA - MATRICULADO NUMA SERIE *************************************//
     if ($this->ref_ref_cod_serie) {
         //			if (is_numeric($this->modulo))
         //			{
         //				$this->mat_modulo = $this->modulo;
         //			}
         if (!$this->reprova_falta) {
             $this->editaSNotasFaltas();
         }
         /**
          * verifica se existem disciplinas sem notas
          *
          */
         $obj_nota_aluno = new clsPmieducarNotaAluno();
         $total = $obj_nota_aluno->getQtdRestanteNotasAlunoNaoApuraFaltas($this->ref_cod_matricula, $this->ref_ref_cod_serie, $this->ref_cod_turma, $this->modulo, $this->ref_ref_cod_escola);
         /* verifica se o aluno está em exame
          * e se todas as matérias do exame estão com notas
          */
         $aluno_esta_em_exame = $_POST["aluno_esta_em_exame"];
         $qtd_disciplinas_aluno_exame = $_POST["qtd_disciplinas_aluno_exame"];
         if ($aluno_esta_em_exame == 1) {
             $sql = "SELECT COUNT(0)\n\t\t\t\t\t\t\t\tFROM pmieducar.nota_aluno na\n\t\t\t\t\t\t\t\t, pmieducar.disciplina d\n\t\t\t\t\t\t\t\t, pmieducar.v_matricula_matricula_turma mmt\n\t\t\t\t\t\t\t\tWHERE na.ref_cod_matricula = '{$this->ref_cod_matricula}'\n\t\t\t\t\t\t\t\tAND na.ref_cod_matricula = mmt.cod_matricula\n\t\t\t\t\t\t\t\tAND mmt.ref_cod_turma = '{$this->ref_cod_turma}'\n\t\t\t\t\t\t\t\tAND na.ativo = 1\n\t\t\t\t\t\t\t\tAND mmt.ativo = 1\n\t\t\t\t\t\t\t\tAND na.ref_cod_disciplina = d.cod_disciplina\n\t\t\t\t\t\t\t\tAND na.ref_cod_serie = '{$this->ref_ref_cod_serie}'\n\t\t\t\t\t\t\t\tAND na.modulo = '{$this->modulo}'";
             $db = new clsBanco();
             $notas_exame_ja_recebidas = $db->CampoUnico($sql);
             if ($qtd_disciplinas_aluno_exame == $notas_exame_ja_recebidas) {
                 $total = 0;
             }
         }
         /**
          * existem disciplinas sem notas
          * somente cadastra e o modulo do aluno
          * continua igual sem calcular nada
          */
         if ($total > 0) {
             /**
              * caso NENHUMA materia tenha nota
              * (por motivo de exclusao) verificar se o modulo da matricula
              * é maior que o ultimo modulo com nota
              * entao decrementar o modulo da matricula
              */
             $ultimo_modulo_matricula = $obj_nota_aluno->getMaxNotas($this->ref_cod_matricula);
             if ($ultimo_modulo_matricula < $this->mat_modulo) {
                 if ($this->nota_foi_removida && $this->pessoa_logada == 184580) {
                     $obj_hst_escolar = new clsPmieducarHistoricoEscolar();
                     $lst_hst_escolar = $obj_hst_escolar->lista($this->ref_cod_aluno, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1, null, null, null, null, $this->ref_cod_matricula);
                     if (is_array($lst_hst_escolar)) {
                         $det_hst_escolar = array_shift($lst_hst_escolar);
                         $obj_hd = new clsPmieducarHistoricoDisciplinas();
                         $excluiu_hd = $obj_hd->excluirTodos($this->ref_cod_aluno, $det_hst_escolar["sequencial"]);
                         if (!$excluiu_hd) {
                             $this->mensagem = "Exclus&atilde;o do Hist&oacute;rico Disciplina n&atilde;o realizado.<br>";
                             return false;
                         }
                         $obj_hst_escolar = new clsPmieducarHistoricoEscolar($this->ref_cod_aluno, $det_hst_escolar["sequencial"], $this->pessoa_logada, null, null, null, null, null, null, null, null, null, null, null, null, 0);
                         $excluiu_he = $obj_hst_escolar->excluir();
                         if (!$excluiu_he) {
                             $this->mensagem = "Exclus&atilde;o do Hist&oacute;rico Escolar n&atilde;o realizado.<br>";
                             return false;
                         }
                     }
                 }
                 $obj = new clsPmieducarMatricula($this->ref_cod_matricula, null, null, null, $this->pessoa_logada, null, null, 3, null, null, null, null, null, $ultimo_modulo_matricula);
                 $editou = $obj->edita();
             }
             $this->mensagem .= "Cadastro efetuado com sucesso.<br>";
             header("Location: educar_falta_nota_aluno_det.php?ref_cod_matricula={$this->ref_cod_matricula}&ref_cod_turma={$this->ref_cod_turma}&sequencial={$this->ref_sequencial_matricula_turma}");
             die;
             return true;
         } else {
             //$ultimo_modulo_matricula = $obj_nota_aluno->getMaxNotas($this->ref_cod_matricula);
             //die("$ultimo_modulo_matricula < $this->mat_modulo || $this->modulo");
             if ($this->mat_modulo == $this->modulo) {
                 $obj = new clsPmieducarMatricula($this->ref_cod_matricula, null, null, null, $this->pessoa_logada, null, null, 3, null, null, null, null, null, $ultimo_modulo_matricula);
                 $editou = $obj->avancaModulo();
             }
         }
         $aprovado = 3;
         if ($this->qtd_modulos <= $this->mat_modulo) {
             $obj_curso = new clsPmieducarCurso($this->ref_cod_curso);
             $det_curso = $obj_curso->detalhe();
             $frequencia_minima = $det_curso["frequencia_minima"];
             $hora_falta = $det_curso["hora_falta"];
             $carga_horaria_curso = $det_curso["carga_horaria"];
             $obj_esd = new clsPmieducarEscolaSerieDisciplina();
             $lst_esd = $obj_esd->lista($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, null, 1);
             if (is_array($lst_esd)) {
                 $obj_nota_aluno = new clsPmieducarNotaAluno();
                 $max_nota = $obj_nota_aluno->getMaxNotas($this->ref_cod_matricula);
                 $obj_serie = new clsPmieducarSerie($this->ref_ref_cod_serie);
                 $det_serie = $obj_serie->detalhe();
                 $media_especial = $det_serie['media_especial'];
                 foreach ($lst_esd as $campo) {
                     $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, $campo["ref_cod_disciplina"], $this->ref_cod_matricula, null, null, null, null, null, null, 1);
                     // so busca as notas da disciplina se nao for media especial
                     if (is_array($lst_nota_aluno) && !dbBool($media_especial)) {
                         foreach ($lst_nota_aluno as $key => $nota_aluno) {
                             if ($nota_aluno['nota']) {
                                 $soma_notas[$campo["ref_cod_disciplina"]][$key] = $nota_aluno['nota'] * 2;
                             } else {
                                 $obj_avaliacao_valores = new clsPmieducarTipoAvaliacaoValores($nota_aluno["ref_ref_cod_tipo_avaliacao"], $nota_aluno["ref_sequencial"]);
                                 $det_avaliacao_valores = $obj_avaliacao_valores->detalhe();
                                 $soma_notas[$campo["ref_cod_disciplina"]][$key] = $det_avaliacao_valores["valor"];
                             }
                         }
                     }
                     if (!$this->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, $campo["ref_cod_disciplina"], $this->ref_cod_matricula, null, null, null, null, null, 1);
                         if (is_array($lst_falta_aluno)) {
                             foreach ($lst_falta_aluno as $key => $falta_aluno) {
                                 $soma_faltas[$campo["ref_cod_disciplina"]][$key] = $falta_aluno["faltas"];
                             }
                         }
                     }
                 }
                 if (is_array($soma_faltas)) {
                     foreach ($soma_faltas as $disciplina => $faltas) {
                         foreach ($faltas as $falta) {
                             $faltas_media_aluno[$disciplina] += $falta;
                         }
                     }
                 }
             }
             if (is_array($faltas_media_aluno)) {
                 foreach ($faltas_media_aluno as $disciplina => $faltas) {
                     $obj_disciplina = new clsPmieducarDisciplina($disciplina);
                     $det_disciplina = $obj_disciplina->detalhe();
                     $carga_horaria_disciplina = $det_disciplina["carga_horaria"];
                     // calcula o maximo de horas q o aluno pode faltar na disciplina
                     $max_falta = $carga_horaria_disciplina * $frequencia_minima / 100;
                     $max_falta = $carga_horaria_disciplina - $max_falta;
                     // calcula a quantidade de faltas por hora do aluno na disciplina
                     $faltas *= $hora_falta;
                     if ($faltas > $max_falta && !$this->reprova_falta) {
                         echo "<script>\n\t\t\t\t\t\t\t\t\tif( confirm('O aluno excedeu o valor máximo de faltas permitidas, \\n deseja reprová-lo? \\n Quantidade de faltas do aluno: {$faltas} \\n Valor máximo de faltas permitido: {$max_falta} \\n \\n Clique em OK para reprová-lo ou em CANCELAR para ignorar.') )\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\twindow.location = 'educar_falta_nota_aluno_cad.php?ref_cod_matricula={$this->ref_cod_matricula}&ref_cod_turma={$this->ref_cod_turma}&ref_sequencial_matricula_turma={$this->ref_sequencial_matricula_turma}&modulo={$this->modulo}&falta=s';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\twindow.location = 'educar_falta_nota_aluno_cad.php?ref_cod_matricula={$this->ref_cod_matricula}&ref_cod_turma={$this->ref_cod_turma}&ref_sequencial_matricula_turma={$this->ref_sequencial_matricula_turma}&modulo={$this->modulo}&falta=n';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</script>";
                         return true;
                     }
                     if ($this->reprova_falta == 's') {
                         $aprovado = 2;
                         // aluno reprovado por falta
                     }
                 }
             } else {
                 $obj_serie = new clsPmieducarSerie($this->ref_ref_cod_serie);
                 $det_serie = $obj_serie->detalhe();
                 $carga_horaria_serie = $det_serie["carga_horaria"];
                 // calcula o maximo de horas q o aluno pode faltar na serie
                 $max_falta = $carga_horaria_serie * $frequencia_minima / 100;
                 $max_falta = $carga_horaria_serie - $max_falta;
                 // calcula a quantidade de faltas por hora do aluno na serie
                 $obj_faltas = new clsPmieducarFaltas();
                 $lst_faltas = $obj_faltas->lista($this->ref_cod_matricula);
                 if (is_array($lst_faltas)) {
                     $total_faltas = 0;
                     foreach ($lst_faltas as $key => $faltas) {
                         $total_faltas += $faltas['falta'];
                     }
                     $total_faltas *= $hora_falta;
                     if ($total_faltas > $max_falta && !$this->reprova_falta) {
                         echo "<script>\n\t\t\t\t\t\t\t\t\tif( confirm('O aluno excedeu o valor máximo de faltas permitidas, \\n deseja reprová-lo? \\n Quantidade de faltas do aluno: {$total_faltas} \\n Valor máximo de faltas permitido: {$max_falta} \\n \\n Clique em OK para reprová-lo ou em CANCELAR para ignorar.') )\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\twindow.location = 'educar_falta_nota_aluno_cad.php?ref_cod_matricula={$this->ref_cod_matricula}&ref_cod_turma={$this->ref_cod_turma}&ref_sequencial_matricula_turma={$this->ref_sequencial_matricula_turma}&modulo={$this->modulo}&falta=s';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\twindow.location = 'educar_falta_nota_aluno_cad.php?ref_cod_matricula={$this->ref_cod_matricula}&ref_cod_turma={$this->ref_cod_turma}&ref_sequencial_matricula_turma={$this->ref_sequencial_matricula_turma}&modulo={$this->modulo}&falta=n';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</script>";
                         return true;
                     }
                     if ($this->reprova_falta == 's') {
                         $aprovado = 2;
                         // aluno reprovado por falta
                     }
                 }
             }
             /**
              * calculo de media especial
              */
             if (dbBool($media_especial)) {
                 $objNotaAluno = new clsPmieducarNotaAluno();
                 $media = $objNotaAluno->getMediaEspecialAluno($this->ref_cod_matricula, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->qtd_modulos, $this->media);
                 if ($media < $this->media) {
                     //  reprovado direto sem exame
                     $aprovado = 2;
                 }
             }
         }
         $db2 = new clsBanco();
         //retorna quantas matérias o aluno cursa não contabilizando as matérias com dispensa
         $sql = "SELECT COUNT(0) FROM pmieducar.escola_serie_disciplina WHERE ref_ref_cod_serie = {$this->ref_ref_cod_serie} \n\t\t\t\t\tAND ref_ref_cod_escola = {$this->ref_ref_cod_escola} AND escola_serie_disciplina.ativo = 1\n\t\t\t\t\tAND ref_cod_disciplina NOT IN (\n\t\t\t\t\t\tSELECT ref_cod_disciplina\n\t\t\t\t\t\tFROM pmieducar.dispensa_disciplina WHERE \n\t\t\t\t\t\tref_cod_matricula = {$this->ref_cod_matricula} AND ref_cod_serie = {$this->ref_ref_cod_serie}\n\t\t\t\t\t\tAND ref_cod_escola = {$this->ref_ref_cod_escola} AND ativo = 1\n\t\t\t\t\t)";
         $qtd_materias = $db2->CampoUnico($sql);
         //retorna quantas notas notas o aluno possui não contabilizandoa das matérias dispensadas
         $sql = "SELECT COUNT(0) FROM pmieducar.nota_aluno \n\t\t\t\t\tWHERE ref_cod_matricula = {$this->ref_cod_matricula} AND ativo = 1\n\t\t\t\t\tAND ref_cod_disciplina NOT IN (\n\t\t\t\t\t\t\tSELECT ref_cod_disciplina FROM pmieducar.dispensa_disciplina WHERE \n\t\t\t\t\t\t\tref_cod_matricula = {$this->ref_cod_matricula} AND ref_cod_serie = {$this->ref_ref_cod_serie} \n\t\t\t\t\t\t\tAND ref_cod_escola = {$this->ref_ref_cod_escola} AND ativo = 1\n\t\t\t\t\t)";
         //variável em uma edição para verificar se o aluno possui todas as notas
         //para mudar o estado de aprovado dele
         $qtd_notas_possui = $db2->CampoUnico($sql);
         $possui_todas_as_notas = $this->qtd_modulos * $qtd_materias >= $qtd_notas_possui || $aluno_esta_em_exame == 1 ? true : false;
         if ($this->qtd_modulos < $this->mat_modulo && $this->qtd_modulos == $max_nota && !dbBool($media_especial)) {
             if (is_array($soma_notas) && !dbBool($media_especial)) {
                 foreach ($soma_notas as $disciplina => $notas) {
                     foreach ($notas as $nota) {
                         if (dbBool($det_serie["ultima_nota_define"])) {
                             $nota_media_aluno[$disciplina] = $nota;
                         } else {
                             $nota_media_aluno[$disciplina] += $nota;
                         }
                     }
                     if (!dbBool($det_serie["ultima_nota_define"])) {
                         $nota_media_aluno[$disciplina] /= $this->mat_modulo - 1;
                     }
                 }
                 foreach ($nota_media_aluno as $disciplina => $nota) {
                     $obj_avaliacao_valores = new clsPmieducarTipoAvaliacaoValores();
                     $lst_avaliacao_valores = $obj_avaliacao_valores->lista($this->ref_cod_tipo_avaliacao, null, null, null, $nota, $nota);
                     if (is_array($lst_avaliacao_valores)) {
                         $det_avaliacao_valores = array_shift($lst_avaliacao_valores);
                         $valor = $det_avaliacao_valores["valor"];
                     }
                     /**
                      * verifica se existem disciplinas sem notas
                      * somente aprova caso seja zero
                      */
                     //$obj_nota_aluno = new clsPmieducarNotaAluno();
                     //	$total = $obj_nota_aluno->getQtdRestanteNotasAlunoNaoApuraFaltas($this->ref_cod_matricula,$this->ref_ref_cod_serie,$this->ref_cod_turma,$this->modulo,$this->ref_ref_cod_escola);
                     if ($nota < $this->media && $this->media_exame && !$this->conceitual && $possui_todas_as_notas) {
                         $em_exame = true;
                         // aluno em exame
                     } else {
                         if ($valor < $this->media && !$this->media_exame && !$this->conceitual && $possui_todas_as_notas) {
                             $aprovado = 2;
                             // aluno reprovado direto (n existe exame)
                         }
                     }
                 }
             }
         } else {
             if ($this->qtd_modulos < $this->mat_modulo && $this->qtd_modulos < $max_nota && !dbBool($media_especial)) {
                 //				echo "<pre>"; print_r($soma_notas);
                 foreach ($soma_notas as $disciplina => $notas) {
                     $qtd_notas = 0;
                     foreach ($notas as $nota) {
                         $nota_media_aluno[$disciplina] += $nota;
                         $qtd_notas++;
                     }
                     if ($qtd_notas == $this->modulo) {
                         $nota_media_aluno[$disciplina] /= $this->modulo + 1;
                     } else {
                         $nota_media_aluno[$disciplina] /= $this->modulo - 1;
                     }
                 }
                 foreach ($nota_media_aluno as $disciplina => $nota) {
                     $obj_avaliacao_valores = new clsPmieducarTipoAvaliacaoValores();
                     $lst_avaliacao_valores = $obj_avaliacao_valores->lista($this->ref_cod_tipo_avaliacao, null, null, null, $nota, $nota);
                     if (is_array($lst_avaliacao_valores)) {
                         $det_avaliacao_valores = array_shift($lst_avaliacao_valores);
                         $valor = $det_avaliacao_valores["valor"];
                         if ($valor < $this->media_exame) {
                             $aprovado = 2;
                             // aluno reprovado no exame
                         }
                         /*else if ( ($valor < $this->media) && ($this->qtd_modulos >= $this->modulo) )
                         		$aprovado = 7; // aluno em exame*/
                     }
                 }
             }
         }
         /**
          * verifica se existem disciplinas sem notas
          * somente aprova caso seja zero
          */
         //$obj_nota_aluno = new clsPmieducarNotaAluno();
         //$total = $obj_nota_aluno->getQtdRestanteNotasAlunoNaoApuraFaltas($this->ref_cod_matricula,$this->ref_ref_cod_serie,$this->ref_cod_turma,$this->modulo,$this->ref_ref_cod_escola);
         if ($this->conceitual) {
             $aprovado = $this->aprovado;
             // situacao definida pelo professor
         } else {
             if (!$em_exame && $this->qtd_modulos <= $this->mat_modulo && $aprovado == 3 && !$this->conceitual && $possui_todas_as_notas) {
                 $aprovado = 1;
                 // aluno aprovado
             }
         }
         $obj = new clsPmieducarMatricula($this->ref_cod_matricula, null, null, null, $this->pessoa_logada, null, null, $aprovado);
         $editou = $obj->edita();
         //die($aprovado);
         if ($editou) {
             /**
              * aluno reprovado mantem historico
              * 01/03/2006
              */
             if ($aprovado == 2 || $aprovado == 3 || $aprovado == 1) {
                 $obj_hst_escolar = new clsPmieducarHistoricoEscolar();
                 $lst_hst_escolar = $obj_hst_escolar->lista($this->ref_cod_aluno, null, null, null, $det_serie["nm_serie"], $this->ano_letivo, $carga_horaria_serie, null, null, null, null, null, null, null, null, null, null, null, null, $this->ref_cod_instituicao, 0, null, $this->ref_cod_matricula);
                 if (is_array($lst_hst_escolar)) {
                     $det_hst_escolar = array_shift($lst_hst_escolar);
                     $obj_hd = new clsPmieducarHistoricoDisciplinas();
                     $excluiu_hd = $obj_hd->excluirTodos($this->ref_cod_aluno, $det_hst_escolar["sequencial"]);
                     if (!$excluiu_hd) {
                         $this->mensagem = "Exclus&atilde;o do Hist&oacute;rico Disciplina n&atilde;o realizado.<br>";
                         return false;
                     }
                     $obj_hst_escolar = new clsPmieducarHistoricoEscolar($this->ref_cod_aluno, $det_hst_escolar["sequencial"], $this->pessoa_logada, null, null, null, null, null, null, null, null, null, null, null, null, 0);
                     $excluiu_he = $obj_hst_escolar->excluir();
                     if (!$excluiu_he) {
                         $this->mensagem = "Exclus&atilde;o do Hist&oacute;rico Escolar n&atilde;o realizado.<br>";
                         return false;
                     }
                 }
             }
             /*else */
             if ($aprovado == 1 || $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"];
                 // 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"];
                     }
                 }
                 if ($this->padrao_ano_escolar) {
                     $extra_curricular = 0;
                 } else {
                     $extra_curricular = 1;
                 }
                 $sql = "SELECT SUM(falta) FROM pmieducar.faltas WHERE ref_cod_matricula = {$this->ref_cod_matricula}";
                 $db5 = new clsBanco();
                 $total_faltas = $db5->CampoUnico($sql);
                 $obj_hst_escolar = new clsPmieducarHistoricoEscolar();
                 $lst_hst_escolar = $obj_hst_escolar->lista($this->ref_cod_aluno, null, null, null, $det_serie["nm_serie"], $this->ano_letivo, $carga_horaria_serie, null, null, null, null, null, null, null, null, null, null, null, null, $this->ref_cod_instituicao, 0, null, $this->ref_cod_matricula);
                 if (is_array($lst_hst_escolar)) {
                     $det_hst_escolar = array_shift($lst_hst_escolar);
                     $obj = new clsPmieducarHistoricoEscolar($this->ref_cod_aluno, $det_hst_escolar["sequencial"], $this->pessoa_logada, null, null, null, null, null, null, $cidade, $uf, null, $aprovado, null, null, 1, $total_faltas, null, null, $extra_curricular);
                     $editou_he = $obj->edita();
                 } else {
                     $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, $aprovado, null, null, 1, $total_faltas, $this->ref_cod_instituicao, 0, $extra_curricular, $this->ref_cod_matricula);
                     $cadastrou_he = $obj->cadastra();
                 }
                 if (($editou_he || $cadastrou_he) && !$this->conceitual) {
                     if ($cadastrou_he) {
                         $obj_historico = new clsPmieducarHistoricoEscolar();
                         $sequencial = $obj_historico->getMaxSequencial($this->ref_cod_aluno);
                     } else {
                         $sequencial = $det_hst_escolar["sequencial"];
                     }
                     $historico_disciplina = array();
                     foreach ($nota_media_aluno as $key => $nota) {
                         $historico_disciplina[$key] = array($nota, $faltas_media_aluno[$key]);
                     }
                     foreach ($historico_disciplina as $disciplina => $campo) {
                         $obj_disciplina = new clsPmieducarDisciplina($disciplina);
                         $det_disciplina = $obj_disciplina->detalhe();
                         $nm_disciplina = $det_disciplina["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_hd = new clsPmieducarHistoricoDisciplinas();
                             $lst_hd = $obj_hd->lista(null, $this->ref_cod_aluno, $sequencial, $nm_disciplina);
                             if (is_array($lst_hd)) {
                                 $det_hd = array_shift($lst_hd);
                                 $obj_hd = new clsPmieducarHistoricoDisciplinas($det_hd["sequencial"], $this->ref_cod_aluno, $sequencial, $nm_disciplina, $nm_nota, $campo[1]);
                                 $hst_disciplina = $obj_hd->edita();
                             } else {
                                 $obj_hd = new clsPmieducarHistoricoDisciplinas(null, $this->ref_cod_aluno, $sequencial, $nm_disciplina, $nm_nota, $campo[1]);
                                 $hst_disciplina = $obj_hd->cadastra();
                             }
                             if (!$hst_disciplina) {
                                 $this->mensagem = "Cadastro/Edi&ccedil;&atilde;o do Hist&oacute;rico Disciplinas n&atilde;o realizado.<br>";
                                 return false;
                             }
                         } else {
                             $this->mensagem = "N&atilde;o foi poss&iacute;vel encontrar os Valores do Tipo de Avalia&ccedil;&atilde;o.<br>";
                             return false;
                         }
                     }
                 }
                 /*
                 else if( (!$editou_he || !$cadastrou_he) && (!$this->conceitual) )
                 {
                 	$this->mensagem = "Cadastro/Edi&ccedil;&atilde;o do Hist&oacute;rico Escolar n&atilde;o realizado.<br>";
                 	return false;
                 }
                 */
             }
             $this->mensagem .= "Cadastro efetuado com sucesso.<br>";
             header("Location: educar_falta_nota_aluno_det.php?ref_cod_matricula={$this->ref_cod_matricula}&ref_cod_turma={$this->ref_cod_turma}&sequencial={$this->ref_sequencial_matricula_turma}");
             die;
             return true;
         }
         $this->mensagem = "Edi&ccedil;&atilde;o n&atilde;o realizada (Matr&iacute;cula).<br>";
         echo "<!--\nErro ao editar clsPmieducarMatricula\nvalores obrigatorios\nis_numeric( {$this->ref_cod_matricula} ) && is_numeric( {$this->pessoa_logada} ) && is_numeric( {$this->modulo} )\n-->";
         return false;
     } else {
         if (!$this->reprova_falta) {
             $this->editaCNotasFaltas();
         }
         /**
          * verifica se existem disciplinas sem notas
          *
          */
         $obj_nota_aluno = new clsPmieducarNotaAluno();
         $total = $obj_nota_aluno->getQtdRestanteNotasAlunoNaoApuraFaltas($this->ref_cod_matricula, $this->ref_ref_cod_serie, $this->ref_cod_turma, $this->modulo, $this->ref_ref_cod_escola);
         /**
          * existem disciplinas sem notas
          * somente cadastra e o modulo do aluno
          * continua igual sem calcular nada
          */
         if ($total) {
             $this->mensagem .= "Cadastro efetuado com sucesso.<br>";
             header("Location: educar_falta_nota_aluno_det.php?ref_cod_matricula={$this->ref_cod_matricula}&ref_cod_turma={$this->ref_cod_turma}&sequencial={$this->ref_sequencial_matricula_turma}");
             die;
             return true;
         }
         $aprovado = 3;
         if ($this->qtd_modulos <= $this->mat_modulo) {
             $obj_curso = new clsPmieducarCurso($this->ref_cod_curso);
             $det_curso = $obj_curso->detalhe();
             $frequencia_minima = $det_curso["frequencia_minima"];
             $hora_falta = $det_curso["hora_falta"];
             $carga_horaria_curso = $det_curso["carga_horaria"];
             $obj_disciplina = new clsPmieducarDisciplina();
             $lst_disciplina = $obj_disciplina->lista(null, null, null, null, null, null, null, null, null, null, null, null, 1, null, $this->ref_cod_curso);
             if (is_array($lst_disciplina)) {
                 foreach ($lst_disciplina as $campo) {
                     $obj_nota_aluno = new clsPmieducarNotaAluno();
                     $lst_nota_aluno = $obj_nota_aluno->lista(null, null, null, null, null, null, $this->ref_cod_matricula, null, null, null, null, null, null, 1, null, $campo["cod_disciplina"]);
                     if (is_array($lst_nota_aluno)) {
                         foreach ($lst_nota_aluno as $key => $nota_aluno) {
                             if ($nota_aluno["nota"]) {
                                 $soma_notas[$campo["cod_disciplina"]][$key] = $nota_aluno["nota"] * 2;
                             } else {
                                 $obj_avaliacao_valores = new clsPmieducarTipoAvaliacaoValores($nota_aluno["ref_ref_cod_tipo_avaliacao"], $nota_aluno["ref_sequencial"]);
                                 $det_avaliacao_valores = $obj_avaliacao_valores->detalhe();
                                 $soma_notas[$campo["cod_disciplina"]][$key] = $det_avaliacao_valores["valor"];
                             }
                         }
                     }
                     if (!$this->falta_ch_globalizada) {
                         $obj_falta_aluno = new clsPmieducarFaltaAluno();
                         $lst_falta_aluno = $obj_falta_aluno->lista(null, null, null, null, null, null, $this->ref_cod_matricula, null, null, null, null, null, 1, null, $campo["cod_disciplina"]);
                         if (is_array($lst_falta_aluno)) {
                             foreach ($lst_falta_aluno as $key => $falta_aluno) {
                                 $soma_faltas[$campo["cod_disciplina"]][$key] = $falta_aluno["faltas"];
                             }
                         }
                     }
                 }
                 if (is_array($soma_faltas)) {
                     foreach ($soma_faltas as $disciplina => $faltas) {
                         foreach ($faltas as $falta) {
                             $faltas_media_aluno[$disciplina] += $falta;
                         }
                     }
                 }
             }
             if (is_array($faltas_media_aluno)) {
                 foreach ($faltas_media_aluno as $disciplina => $faltas) {
                     $obj_disciplina = new clsPmieducarDisciplina($disciplina);
                     $det_disciplina = $obj_disciplina->detalhe();
                     $carga_horaria_disciplina = $det_disciplina["carga_horaria"];
                     // calcula o maximo de horas q o aluno pode faltar na disciplina
                     $max_falta = $carga_horaria_disciplina * $frequencia_minima / 100;
                     $max_falta = $carga_horaria_disciplina - $max_falta;
                     // calcula a quantidade de faltas por hora do aluno na disciplina
                     $faltas *= $hora_falta;
                     if ($faltas > $max_falta && !$this->reprova_falta) {
                         echo "<script>\n\t\t\t\t\t\t\t\t\tif( confirm('O aluno excedeu o valor máximo de faltas permitidas, \\n deseja reprová-lo? \\n Quantidade de faltas do aluno: {$faltas} \\n Valor máximo de faltas permitido: {$max_falta} \\n \\n Clique em OK para reprová-lo ou em CANCELAR para ignorar.') )\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\twindow.location = 'educar_falta_nota_aluno_cad.php?ref_cod_matricula={$this->ref_cod_matricula}&ref_cod_turma={$this->ref_cod_turma}&ref_sequencial_matricula_turma={$this->ref_sequencial_matricula_turma}&modulo={$this->modulo}&falta=s';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\twindow.location = 'educar_falta_nota_aluno_cad.php?ref_cod_matricula={$this->ref_cod_matricula}&ref_cod_turma={$this->ref_cod_turma}&ref_sequencial_matricula_turma={$this->ref_sequencial_matricula_turma}&modulo={$this->modulo}&falta=n';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</script>";
                         return true;
                     }
                     if ($this->reprova_falta == 's') {
                         $aprovado = 2;
                         // aluno reprovado por falta
                     }
                 }
             } else {
                 // calcula o maximo de horas q o aluno pode faltar no curso
                 $max_falta = $carga_horaria_curso * $frequencia_minima / 100;
                 $max_falta = $carga_horaria_curso - $max_falta;
                 // calcula a qtd de faltas por hora do aluno no curso
                 $obj_faltas = new clsPmieducarFaltas();
                 $lst_faltas = $obj_faltas->lista($this->ref_cod_matricula);
                 if (is_array($lst_faltas)) {
                     $total_faltas = 0;
                     foreach ($lst_faltas as $key => $faltas) {
                         $total_faltas += $faltas['falta'];
                     }
                     $total_faltas *= $hora_falta;
                     if ($total_faltas > $max_falta && !$this->reprova_falta) {
                         echo "<script>\n\t\t\t\t\t\t\t\t\tif( confirm('O aluno excedeu o valor máximo de faltas permitidas, \\n deseja reprová-lo? \\n Quantidade de faltas do aluno: {$total_faltas} \\n Valor máximo de faltas permitido: {$max_falta} \\n \\n Clique em OK para reprová-lo ou em CANCELAR para ignorar.') )\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\twindow.location = 'educar_falta_nota_aluno_cad.php?ref_cod_matricula={$this->ref_cod_matricula}&ref_cod_turma={$this->ref_cod_turma}&ref_sequencial_matricula_turma={$this->ref_sequencial_matricula_turma}&modulo={$this->modulo}&falta=s';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\twindow.location = 'educar_falta_nota_aluno_cad.php?ref_cod_matricula={$this->ref_cod_matricula}&ref_cod_turma={$this->ref_cod_turma}&ref_sequencial_matricula_turma={$this->ref_sequencial_matricula_turma}&modulo={$this->modulo}&falta=n';\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t</script>";
                         return true;
                     }
                     if ($this->reprova_falta == 's') {
                         $aprovado = 2;
                         // aluno reprovado por falta
                     }
                 }
             }
         }
         if ($this->qtd_modulos < $this->mat_modulo && $this->qtd_modulos == $max_nota) {
             if (is_array($soma_notas)) {
                 foreach ($soma_notas as $disciplina => $notas) {
                     foreach ($notas as $nota) {
                         $nota_media_aluno[$disciplina] += $nota;
                     }
                     $nota_media_aluno[$disciplina] /= $this->mat_modulo - 1;
                 }
                 foreach ($nota_media_aluno as $disciplina => $nota) {
                     $obj_avaliacao_valores = new clsPmieducarTipoAvaliacaoValores();
                     $lst_avaliacao_valores = $obj_avaliacao_valores->lista($this->ref_cod_tipo_avaliacao, null, null, null, $nota, $nota);
                     if (is_array($lst_avaliacao_valores)) {
                         $det_avaliacao_valores = array_shift($lst_avaliacao_valores);
                         $valor = $det_avaliacao_valores["valor"];
                         /*
                         if ( ($valor < $this->media) && $this->media_exame && !$this->conceitual )
                         {
                         	$em_exame = true;
                         }
                         else if ( ($valor < $this->media) && !$this->media_exame && !$this->conceitual )
                         {
                         	$aprovado = 2; // aluno reprovado direto (n existe exame)
                         }
                         */
                     }
                     /**
                      * verifica se existem disciplinas sem notas
                      * somente aprova caso seja zero
                      */
                     $obj_nota_aluno = new clsPmieducarNotaAluno();
                     $total = $obj_nota_aluno->getQtdRestanteNotasAlunoNaoApuraFaltas($this->ref_cod_matricula, $this->ref_ref_cod_serie, $this->ref_cod_turma, $this->modulo, $this->ref_ref_cod_escola);
                     if ($nota < $this->media && $this->media_exame && !$this->conceitual) {
                         $em_exame = true;
                         // aluno em exame
                     } else {
                         if ($valor < $this->media && !$this->media_exame && !$this->conceitual) {
                             $aprovado = 2;
                             // aluno reprovado direto (n existe exame)
                         }
                     }
                 }
             }
         } else {
             if ($this->qtd_modulos < $this->mat_modulo && $this->qtd_modulos < $max_nota) {
                 foreach ($soma_notas as $disciplina => $notas) {
                     $qtd_notas = 0;
                     foreach ($notas as $nota) {
                         $nota_media_aluno[$disciplina] += $nota;
                         $qtd_notas++;
                     }
                     if ($qtd_notas == $this->mat_modulo) {
                         $nota_media_aluno[$disciplina] /= $this->mat_modulo;
                     } else {
                         $nota_media_aluno[$disciplina] /= $this->mat_modulo - 1;
                     }
                 }
                 foreach ($nota_media_aluno as $disciplina => $nota) {
                     $obj_avaliacao_valores = new clsPmieducarTipoAvaliacaoValores();
                     $lst_avaliacao_valores = $obj_avaliacao_valores->lista($this->ref_cod_tipo_avaliacao, null, null, null, $nota, $nota);
                     if (is_array($lst_avaliacao_valores)) {
                         $det_avaliacao_valores = array_shift($lst_avaliacao_valores);
                         $valor = $det_avaliacao_valores["valor"];
                         if ($valor < $this->media_exame) {
                             $aprovado = 2;
                             // aluno reprovado no exame
                         }
                     }
                 }
             }
         }
         /**
          * verifica se existem disciplinas sem notas
          * somente aprova caso seja zero
          */
         //$obj_nota_aluno = new clsPmieducarNotaAluno();
         //$total = $obj_nota_aluno->getQtdRestanteNotasAlunoNaoApuraFaltas($this->ref_cod_matricula,$this->ref_ref_cod_serie,$this->ref_cod_turma,$this->modulo,$this->ref_ref_cod_escola);
         if ($this->conceitual) {
             $aprovado = $this->aprovado;
             // situacao definida pelo professor
         } else {
             if (!$em_exame && $this->qtd_modulos <= $this->mat_modulo && $aprovado == 3 && !$this->conceitual) {
                 $aprovado = 1;
                 // aluno aprovado
             }
         }
         $obj = new clsPmieducarMatricula($this->ref_cod_matricula, null, null, null, $this->pessoa_logada, null, null, $aprovado);
         $editou = $obj->edita();
         if ($editou) {
             /**
              * aluno reprovado edita nao remove do historico
              */
             if ($aprovado == 2 || $aprovado == 3) {
                 $obj_hst_escolar = new clsPmieducarHistoricoEscolar();
                 $lst_hst_escolar = $obj_hst_escolar->lista($this->ref_cod_aluno, null, null, null, $det_curso['nm_curso'], $this->ano_letivo, $carga_horaria_curso, null, null, null, null, null, null, null, null, null, null, null, null, $this->ref_cod_instituicao, 0, 1, $this->ref_cod_matricula);
                 if (is_array($lst_hst_escolar)) {
                     $det_hst_escolar = array_shift($lst_hst_escolar);
                     $obj_hd = new clsPmieducarHistoricoDisciplinas();
                     $excluiu_hd = $obj_hd->excluirTodos($this->ref_cod_aluno, $det_hst_escolar["sequencial"]);
                     if (!$excluiu_hd) {
                         $this->mensagem = "Exclus&atilde;o do Hist&oacute;rico Disciplina n&atilde;o realizado.<br>";
                         return false;
                     }
                     $obj_hst_escolar = new clsPmieducarHistoricoEscolar($this->ref_cod_aluno, $det_hst_escolar["sequencial"], $this->pessoa_logada, null, null, null, null, null, null, null, null, null, null, null, null, 0);
                     $excluiu_he = $obj_hst_escolar->excluir();
                     if (!$excluiu_he) {
                         $this->mensagem = "Exclus&atilde;o do Hist&oacute;rico Escolar n&atilde;o realizado.<br>";
                         return false;
                     }
                 }
             }
             /*else*/
             if ($aprovado == 1 || $aprovado == 2) {
                 // busca informacoes da instituicao
                 $obj_instituicao = new clsPmieducarInstituicao($this->ref_cod_instituicao);
                 $det_instituicao = $obj_instituicao->detalhe();
                 $nm_instituicao = $det_instituicao["nm_instituicao"];
                 $cidade = $det_instituicao["cidade"];
                 $uf = $det_instituicao["ref_sigla_uf"];
                 $obj_hst_escolar = new clsPmieducarHistoricoEscolar();
                 $lst_hst_escolar = $obj_hst_escolar->lista($this->ref_cod_aluno, null, null, null, $det_curso['nm_curso'], $this->ano_letivo, $carga_horaria_curso, null, null, null, null, null, null, null, null, null, null, null, null, $this->ref_cod_instituicao, 0, 1, $this->ref_cod_matricula);
                 $sql = "SELECT SUM(falta) FROM pmieducar.faltas WHERE ref_cod_matricula = {$this->ref_cod_matricula}";
                 $db5 = new clsBanco();
                 $total_faltas = $db5->CampoUnico($sql);
                 if (is_array($lst_hst_escolar)) {
                     $det_hst_escolar = array_shift($lst_hst_escolar);
                     $obj_hst_escolar = new clsPmieducarHistoricoEscolar($this->ref_cod_aluno, $det_hst_escolar["sequencial"], $this->pessoa_logada, null, $det_curso['nm_curso'], $this->ano_letivo, $carga_horaria_curso, null, $nm_instituicao, $cidade, $uf, null, $aprovado, null, null, 1, $total_faltas, $this->ref_cod_instituicao, 0, 1, $this->ref_cod_matricula);
                     $editou_he = $obj_hst_escolar->edita();
                 } else {
                     $obj_hst_escolar = new clsPmieducarHistoricoEscolar($this->ref_cod_aluno, null, null, $this->pessoa_logada, $det_curso['nm_curso'], $this->ano_letivo, $carga_horaria_curso, null, $nm_instituicao, $cidade, $uf, null, $aprovado, null, null, 1, $total_faltas, $this->ref_cod_instituicao, 0, 1, $this->ref_cod_matricula);
                     $cadastrou_he = $obj_hst_escolar->cadastra();
                 }
                 if (($editou_he || $cadastrou_he) && !$this->conceitual) {
                     if ($cadastrou_he) {
                         $obj_historico = new clsPmieducarHistoricoEscolar();
                         $sequencial = $obj_historico->getMaxSequencial($this->ref_cod_aluno);
                     } else {
                         $sequencial = $det_hst_escolar["sequencial"];
                     }
                     $historico_disciplina = array();
                     foreach ($nota_media_aluno as $key => $nota) {
                         $historico_disciplina[$key] = array($nota, $faltas_media_aluno[$key]);
                     }
                     foreach ($historico_disciplina as $disciplina => $campo) {
                         $obj_disciplina = new clsPmieducarDisciplina($disciplina);
                         $det_disciplina = $obj_disciplina->detalhe();
                         $nm_disciplina = $det_disciplina["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_hd = new clsPmieducarHistoricoDisciplinas();
                             $lst_hd = $obj_hd->lista(null, $this->ref_cod_aluno, $sequencial, $nm_disciplina);
                             if (is_array($lst_hd)) {
                                 $det_hd = array_shift($lst_hd);
                                 $obj_hd = new clsPmieducarHistoricoDisciplinas($det_hd["sequencial"], $this->ref_cod_aluno, $sequencial, $nm_disciplina, $nm_nota, $campo[1]);
                                 $hst_disciplina = $obj_hd->edita();
                             } else {
                                 $obj_hd = new clsPmieducarHistoricoDisciplinas(null, $this->ref_cod_aluno, $sequencial, $nm_disciplina, $nm_nota, $campo[1]);
                                 $hst_disciplina = $obj_hd->cadastra();
                             }
                             if (!$hst_disciplina) {
                                 $this->mensagem = "Cadastro/Edi&ccedil;&atilde;o do Hist&oacute;rico Disciplinas n&atilde;o realizado.<br>";
                                 return false;
                             }
                         } else {
                             $this->mensagem = "N&atilde;o foi poss&iacute;vel encontrar os Valores do Tipo de Avalia&ccedil;&atilde;o.<br>";
                             return false;
                         }
                     }
                 }
                 /*
                 else if( !$editou_he || !$cadastrou_he )
                 {
                 	$this->mensagem = "Cadastro/Edi&ccedil;&atilde;o do Hist&oacute;rico Escolar n&atilde;o realizado.<br>";
                 	return false;
                 }
                 */
             }
             $this->mensagem .= "Cadastro efetuado com sucesso.<br>";
             header("Location: educar_falta_nota_aluno_det.php?ref_cod_matricula={$this->ref_cod_matricula}&ref_cod_turma={$this->ref_cod_turma}&sequencial={$this->ref_sequencial_matricula_turma}");
             die;
             return true;
         }
         $this->mensagem = "Edi&ccedil;&atilde;o n&atilde;o realizada (Matr&iacute;cula).<br>";
         echo "<!--\nErro ao editar clsPmieducarMatricula\nvalores obrigatorios\nis_numeric( {$this->ref_cod_matricula} ) && is_numeric( {$this->pessoa_logada} ) && is_numeric( {$this->modulo} )\n-->";
         return false;
     }
 }
 function Gerar()
 {
     @session_start();
     $this->pessoa_logada = $_SESSION['id_pessoa'];
     session_write_close();
     $this->titulo = "Faltas/Notas Aluno - Detalhe";
     $this->addBanner("imagens/nvp_top_intranet.jpg", "imagens/nvp_vert_intranet.jpg", "Intranet");
     $this->ref_cod_matricula = $_GET["ref_cod_matricula"];
     $this->ref_cod_turma = $_GET["ref_cod_turma"];
     $this->ref_sequencial_matricula_turma = $_GET["sequencial"];
     $obj_matricula_turma = new clsPmieducarMatriculaTurma();
     //		echo $this->ref_cod_matricula." ".$this->ref_cod_turma;
     $lst_matricula_turma = $obj_matricula_turma->lista($this->ref_cod_matricula, $this->ref_cod_turma, null, null, null, null, null, null, 1, null, null, null, null, null, null, null, null, $this->ref_sequencial_matricula_turma);
     if (is_array($lst_matricula_turma)) {
         $registro = array_shift($lst_matricula_turma);
     }
     if (!$registro) {
         header("location: educar_falta_nota_aluno_lst.php");
         die;
     }
     if (class_exists("clsPmieducarTurma")) {
         $obj_ref_ref_cod_turma = new clsPmieducarTurma($registro["ref_cod_turma"]);
         $det_ref_ref_cod_turma = $obj_ref_ref_cod_turma->detalhe();
         $nm_turma = $det_ref_ref_cod_turma["nm_turma"];
     } else {
         $registro["ref_cod_turma"] = "Erro na geracao";
         echo "<!--\nErro\nClasse nao existente: clsPmieducarTurma\n-->";
     }
     if (class_exists("clsPmieducarSerie")) {
         $obj_ref_cod_serie = new clsPmieducarSerie($registro["ref_ref_cod_serie"]);
         $det_ref_cod_serie = $obj_ref_cod_serie->detalhe();
         $nm_serie = $det_ref_cod_serie["nm_serie"];
     } else {
         $registro["ref_cod_serie"] = "Erro na geracao";
         echo "<!--\nErro\nClasse nao existente: clsPmieducarSerie\n-->";
     }
     if (class_exists("clsPmieducarCurso")) {
         $obj_ref_cod_curso = new clsPmieducarCurso($registro["ref_cod_curso"]);
         $det_ref_cod_curso = $obj_ref_cod_curso->detalhe();
         $nm_curso = $det_ref_cod_curso["nm_curso"];
         $padrao_ano_escolar = $det_ref_cod_curso["padrao_ano_escolar"];
         $falta_ch_globalizada = $det_ref_cod_curso["falta_ch_globalizada"];
         if ($padrao_ano_escolar) {
             $obj_ano_letivo = new clsPmieducarEscolaAnoLetivo();
             $lst_ano_letivo = $obj_ano_letivo->lista($registro["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);
                 $ano_letivo = $det_ano_letivo["ano"];
                 $obj_ano_letivo_modulo = new clsPmieducarAnoLetivoModulo();
                 $lst_ano_letivo_modulo = $obj_ano_letivo_modulo->lista($ano_letivo, $registro["ref_ref_cod_escola"]);
                 if (is_array($lst_ano_letivo_modulo)) {
                     $qtd_modulos = count($lst_ano_letivo_modulo);
                 }
             }
         } else {
             $obj_turma_modulo = new clsPmieducarTurmaModulo();
             $lst_turma_modulo = $obj_turma_modulo->lista($registro["ref_cod_turma"]);
             if (is_array($lst_turma_modulo)) {
                 $qtd_modulos = count($lst_turma_modulo);
             }
         }
     } else {
         $registro["ref_cod_curso"] = "Erro na geracao";
         echo "<!--\nErro\nClasse nao existente: clsPmieducarCurso\n-->";
     }
     if (class_exists("clsPmieducarInstituicao")) {
         $obj_cod_instituicao = new clsPmieducarInstituicao($registro["ref_cod_instituicao"]);
         $obj_cod_instituicao_det = $obj_cod_instituicao->detalhe();
         $registro["ref_cod_instituicao"] = $obj_cod_instituicao_det["nm_instituicao"];
     } else {
         $registro["ref_cod_instituicao"] = "Erro na gera&ccedil;&atilde;o";
         echo "<!--\nErro\nClasse n&atilde;o existente: clsPmieducarInstituicao\n-->";
     }
     if (class_exists("clsPmieducarEscola")) {
         $obj_ref_cod_escola = new clsPmieducarEscola($registro["ref_ref_cod_escola"]);
         $det_ref_cod_escola = $obj_ref_cod_escola->detalhe();
         $nm_escola = $det_ref_cod_escola["nome"];
     } else {
         $registro["ref_ref_cod_escola"] = "Erro na gera&ccedil;&atilde;o";
         echo "<!--\nErro\nClasse n&atilde;o existente: clsPmieducarEscola\n-->";
     }
     if (class_exists("clsPmieducarAluno")) {
         $obj_aluno = new clsPmieducarAluno();
         $lst_aluno = $obj_aluno->lista($registro["ref_cod_aluno"], null, null, null, null, null, null, null, null, null, 1);
         if (is_array($lst_aluno)) {
             $det_aluno = array_shift($lst_aluno);
             $registro["ref_cod_aluno"] = $det_aluno["nome_aluno"];
         }
     } else {
         $registro["ref_cod_aluno"] = "Erro na gera&ccedil;&atilde;o";
         echo "<!--\nErro\nClasse n&atilde;o existente: clsPmieducarAluno\n-->";
     }
     if ($registro["ref_cod_aluno"]) {
         $this->addDetalhe(array("Aluno", "{$registro["ref_cod_aluno"]}"));
     }
     if ($registro["ref_cod_matricula"]) {
         $this->addDetalhe(array("Matr&iacute;cula", "{$registro["ref_cod_matricula"]}"));
     }
     $obj_permissoes = new clsPermissoes();
     $nivel_usuario = $obj_permissoes->nivel_acesso($this->pessoa_logada);
     if ($nivel_usuario == 1) {
         if ($registro["ref_cod_instituicao"]) {
             $this->addDetalhe(array("Institui&ccedil;&atilde;o", "{$registro["ref_cod_instituicao"]}"));
         }
     }
     if ($nivel_usuario == 1 || $nivel_usuario == 2) {
         if ($nm_escola) {
             $this->addDetalhe(array("Escola", "{$nm_escola}"));
         }
     }
     if ($nm_curso) {
         $this->addDetalhe(array("Curso", "{$nm_curso}"));
     }
     if ($nm_serie) {
         $this->addDetalhe(array("S&eacute;rie", "{$nm_serie}"));
     }
     if ($nm_turma) {
         $this->addDetalhe(array("Turma", "{$nm_turma}"));
     }
     if ($qtd_modulos) {
         $this->addDetalhe(array("Quantidade de M&oacute;dulos", "{$qtd_modulos}"));
     }
     $obj_matricula = new clsPmieducarMatricula($registro["ref_cod_matricula"]);
     $det_matricula = $obj_matricula->detalhe();
     $modulo = $det_matricula["modulo"];
     $aprovado = $det_matricula["aprovado"];
     $ano_matricula = $det_matricula["ano"];
     $max_qtd_nota = 0;
     $min_qtd_nota = 10;
     //************************************* DETALHE - MATRICULADO NUMA SERIE *************************************//
     if ($registro["ref_ref_cod_serie"]) {
         $obj_dispensa = new clsPmieducarDispensaDisciplina();
         $lst_dispensa = $obj_dispensa->lista($registro["ref_cod_matricula"], $registro["ref_ref_cod_serie"], $registro["ref_ref_cod_escola"], null, null, null, null, null, null, null, null, 1);
         if (is_array($lst_dispensa)) {
             foreach ($lst_dispensa as $key => $disciplina) {
                 $dispensa[$disciplina["ref_cod_disciplina"]] = $disciplina["ref_cod_disciplina"];
             }
         }
         $obj_esd = new clsPmieducarEscolaSerieDisciplina();
         $obj_esd->setOrderby("nm_disciplina");
         $lst_disciplinas = $obj_esd->lista($registro["ref_ref_cod_serie"], $registro["ref_ref_cod_escola"], null, 1, true);
         if ($lst_disciplinas) {
             foreach ($lst_disciplinas as $disciplinas) {
                 $obj_nota_aluno = new clsPmieducarNotaAluno();
                 $qtd_notas = $obj_nota_aluno->getQtdNotas(null, null, $disciplinas["ref_cod_disciplina"], $this->ref_cod_matricula);
                 if ($max_qtd_nota < $qtd_notas) {
                     $max_qtd_nota = $qtd_notas;
                 }
                 if ($min_qtd_nota > $qtd_notas) {
                     $min_qtd_nota = $qtd_notas;
                 }
             }
         }
         if (is_array($lst_disciplinas)) {
             $tabela = "<table>\n\t\t\t\t\t\t       <tr align='center'>\n\t\t\t\t\t\t           <td rowspan='2' bgcolor='#a1b3bd'><b>Nome</b></td>";
             for ($i = 1; $i <= $max_qtd_nota; $i++) {
                 if ($qtd_modulos < $i) {
                     $tabela .= "<td colspan='2' bgcolor='#a1b3bd'><b>Exame</b></td>";
                 } else {
                     $tabela .= "<td colspan='2' bgcolor='#a1b3bd'><b>M&oacute;dulo {$i}</b></td>";
                 }
             }
             $tabela .= "</tr>";
             $tabela .= "<tr align=center>";
             for ($i = 1; $i <= $max_qtd_nota; $i++) {
                 if ($qtd_modulos < $i) {
                     $tabela .= "<td colspan='2' bgcolor='#a1b3bd'><b>Nota</b></td>";
                 } else {
                     $tabela .= "<td bgcolor='#a1b3bd'><b>Nota</b></td><td bgcolor='#a1b3bd'><b>Faltas</b></td>";
                 }
             }
             $tabela .= "</tr>";
             $cont = 0;
             $qtd_disciplinas = count($lst_disciplinas);
             $prim_disciplina = false;
             foreach ($lst_disciplinas as $valor) {
                 //					echo "<pre>"; print_r($lst_disciplinas); die();
                 $parar = false;
                 if (!strcmp($valor["nm_disciplina"], "Matemática")) {
                     $parar = true;
                 }
                 if (!$dispensa[$valor["ref_cod_disciplina"]]) {
                     if ($cont % 2 == 0) {
                         $color = " bgcolor='#E4E9ED' ";
                     } else {
                         $color = " bgcolor='#FFFFFF' ";
                     }
                     unset($notas_aluno);
                     $obj_nota_aluno = new clsPmieducarNotaAluno();
                     $obj_nota_aluno->setOrderby("modulo ASC");
                     $lst_nota_aluno = $obj_nota_aluno->lista(null, null, null, $registro["ref_ref_cod_serie"], $registro["ref_ref_cod_escola"], $valor["ref_cod_disciplina"], $registro["ref_cod_matricula"], null, null, null, null, null, null, 1);
                     if (is_array($lst_nota_aluno)) {
                         foreach ($lst_nota_aluno as $key => $nota_aluno) {
                             if ($nota_aluno['nota']) {
                                 $notas_aluno[] = $nota_aluno["nota"];
                             } else {
                                 $obj_avaliacao_valores = new clsPmieducarTipoAvaliacaoValores($nota_aluno["ref_ref_cod_tipo_avaliacao"], $nota_aluno["ref_sequencial"]);
                                 $det_avaliacao_valores = $obj_avaliacao_valores->detalhe();
                                 $notas_aluno[] = $det_avaliacao_valores["nome"];
                             }
                         }
                     }
                     unset($faltas_aluno);
                     if ($falta_ch_globalizada) {
                         $obj_faltas = new clsPmieducarFaltas();
                         $obj_faltas->setOrderby("sequencial asc");
                         $lst_faltas = $obj_faltas->lista($registro["ref_cod_matricula"]);
                         if (is_array($lst_faltas)) {
                             foreach ($lst_faltas as $key => $faltas) {
                                 $faltas_aluno[] = $faltas['falta'];
                             }
                         }
                     } else {
                         $obj_falta_aluno = new clsPmieducarFaltaAluno();
                         $obj_falta_aluno->setOrderby("cod_falta_aluno ASC");
                         $lst_falta_aluno = $obj_falta_aluno->lista(null, null, null, $registro["ref_ref_cod_serie"], $registro["ref_ref_cod_escola"], $valor["ref_cod_disciplina"], $registro["ref_cod_matricula"], null, null, null, null, null, 1);
                         if (is_array($lst_falta_aluno)) {
                             foreach ($lst_falta_aluno as $key => $falta_aluno) {
                                 $faltas_aluno[] = $falta_aluno["faltas"];
                             }
                         }
                     }
                     $obj_disciplina = new clsPmieducarDisciplina($valor["ref_cod_disciplina"]);
                     $det_disciplina = $obj_disciplina->detalhe();
                     $nm_disciplina = $det_disciplina["nm_disciplina"];
                     $apura_falta = $det_disciplina["apura_falta"];
                     $tabela .= "<tr align='left'>\n\t\t\t\t\t\t\t\t\t    <td {$color} align='left'>{$nm_disciplina}</td>";
                     for ($i = 0; $i < $max_qtd_nota; $i++) {
                         if ($qtd_modulos - 1 < $i) {
                             if ($notas_aluno[$i]) {
                                 $notas_aluno[$i] = number_format($notas_aluno[$i], 2, ",", ".");
                                 $tabela .= "<td align='center' colspan='2' {$color} align='left'>{$notas_aluno[$i]}</td>";
                             } else {
                                 $tabela .= "<td align='center' colspan='2' {$color} align='left'>-</td>";
                             }
                         } else {
                             if ($notas_aluno[$i]) {
                                 $tabela .= "<td align='center' {$color} align='left'>{$notas_aluno[$i]}</td>";
                             } else {
                                 $tabela .= "<td align='center' {$color} align='left'>-</td>";
                             }
                             if ($falta_ch_globalizada && !$prim_disciplina) {
                                 $tabela .= "<td align='center' rowspan='{$qtd_disciplinas}' {$color} align='left'>{$faltas_aluno[$i]}</td>";
                             } else {
                                 if (!$falta_ch_globalizada) {
                                     if (is_numeric($faltas_aluno[$i])) {
                                         $tabela .= "<td align='center' {$color} align='left'>{$faltas_aluno[$i]}</td>";
                                     } else {
                                         $tabela .= "<td align='center' {$color} align='left'>-</td>";
                                     }
                                 }
                             }
                         }
                     }
                     $prim_disciplina = true;
                     $tabela .= "</tr>";
                     $cont++;
                 }
             }
             if (!$ano_letivo || $ano_letivo == $ano_matricula) {
                 if ($max_qtd_nota > 0) {
                     $tabela .= "<tr align='center'>\n\t\t\t\t\t\t\t\t\t    <td align='center'></td>";
                     for ($i = 1; $i <= $max_qtd_nota; $i++) {
                         //if ( ($max_qtd_nota != $min_qtd_nota) && ($min_qtd_nota < $i) && ($qtd_modulos >= $modulo) && false)
                         if (!$det_ref_cod_curso['edicao_final']) {
                             $tabela .= "<td colspan='2'></td>";
                         } else {
                             $tabela .= "<td align='center' colspan='2' bgcolor='#a1b3bd' align='center'><a href='educar_falta_nota_aluno_cad.php?ref_cod_matricula={$registro["ref_cod_matricula"]}&ref_cod_turma={$registro["ref_cod_turma"]}&ref_sequencial_matricula_turma={$registro["sequencial"]}&modulo={$i}'>Editar</a></td>";
                         }
                     }
                     $tabela .= "</tr>";
                 }
             }
             $tabela .= "</table>";
         }
     } else {
         $obj_disciplinas = new clsPmieducarDisciplina();
         $obj_disciplina->setOrderby("nm_disciplina");
         $lst_disciplinas = $obj_disciplinas->lista(null, null, null, null, null, null, null, null, null, null, null, null, 1, null, $registro["ref_cod_curso"]);
         foreach ($lst_disciplinas as $disciplinas) {
             $obj_nota_aluno = new clsPmieducarNotaAluno();
             $qtd_notas = $obj_nota_aluno->getQtdNotas(null, null, null, $this->ref_cod_matricula, $disciplinas["cod_disciplina"]);
             if ($max_qtd_nota < $qtd_notas) {
                 $max_qtd_nota = $qtd_notas;
             }
         }
         if (is_array($lst_disciplinas)) {
             $tabela = "<table>\n\t\t\t\t\t\t       <tr align='center'>\n\t\t\t\t\t\t           <td rowspan='2' bgcolor='#a1b3bd'><b>Nome</b></td>";
             for ($i = 1; $i <= $max_qtd_nota; $i++) {
                 if ($qtd_modulos < $i) {
                     $tabela .= "<td colspan='2' bgcolor='#a1b3bd'><b>Exame</b></td>";
                 } else {
                     $tabela .= "<td colspan='2' bgcolor='#a1b3bd'><b>M&oacute;dulo {$i}</b></td>";
                 }
             }
             $tabela .= "</tr>";
             $tabela .= "<tr align=center>";
             for ($i = 1; $i <= $max_qtd_nota; $i++) {
                 if ($qtd_modulos < $i) {
                     $tabela .= "<td colspan='2' bgcolor='#a1b3bd'><b>Nota</b></td>";
                 } else {
                     $tabela .= "<td bgcolor='#a1b3bd'><b>Nota</b></td><td bgcolor='#a1b3bd'><b>Faltas</b></td>";
                 }
             }
             $tabela .= "</tr>";
             $cont = 0;
             $qtd_disciplinas = count($lst_disciplinas);
             $prim_disciplina = false;
             foreach ($lst_disciplinas as $valor) {
                 if ($cont % 2 == 0) {
                     $color = " bgcolor='#E4E9ED' ";
                 } else {
                     $color = " bgcolor='#FFFFFF' ";
                 }
                 unset($notas_aluno);
                 $obj_nota_aluno = new clsPmieducarNotaAluno();
                 $obj_nota_aluno->setOrderby("modulo ASC");
                 $lst_nota_aluno = $obj_nota_aluno->lista(null, null, null, null, null, null, $registro["ref_cod_matricula"], null, null, null, null, null, null, 1, null, $valor["cod_disciplina"]);
                 if (is_array($lst_nota_aluno)) {
                     foreach ($lst_nota_aluno as $key => $nota_aluno) {
                         if ($nota_aluno['nota']) {
                             $notas_aluno[] = $nota_aluno["nota"];
                         } else {
                             $obj_avaliacao_valores = new clsPmieducarTipoAvaliacaoValores($nota_aluno["ref_ref_cod_tipo_avaliacao"], $nota_aluno["ref_sequencial"]);
                             $det_avaliacao_valores = $obj_avaliacao_valores->detalhe();
                             $notas_aluno[] = $det_avaliacao_valores["nome"];
                         }
                     }
                 }
                 unset($faltas_aluno);
                 if ($falta_ch_globalizada) {
                     $obj_faltas = new clsPmieducarFaltas();
                     $lst_faltas = $obj_faltas->lista($registro["ref_cod_matricula"]);
                     if (is_array($lst_faltas)) {
                         foreach ($lst_faltas as $key => $faltas) {
                             $faltas_aluno[] = $faltas['falta'];
                         }
                     }
                 } else {
                     $obj_falta_aluno = new clsPmieducarFaltaAluno();
                     $obj_falta_aluno->setOrderby("cod_falta_aluno ASC");
                     $lst_falta_aluno = $obj_falta_aluno->lista(null, null, null, null, null, null, $registro["ref_cod_matricula"], null, null, null, null, null, 1, null, $valor["cod_disciplina"]);
                     if (is_array($lst_falta_aluno)) {
                         foreach ($lst_falta_aluno as $key => $falta_aluno) {
                             $faltas_aluno[] = $falta_aluno["faltas"];
                         }
                     }
                 }
                 $nm_disciplina = $valor["nm_disciplina"];
                 $apura_falta = $valor["apura_falta"];
                 $tabela .= "<tr align='center'>\n\t\t\t\t\t\t\t\t    <td {$color} align='center'>{$nm_disciplina}</td>";
                 for ($i = 0; $i < $max_qtd_nota; $i++) {
                     if ($qtd_modulos - 1 < $i) {
                         if ($notas_aluno[$i]) {
                             $notas_aluno[$i] = number_format($notas_aluno[$i], 2, ",", ".");
                             $tabela .= "<td align='center' colspan='2' {$color} align='left'>{$notas_aluno[$i]}</td>";
                         } else {
                             $tabela .= "<td align='center' colspan='2' {$color} align='left'>-</td>";
                         }
                     } else {
                         if ($notas_aluno[$i]) {
                             $tabela .= "<td align='center' {$color} align='left'>{$notas_aluno[$i]}</td>";
                         } else {
                             $tabela .= "<td align='center' {$color} align='left'>-</td>";
                         }
                         if ($falta_ch_globalizada && !$prim_disciplina) {
                             $tabela .= "<td align='center' rowspan='{$qtd_disciplinas}' {$color} align='left'>{$faltas_aluno[$i]}</td>";
                         } else {
                             if (!$falta_ch_globalizada) {
                                 if (is_numeric($faltas_aluno[$i])) {
                                     $tabela .= "<td align='center' {$color} align='left'>{$faltas_aluno[$i]}</td>";
                                 } else {
                                     $tabela .= "<td align='center' {$color} align='left'>-</td>";
                                 }
                             }
                         }
                     }
                 }
                 $prim_disciplina = true;
                 $tabela .= "</tr>";
                 $cont++;
             }
             if ($max_qtd_nota > 0) {
                 $tabela .= "<tr align='center'>\n\t\t\t\t\t\t\t\t    <td align='center'></td>";
                 for ($i = 1; $i <= $max_qtd_nota; $i++) {
                     //if ( ($max_qtd_nota != $min_qtd_nota) && ($min_qtd_nota < $i) && ($qtd_modulos <= $modulo) )
                     if (!$det_ref_cod_curso['edicao_final']) {
                         $tabela .= "<td colspan='2'></td>";
                     } else {
                         $tabela .= "<td align='center' colspan='2' bgcolor='#a1b3bd' align='center'><a href='educar_falta_nota_aluno_cad.php?ref_cod_matricula={$registro["ref_cod_matricula"]}&ref_cod_turma={$registro["ref_cod_turma"]}&ref_sequencial_matricula_turma={$registro["sequencial"]}&modulo={$i}'>Editar</a></td>";
                     }
                 }
                 $tabela .= "</tr>";
             }
             $tabela .= "</table>";
         }
     }
     if ($tabela) {
         $this->addDetalhe(array("Disciplina", "{$tabela}"));
     }
     if ($aprovado) {
         if ($aprovado == 1) {
             $aprovado_ = "Aprovado";
         } elseif ($aprovado == 2) {
             $aprovado_ = "Reprovado";
         } elseif ($aprovado == 3) {
             if ($qtd_modulos < $modulo) {
                 $aprovado_ = "Em Exame";
             } else {
                 $aprovado_ = "Em Andamento";
             }
         }
         $this->addDetalhe(array("Situa&ccedil;&atilde;o", "{$aprovado_}"));
     }
     if ($obj_permissoes->permissao_cadastra(642, $this->pessoa_logada, 7)) {
         if ($qtd_modulos >= $modulo && $aprovado == 3) {
             $this->array_botao = array("Nova Nota/Falta");
             $this->array_botao_url = array("educar_falta_nota_aluno_cad.php?ref_cod_matricula={$registro["ref_cod_matricula"]}&ref_cod_turma={$registro["ref_cod_turma"]}&ref_sequencial_matricula_turma={$registro["sequencial"]}");
         } elseif ($qtd_modulos < $modulo && $aprovado == 3) {
             $this->array_botao = array("Nota Exame");
             if ($qtd_modulos < $max_qtd_nota) {
                 $this->array_botao_url = array("educar_falta_nota_aluno_cad.php?ref_cod_matricula={$registro["ref_cod_matricula"]}&ref_cod_turma={$registro["ref_cod_turma"]}&ref_sequencial_matricula_turma={$registro["sequencial"]}&modulo={$max_qtd_nota}");
             } else {
                 $this->array_botao_url = array("educar_falta_nota_aluno_cad.php?ref_cod_matricula={$registro["ref_cod_matricula"]}&ref_cod_turma={$registro["ref_cod_turma"]}&ref_sequencial_matricula_turma={$registro["sequencial"]}");
             }
         }
     }
     $this->url_cancelar = "educar_falta_nota_aluno_lst.php";
     $this->largura = "100%";
 }
 function verificaHistorico()
 {
     if (is_numeric($this->ref_cod_aluno)) {
         @session_start();
         $pessoa_logada = $_SESSION['id_pessoa'];
         @session_write_close();
         $sql_existe_historico = "select sequencial from pmieducar.historico_escolar where ref_cod_aluno={$this->ref_cod_aluno}\n\t\t\t\t\t\t\t\t\t\tand ativo=1 and ano=2007";
         $sql = "SELECT ref_ref_cod_serie from pmieducar.matricula where cod_matricula in (\n\t\t\t\t\t\t\tSELECT MAX(cod_matricula) as max_matricula\n\t\t\t\t\t\t\t\t\t\tfrom pmieducar.matricula WHERE ref_cod_aluno = {$this->ref_cod_aluno}\n\t\t\t\t\t\t\t\t\t\tAND ano=2007 AND ativo=1 AND aprovado IN (1,2))";
         $db = new clsBanco();
         $serie = $db->CampoUnico($sql);
         if ($serie != 15) {
             $db = new clsBanco();
             $existe_historico = $db->CampoUnico($sql_existe_historico);
             $liberar_historico = false;
             $existe_historico_sequencial = false;
             if (!is_numeric($existe_historico)) {
                 $liberar_historico = true;
             } else {
                 $sql_existe_disciplina = "select 1 from pmieducar.historico_disciplinas where\n\t\t\t\t\t\t\t\t\t\t\tref_ref_cod_aluno={$this->ref_cod_aluno} and ref_sequencial={$existe_historico}";
                 $existe_disciplinas = $db->CampoUnico($sql_existe_disciplina);
                 if (!is_numeric($existe_disciplinas)) {
                     $liberar_historico = true;
                     $existe_historico_sequencial = true;
                 }
             }
             $sql_aprovado = "SELECT aprovado from pmieducar.matricula where cod_matricula in (\n\t\t\t\t\t\t\tSELECT MAX(cod_matricula) as max_matricula\n\t\t\t\t\t\t\t\t\t\tfrom pmieducar.matricula WHERE ref_cod_aluno = {$this->ref_cod_aluno}\n\t\t\t\t\t\t\t\t\t\tAND ano=2007 AND ativo=1 AND aprovado IN (1,2))";
             $aprovado_aux = $db->CampoUnico($sql_aprovado);
             if (is_numeric($existe_historico) && !$existe_historico_sequencial) {
                 $sql_historico_aprovado = "SELECT aprovado from pmieducar.historico_escolar\n\t\t\t\t\t\t\t\t\t\t\twhere ref_cod_aluno={$this->ref_cod_aluno}\n\t\t\t\t\t\t\t\t\t\t\tand sequencial={$existe_historico} and ano=2007 and ativo=1";
                 $aprovado_historico = $db->CampoUnico($sql_historico_aprovado);
                 /*if ($aprovado_aux != $aprovado_historico) {
                 		$liberar_historico = true;
                 		$sql_desativa_he = "update pmieducar.historico_escolar set ativo=0
                 		where ref_cod_aluno={$this->ref_cod_aluno}
                 		and sequencial={$existe_historico} and ano=2007";
                 		$db->Consulta($sql_desativa_he);
                 		$existe_historico_sequencial=false;
                 		}*/
             }
             $sql_aprovado = "SELECT aprovado from pmieducar.matricula where cod_matricula in (\n\t\t\t\t\t\t\tSELECT MAX(cod_matricula) as max_matricula\n\t\t\t\t\t\t\t\t\t\tfrom pmieducar.matricula WHERE ref_cod_aluno = {$this->ref_cod_aluno}\n\t\t\t\t\t\t\t\t\t\tAND ano=2007 AND ativo=1 AND aprovado IN (1,2))";
             $aprovado_aux = $db->CampoUnico($sql_aprovado);
             if (is_numeric($existe_historico) && !$existe_historico_sequencial) {
                 $sql_historico_aprovado = "SELECT aprovado from pmieducar.historico_escolar\n\t\t\t\t\t\t\t\t\t\t\twhere ref_cod_aluno={$this->ref_cod_aluno}\n\t\t\t\t\t\t\t\t\t\t\tand sequencial={$existe_historico} and ano=2007 and ativo=1";
                 $aprovado_historico = $db->CampoUnico($sql_historico_aprovado);
                 /*if ($aprovado_aux != $aprovado_historico) {
                 		$liberar_historico = true;
                 		$sql_desativa_he = "update pmieducar.historico_escolar set ativo=0
                 		where ref_cod_aluno={$this->ref_cod_aluno}
                 		and sequencial={$existe_historico} and ano=2007";
                 		$db->Consulta($sql_desativa_he);
                 		$existe_historico_sequencial=false;
                 		}*/
             }
             if ($liberar_historico) {
                 $sql = "SELECT cod_matricula,aprovado,ref_ref_cod_escola,ref_ref_cod_serie,ref_cod_curso,matricula_reclassificacao from pmieducar.matricula where cod_matricula in (\n\t\t\t\t\t\t\tSELECT MAX(cod_matricula) as max_matricula\n\t\t\t\t\t\t\t\t\t\tfrom pmieducar.matricula WHERE ref_cod_aluno = {$this->ref_cod_aluno}\n\t\t\t\t\t\t\t\t\t\tAND ano=2007 AND ativo=1 AND aprovado IN (1,2))";
                 $db->Consulta($sql);
                 while ($db->ProximoRegistro()) {
                     list($cod_matricula, $aprovado, $ref_cod_escola, $ref_cod_serie, $ref_cod_curso, $matricula_reclassificacao) = $db->Tupla();
                 }
                 $obj_ano_letivo_modulo = new clsPmieducarAnoLetivoModulo();
                 $lst_ano_letivo_modulo = $obj_ano_letivo_modulo->lista(2007, $ref_cod_escola);
                 $qtd_modulos = count($lst_ano_letivo_modulo);
                 $obj_curso = new clsPmieducarCurso($ref_cod_curso);
                 $det_curso = $obj_curso->detalhe();
                 $falta_ch_globalizada = $det_curso["falta_ch_globalizada"];
                 $objTipoAvaliacao = new clsPmieducarTipoAvaliacao($det_curso["ref_cod_tipo_avaliacao"]);
                 $detalhe_tipo_avaliacao = $objTipoAvaliacao->detalhe();
                 $conceitual = $detalhe_tipo_avaliacao["conceitual"];
                 //					if () {
                 if ($ref_cod_curso != 49 && $ref_cod_curso != 20 && $ref_cod_curso != 19 && $qtd_modulos == 4 && !$conceitual && is_array($det_curso) && is_numeric($ref_cod_serie) && is_numeric($cod_matricula) && is_numeric($aprovado) && is_numeric($ref_cod_escola) && $det_curso["padrao_ano_escolar"] == 1) {
                     if ($ref_cod_serie != 15) {
                         if ($det_curso["padrao_ano_escolar"] == 1) {
                             if ($existe_historico_sequencial) {
                                 //							$obj_historico = new clsPmieducarHistoricoEscolar($this->ref_cod_aluno, $existe_historico_sequencial, $pessoa_logada);
                                 //							if (!$obj_historico->excluir()) {
                                 //								die("não exclui");
                                 //							}
                             }
                             $obj_escola2 = new clsPmieducarEscola($ref_cod_escola);
                             $det_escola2 = $obj_escola2->detalhe();
                             $ref_cod_instituicao = $det_escola2["ref_cod_instituicao"];
                             $notas_faltas_disciplina = array();
                             $obj_escola_serie_disciplina = new clsPmieducarEscolaSerieDisciplina();
                             $lst_escola_serie_disciplina = $obj_escola_serie_disciplina->lista($ref_cod_serie, $ref_cod_escola, null, 1);
                             foreach ($lst_escola_serie_disciplina as $escola_serie_disciplina) {
                                 $obj_dispensa = new clsPmieducarDispensaDisciplina($cod_matricula, $ref_cod_serie, $ref_cod_escola, $escola_serie_disciplina["ref_cod_disciplina"], null, null, null, null, null, 1);
                                 $det_disciplina = $obj_dispensa->detalhe();
                                 if (!is_array($det_disciplina)) {
                                     $obj_nota = new clsPmieducarNotaAluno();
                                     $obj_nota->setOrderby("modulo");
                                     $lst_nota = $obj_nota->lista(null, null, null, $ref_cod_serie, $ref_cod_escola, $escola_serie_disciplina["ref_cod_disciplina"], $cod_matricula, null, null, null, null, null, null, 1);
                                     if (is_array($lst_nota)) {
                                         $soma_notas = 0;
                                         $possui_exame = false;
                                         foreach ($lst_nota as $key => $nota) {
                                             $obj_tipo_av_val = new clsPmieducarTipoAvaliacaoValores($nota["ref_ref_cod_tipo_avaliacao"], $nota["ref_sequencial"], null, null, null, null);
                                             $det_tipo_av_val = $obj_tipo_av_val->detalhe();
                                             if ($ref_cod_serie == 5) {
                                                 $soma_notas = $det_tipo_av_val["valor"];
                                             } else {
                                                 if ($key < $qtd_modulos) {
                                                     $soma_notas += $det_tipo_av_val["valor"];
                                                 } else {
                                                     $possui_exame = true;
                                                     $soma_notas += $nota["nota"] * 2;
                                                 }
                                             }
                                         }
                                         if ($ref_cod_serie == 5) {
                                             $media = $soma_notas;
                                         } else {
                                             if ($possui_exame) {
                                                 $media = $soma_notas / 6;
                                             } else {
                                                 $media = $soma_notas / 4;
                                             }
                                         }
                                         $obj_media = new clsPmieducarTipoAvaliacaoValores();
                                         $det_media = $obj_media->lista($det_curso["ref_cod_tipo_avaliacao"], $det_curso["ref_sequencial"], null, null, $media, $media);
                                         if (is_array($det_media)) {
                                             $det_media = array_shift($det_media);
                                             $media = $det_media["valor"];
                                             $media = sprintf("%01.1f", $media);
                                             $media = str_replace(".", ",", $media);
                                         }
                                         $obj_disciplina = new clsPmieducarDisciplina($escola_serie_disciplina["ref_cod_disciplina"]);
                                         $det_disciplina = $obj_disciplina->detalhe();
                                         if ($falta_ch_globalizada) {
                                             $notas_faltas_disciplina[$escola_serie_disciplina["ref_cod_disciplina"]] = array("media" => $media, "falta" => null, "nm_disciplina" => $det_disciplina["nm_disciplina"]);
                                         } else {
                                             //pegar as faltas
                                             $sql = "select sum(faltas) from pmieducar.falta_aluno where\n\t\t\t\t\t\t\t\t\t\t\t\t\tref_cod_matricula={$cod_matricula} and ref_cod_disciplina={$escola_serie_disciplina["ref_cod_disciplina"]}\n\t\t\t\t\t\t\t\t\t\t\t\t\tand ativo=1";
                                             $total_faltas = $db->CampoUnico($sql);
                                             $notas_faltas_disciplina[$escola_serie_disciplina["ref_cod_disciplina"]] = array("media" => $media, "falta" => $total_faltas, "nm_disciplina" => $det_disciplina["nm_disciplina"]);
                                         }
                                     }
                                 }
                             }
                             if (is_array($notas_faltas_disciplina)) {
                                 $extra_curricular = 0;
                                 if ($falta_ch_globalizada) {
                                     $sql = "SELECT SUM(falta) FROM pmieducar.faltas WHERE ref_cod_matricula = {$cod_matricula}";
                                     $db5 = new clsBanco();
                                     $total_faltas = $db5->CampoUnico($sql);
                                 } else {
                                     $total_faltas = null;
                                 }
                                 $obj_serie = new clsPmieducarSerie($ref_cod_serie);
                                 $det_serie = $obj_serie->detalhe();
                                 $carga_horaria_serie = $det_serie["carga_horaria"];
                                 $obj_escola = new clsPmieducarEscola($ref_cod_escola);
                                 $det_escola = $obj_escola->detalhe();
                                 $ref_idpes = $det_escola["ref_idpes"];
                                 // 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($ref_cod_escola);
                                         $det_escola = $obj_escola->detalhe();
                                         $nm_escola = $det_escola["nm_escola"];
                                         $cidade = $det_escola["municipio"];
                                     }
                                 }
                                 //falta_ch_globalizada
                                 if ($det_curso["falta_ch_globalizada"] == 1) {
                                     $dias_letivos = $this->buscaDiasLetivos($ref_cod_escola);
                                 } else {
                                     $dias_letivos = null;
                                 }
                                 if ($matricula_reclassificacao == 1) {
                                     $descricao_reclassificacao = $this->verificaReclassificacao();
                                 } else {
                                     $descricao_reclassificacao = null;
                                 }
                                 $obj_historico = new clsPmieducarHistoricoEscolar($this->ref_cod_aluno, null, null, $pessoa_logada, $det_serie["nm_serie"], 2007, $carga_horaria_serie, $dias_letivos, $nm_escola, $cidade, $uf, $descricao_reclassificacao, $aprovado, null, null, 1, $total_faltas, $ref_cod_instituicao, 0, $extra_curricular, $cod_matricula);
                                 $cadastrou2 = $obj_historico->cadastra();
                                 if ($cadastrou2) {
                                     $obj_historico = new clsPmieducarHistoricoEscolar();
                                     $sequencial = $obj_historico->getMaxSequencial($this->ref_cod_aluno);
                                     foreach ($notas_faltas_disciplina as $nota_falta) {
                                         $obj_historico_disciplina = new clsPmieducarHistoricoDisciplinas(null, $this->ref_cod_aluno, $sequencial, $nota_falta["nm_disciplina"], $nota_falta["media"], $nota_falta["falta"]);
                                         $cadastrou3 = $obj_historico_disciplina->cadastra();
                                         if (!$cadastrou3) {
                                             die("<br><br><br><br>nao cadastrou disciplina");
                                         }
                                     }
                                 } else {
                                     die("<br><br><br><br>nao cadastrou historico");
                                 }
                             }
                         }
                     }
                 } elseif ($ref_cod_curso != 49 && $ref_cod_curso != 20 && $ref_cod_curso != 19) {
                     //fazer historico ejaaaa
                     //pegar matriculas do eja do aluno
                     $obj_matriculas = new clsPmieducarMatricula();
                     $obj_matriculas->setOrderby("cod_matricula");
                     $lst_matriculas = $obj_matriculas->lista(null, null, null, null, null, null, $this->ref_cod_aluno, array(1, 2), null, null, null, null, 1, 2007);
                     if (is_array($lst_matriculas) && count($lst_matriculas)) {
                         foreach ($lst_matriculas as $matricula) {
                             $liberar_historico = false;
                             $db = new clsBanco();
                             //fazer algo para ver se o he nao esta atualizado
                             $sql = "SELECT sequencial FROM pmieducar.historico_escolar WHERE ref_cod_aluno = {$matricula["ref_cod_aluno"]}\n\t\t\t\t\t\t\t\t\tAND ref_cod_matricula = {$matricula["cod_matricula"]} AND ano = 2007 AND ativo = 1\n\t\t\t\t\t\t\t\t\tAND (to_char(data_cadastro,'DD/MM/YYYY') < '20/02/2008'\n\t\t\t\t\t\t\t\t\t\tOR to_char(data_cadastro,'YYYY')::int = 2007) AND data_exclusao is null";
                             $existe_he_antigo = $db->CampoUnico($sql);
                             if (is_numeric($existe_he_antigo)) {
                                 $liberar_historico = true;
                             } else {
                                 //verificar se possui historico
                                 $sql = "SELECT 1 FROM pmieducar.historico_escolar WHERE ref_cod_aluno = {$matricula["ref_cod_aluno"]}\n\t\t\t\t\t\t\t\t\t\tAND ref_cod_matricula = {$matricula["cod_matricula"]} AND ano = 2007 AND ativo = 1";
                                 $existe_he = $db->CampoUnico($sql);
                                 if (!is_numeric($existe_he)) {
                                     $liberar_historico = true;
                                 }
                             }
                             if ($liberar_historico) {
                                 if (is_numeric($existe_he_antigo)) {
                                     $obj_historico = new clsPmieducarHistoricoEscolar($this->ref_cod_aluno, $existe_he_antigo, $pessoa_logada);
                                     //									if (!$obj_historico->excluir()) {
                                     //										die("nao exclui");
                                     //									}
                                 }
                                 //fazer novo he
                                 //destruir he antigo
                                 $obj_curso = new clsPmieducarCurso($matricula["ref_cod_curso"]);
                                 $det_curso = $obj_curso->detalhe();
                                 $falta_ch_globalizada = $det_curso["falta_ch_globalizada"];
                                 $objTipoAvaliacao = new clsPmieducarTipoAvaliacao($det_curso["ref_cod_tipo_avaliacao"]);
                                 $detalhe_tipo_avaliacao = $objTipoAvaliacao->detalhe();
                                 $conceitual = $detalhe_tipo_avaliacao["conceitual"];
                                 $notas_faltas_disciplina = array();
                                 $obj_escola_serie_disciplina = new clsPmieducarEscolaSerieDisciplina();
                                 $lst_escola_serie_disciplina = $obj_escola_serie_disciplina->lista($matricula["ref_ref_cod_serie"], $matricula["ref_ref_cod_escola"], null, 1);
                                 foreach ($lst_escola_serie_disciplina as $escola_serie_disciplina) {
                                     $obj_dispensa = new clsPmieducarDispensaDisciplina($matricula["cod_matricula"], $matricula["ref_ref_cod_serie"], $matricula["ref_cod_escola"], $escola_serie_disciplina["ref_cod_disciplina"], null, null, null, null, null, 1);
                                     $det_disciplina = $obj_dispensa->detalhe();
                                     if (!is_array($det_disciplina)) {
                                         $obj_nota = new clsPmieducarNotaAluno();
                                         $obj_nota->setOrderby("modulo");
                                         $lst_nota = $obj_nota->lista(null, null, null, $matricula["ref_ref_cod_serie"], $matricula["ref_cod_escola"], $escola_serie_disciplina["ref_cod_disciplina"], $matricula["cod_matricula"], null, null, null, null, null, null, 1);
                                         if (is_array($lst_nota) && count($lst_nota)) {
                                             $nota_matricula = array_shift($lst_nota);
                                             $obj_tipo_av_val = new clsPmieducarTipoAvaliacaoValores($nota_matricula["ref_ref_cod_tipo_avaliacao"], $nota_matricula["ref_sequencial"]);
                                             $det_tipo_av_val = $obj_tipo_av_val->detalhe();
                                             if ($falta_ch_globalizada) {
                                                 $faltas = null;
                                             } else {
                                                 $sql = "select sum(faltas) from pmieducar.falta_aluno where\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tref_cod_matricula={$matricula["cod_matricula"]} and ref_cod_disciplina={$escola_serie_disciplina["ref_cod_disciplina"]}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tand ativo=1";
                                                 $faltas = $db->CampoUnico($sql);
                                             }
                                             $obj_disciplina = new clsPmieducarDisciplina($escola_serie_disciplina["ref_cod_disciplina"]);
                                             $det_disciplina = $obj_disciplina->detalhe();
                                             $notas_faltas_disciplina[$escola_serie_disciplina["ref_cod_disciplina"]] = array("media" => $det_tipo_av_val["nome"], "falta" => $faltas, "nm_disciplina" => $det_disciplina["nm_disciplina"]);
                                         }
                                     }
                                 }
                                 if (is_array($notas_faltas_disciplina)) {
                                     $obj_escola2 = new clsPmieducarEscola($matricula["ref_ref_cod_escola"]);
                                     $det_escola2 = $obj_escola2->detalhe();
                                     $ref_cod_instituicao = $det_escola2["ref_cod_instituicao"];
                                     $extra_curricular = 1;
                                     if ($falta_ch_globalizada) {
                                         $sql = "SELECT SUM(falta) FROM pmieducar.faltas WHERE ref_cod_matricula = {$matricula["cod_matricula"]}";
                                         $db5 = new clsBanco();
                                         $total_faltas = $db5->CampoUnico($sql);
                                     } else {
                                         $total_faltas = null;
                                     }
                                     $obj_serie = new clsPmieducarSerie($matricula["ref_ref_cod_serie"]);
                                     $det_serie = $obj_serie->detalhe();
                                     $carga_horaria_serie = $det_serie["carga_horaria"];
                                     $obj_escola = new clsPmieducarEscola($matricula["ref_ref_cod_escola"]);
                                     $det_escola = $obj_escola->detalhe();
                                     $ref_idpes = $det_escola["ref_idpes"];
                                     // 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($matricula["ref_ref_cod_escola"]);
                                             $det_escola = $obj_escola->detalhe();
                                             $nm_escola = $det_escola["nm_escola"];
                                             $cidade = $det_escola["municipio"];
                                         }
                                     }
                                     //falta_ch_globalizada
                                     if ($det_curso["falta_ch_globalizada"] == 1) {
                                         //										$dias_letivos = $this->buscaDiasLetivos($matricula["ref_ref_cod_escola"]);
                                         $dias_letivos = null;
                                     } else {
                                         $dias_letivos = null;
                                     }
                                     if ($matricula["matricula_reclassificacao"] == 1) {
                                         $descricao_reclassificacao = $this->verificaReclassificacao($matricula["cod_matricula"]);
                                     } else {
                                         $descricao_reclassificacao = null;
                                     }
                                     $obj_historico = new clsPmieducarHistoricoEscolar($this->ref_cod_aluno, null, null, $pessoa_logada, $det_serie["nm_serie"], 2007, $carga_horaria_serie, $dias_letivos, $nm_escola, $cidade, $uf, $descricao_reclassificacao, $matricula["aprovado"], null, null, 1, $total_faltas, $ref_cod_instituicao, 0, $extra_curricular, $matricula["cod_matricula"]);
                                     $cadastrou2 = $obj_historico->cadastra();
                                     if ($cadastrou2) {
                                         $obj_historico = new clsPmieducarHistoricoEscolar();
                                         $sequencial = $obj_historico->getMaxSequencial($this->ref_cod_aluno);
                                         foreach ($notas_faltas_disciplina as $nota_falta) {
                                             $obj_historico_disciplina = new clsPmieducarHistoricoDisciplinas(null, $this->ref_cod_aluno, $sequencial, $nota_falta["nm_disciplina"], $nota_falta["media"], $nota_falta["falta"]);
                                             $cadastrou3 = $obj_historico_disciplina->cadastra();
                                             if (!$cadastrou3) {
                                                 die("<br><br><br><br>nao cadastrou disciplina");
                                             }
                                         }
                                     } else {
                                         die("<br><br><br><br>nao cadastrou historico");
                                     }
                                 }
                             }
                         }
                     }
                 }
             } elseif ($ref_cod_curso != 49 && $ref_cod_curso != 20 && $ref_cod_curso != 19) {
                 $sql = "SELECT ref_ref_cod_escola,ref_cod_curso from pmieducar.matricula where cod_matricula in (\n\t\t\t\t\t\t\tSELECT MAX(cod_matricula) as max_matricula\n\t\t\t\t\t\t\t\t\t\tfrom pmieducar.matricula WHERE ref_cod_aluno = {$this->ref_cod_aluno}\n\t\t\t\t\t\t\t\t\t\tAND ano=2007 AND ativo=1 AND aprovado IN (1,2))";
                 $db = new clsBanco();
                 $db->Consulta($sql);
                 while ($db->ProximoRegistro()) {
                     list($ref_cod_escola, $ref_cod_curso) = $db->Tupla();
                 }
                 $obj_ano_letivo_modulo = new clsPmieducarAnoLetivoModulo();
                 $lst_ano_letivo_modulo = $obj_ano_letivo_modulo->lista(2007, $ref_cod_escola);
                 $qtd_modulos = count($lst_ano_letivo_modulo);
                 $obj_curso = new clsPmieducarCurso($ref_cod_curso);
                 $det_curso = $obj_curso->detalhe();
                 $falta_ch_globalizada = $det_curso["falta_ch_globalizada"];
                 $objTipoAvaliacao = new clsPmieducarTipoAvaliacao($det_curso["ref_cod_tipo_avaliacao"]);
                 $detalhe_tipo_avaliacao = $objTipoAvaliacao->detalhe();
                 $conceitual = $detalhe_tipo_avaliacao["conceitual"];
                 if ($qtd_modulos == 4 && !$conceitual) {
                     $sql_eh_falta_globalizada = "SELECT 1 FROM pmieducar.historico_escolar WHERE ref_cod_aluno = {$this->ref_cod_aluno} AND sequencial = {$existe_historico}\n\t\t\t\t\t\t\t\t\t\t\t AND faltas_globalizadas IS NOT NULL AND dias_letivos IS NULL";
                     $db = new clsBanco();
                     $busca_dias_letivos = $db->CampoUnico($sql_eh_falta_globalizada);
                     if (is_numeric($busca_dias_letivos)) {
                         $dias_letivos = $this->buscaDiasLetivos($ref_cod_escola);
                         if ($dias_letivos) {
                             $obj_he = new clsPmieducarHistoricoEscolar($this->ref_cod_aluno, $existe_historico, $pessoa_logada, null, null, null, null, $dias_letivos);
                             if (!$obj_he->edita()) {
                                 die("nao editou dias letivos");
                             }
                         }
                     }
                     $sql = "SELECT MAX(cod_matricula),matricula_reclassificacao\n\t\t\t\t\t\t\t\t\t\t\tfrom pmieducar.matricula WHERE ref_cod_aluno = {$this->ref_cod_aluno}\n\t\t\t\t\t\t\t\t\t\t\tAND ano=2007 AND ativo=1 AND aprovado IN (1,2)\n\t\t\t\t\t\t\t\t\t\t\tgroup by matricula_reclassificacao";
                     $db = new clsBanco();
                     $db->Consulta($sql);
                     while ($db->ProximoRegistro()) {
                         list($cod_matricula, $matricula_reclassificacao) = $db->Tupla();
                     }
                     if ($matricula_reclassificacao == 1) {
                         $descricao_reclassificacao = $this->verificaReclassificacao();
                         if ($descricao_reclassificacao) {
                             $obj_he = new clsPmieducarHistoricoEscolar($this->ref_cod_aluno, $existe_historico, $pessoa_logada, null, null, null, null, null, null, null, null, $descricao_reclassificacao);
                             if (!$obj_he->edita()) {
                                 die("nao editou reclassificacao");
                             }
                         }
                     }
                 }
             }
         }
     }
 }
 function Gerar()
 {
     $obj_curso = new clsPmieducarCurso($this->ref_cod_curso);
     $det_curso = $obj_curso->detalhe();
     //		 Carrega as informações necessárias do curso
     if ($det_curso) {
         $this->ref_cod_tipo_avaliacao = $det_curso["ref_cod_tipo_avaliacao"];
         $this->media = $det_curso["media"];
         $this->media_exame = $det_curso["media_exame"];
         $this->frequencia_minima = $det_curso["frequencia_minima"];
         $this->falta_ch_globalizada = $det_curso["falta_ch_globalizada"];
         $this->padrao_ano_escolar = $det_curso["padrao_ano_escolar"];
         $this->carga_horaria = $det_curso["carga_horaria"];
         $this->hora_falta = $det_curso["hora_falta"];
     }
     //		Verifica se vai seguir o padrão do ano escolar da escola
     if ($this->padrao_ano_escolar == 1) {
         $obj_escola_ano_letivo = new clsPmieducarEscolaAnoLetivo($this->ref_ref_cod_escola, null, null, null, 1, null, null, 1);
         $det_escola_ano_letivo = $obj_escola_ano_letivo->detalhe();
         //			Carrega o ano letivo
         if (is_array($det_escola_ano_letivo)) {
             $this->ano_letivo = $det_escola_ano_letivo["ano"];
         }
         $obj_ano_letivo_modulo = new clsPmieducarAnoLetivoModulo();
         $obj_ano_letivo_modulo->setOrderby("data_fim");
         $lst_ano_letivo_modulo = $obj_ano_letivo_modulo->lista($this->ano_letivo, $this->ref_ref_cod_escola);
         if (is_array($lst_ano_letivo_modulo)) {
             $obj_turma_disciplina = new clsPmieducarTurmaDisciplina();
             $lst_turma_disciplina = $obj_turma_disciplina->lista($this->ref_cod_turma);
             //				Carrega a quantidade de disciplinas da turma
             $this->qtd_disciplinas = count($lst_turma_disciplina);
             //				echo "<pre>";
             //				print_r($lst_turma_disciplina);
             if ($lst_turma_disciplina) {
                 foreach ($lst_turma_disciplina as $disciplina) {
                     //						Carrega o código das disciplinas da turma
                     $this->cod_disciplinas[] = $disciplina["ref_cod_disciplina"];
                 }
                 //					Carrega a quantidade de módulos do ano letivo
                 $this->qtd_modulos = count($lst_ano_letivo_modulo);
                 $cont = 1;
                 if (is_array($lst_ano_letivo_modulo)) {
                     //						Busca em qual módulo a turma está
                     //$resultado = $obj_turma_modulo->numModulo( $cont, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->cod_disciplinas, $this->ref_cod_turma, $this->ref_cod_turma );
                     $obj_matriculas = new clsPmieducarMatriculaTurma();
                     $lst_matriculas = $obj_matriculas->lista(null, $this->ref_cod_turma, null, null, null, null, null, null, 1, $this->ref_ref_cod_serie, $this->ref_cod_curso, $this->ref_ref_cod_escola);
                     $resultado = 0;
                     if (is_array($lst_matriculas)) {
                         foreach ($lst_matriculas as $registro) {
                             $obj_nota_aluno = new clsPmieducarNotaAluno();
                             $aux_min = $obj_nota_aluno->retornaModuloAluno($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->ref_cod_turma, $this->ref_cod_turma, $registro["ref_cod_matricula"]);
                             $aux_min = $aux_min + 1;
                             if ($resultado == 0) {
                                 $resultado = $aux_min;
                             } else {
                                 if ($resultado > $aux_min) {
                                     $resultado = $aux_min;
                                 }
                             }
                         }
                     }
                     $this->num_modulo = $resultado;
                     foreach ($lst_ano_letivo_modulo as $registro) {
                         //							Verifica se a turma está num módulo da turma
                         if ($resultado == $registro["sequencial"]) {
                             $obj_modulo = new clsPmieducarModulo($registro["ref_cod_modulo"]);
                             $det_modulo = $obj_modulo->detalhe();
                             //								Carrega o nome do módulo no qual a turma se encontra
                             $this->modulo = $det_modulo["nm_tipo"];
                             $obj_turma_disciplina = new clsPmieducarTurmaDisciplina();
                             $obj_turma_disciplina->setOrderby("ref_cod_disciplina");
                             //								Carrega o código das disciplinas da turma
                             $lst_turma_disciplina = $obj_turma_disciplina->lista($this->ref_cod_turma);
                             if (is_array($lst_turma_disciplina)) {
                                 $cont = 0;
                                 foreach ($lst_turma_disciplina as $valores) {
                                     $obj_disciplina = new clsPmieducarDisciplina($valores["ref_cod_disciplina"]);
                                     $det_disciplina = $obj_disciplina->detalhe();
                                     if ($det_disciplina) {
                                         //											Carrega a informação se a disciplina apura falta ou não
                                         $this->lst_apura_falta["{$det_disciplina["cod_disciplina"]}"] = $det_disciplina["apura_falta"];
                                         $obj_notas = new clsPmieducarNotaAluno();
                                         //											Carrega a quantidade de notas por aluno de uma turma numa determinada disciplina
                                         $lst_notas = $obj_notas->retornaDiscMod($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $det_disciplina["cod_disciplina"], $this->ref_cod_turma, $this->ref_cod_turma, null, true);
                                         if ($cont == 0) {
                                             $num_aux = $lst_notas;
                                         } else {
                                             if ($lst_notas < $num_aux) {
                                                 $num_aux = $lst_notas;
                                             }
                                         }
                                     }
                                     $cont++;
                                 }
                                 /*if ( is_numeric( $lst_notas ) )
                                 		{
                                 			$this->num_modulo = $lst_notas + 1;
                                 		}
                                 		else
                                 		{
                                 			$this->num_modulo = 1;
                                 		}*/
                             }
                             //								Carrega o número do módulo em que a turma está
                             //								$this->num_modulo = ( $resultado + 1 );
                             break;
                         } else {
                             if ($resultado > $this->qtd_modulos) {
                                 //								Carrega o nome do módulo no qual a turma se encontra como "Exame"
                                 $this->modulo = "Exame";
                                 //								Carrega o número do módulo igual a quantidade de módulos da turma mais 1
                                 $this->num_modulo = $resultado + 1;
                                 break;
                             }
                         }
                         $cont++;
                     }
                 }
             }
         }
     } else {
         $obj_turma_modulo = new clsPmieducarTurmaModulo();
         $obj_turma_modulo->setOrderby("data_fim");
         $lst_turma_modulo = $obj_turma_modulo->lista($this->ref_cod_turma);
         $obj_matriculas = new clsPmieducarMatriculaTurma();
         $lst_matriculas = $obj_matriculas->lista(null, $this->ref_cod_turma, null, null, null, null, null, null, 1, $this->ref_ref_cod_serie, $this->ref_cod_curso, $this->ref_ref_cod_escola);
         $resultado = 0;
         if (is_array($lst_matriculas)) {
             foreach ($lst_matriculas as $registro) {
                 $obj_nota_aluno = new clsPmieducarNotaAluno();
                 $aux_min = $obj_nota_aluno->retornaModuloAluno($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->ref_cod_turma, $this->ref_cod_turma, $registro["ref_cod_matricula"]);
                 $aux_min = $aux_min + 1;
                 if ($resultado == 0) {
                     $resultado = $aux_min;
                 } else {
                     if ($resultado > $aux_min) {
                         $resultado = $aux_min;
                     }
                 }
             }
         }
         $this->num_modulo = $resultado;
         if (is_array($lst_turma_modulo)) {
             $obj_turma_disciplina = new clsPmieducarTurmaDisciplina();
             $lst_turma_disciplina = $obj_turma_disciplina->lista($this->ref_cod_turma);
             //				Carrega a quantidade de disciplinas da turma
             $this->qtd_disciplinas = count($lst_turma_disciplina);
             if ($lst_turma_disciplina) {
                 foreach ($lst_turma_disciplina as $disciplina) {
                     //						Carrega o código das disciplinas da turma
                     $this->cod_disciplinas[] = $disciplina["ref_cod_disciplina"];
                     $obj_notas = new clsPmieducarNotaAluno();
                     //						Carrega a quantidade de notas por aluno de uma turma numa determinada disciplina
                     $lst_notas = $obj_notas->retornaDiscMod($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $disciplina["ref_cod_disciplina"], $this->ref_cod_turma, $this->ref_cod_turma, null, true);
                     if ($cont == 0) {
                         $num_aux = $lst_notas;
                     } else {
                         if ($lst_notas < $num_aux) {
                             $num_aux = $lst_notas;
                         }
                     }
                 }
                 //					Carrega a quantidade de módulos da turma
                 $this->qtd_modulos = count($lst_turma_modulo);
                 $cont = 1;
                 foreach ($lst_turma_modulo as $registro) {
                     $obj_turma_modulo = new clsPmieducarTurmaModulo();
                     //						Busca em qual módulo a turma está
                     //						$resultado = $obj_turma_modulo->numModulo( $cont, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->cod_disciplinas, $this->ref_cod_turma, $this->ref_cod_turma );
                     //						Verifica se a turma está num módulo da turma
                     if ($resultado == $cont) {
                         $obj_modulo = new clsPmieducarModulo($registro["ref_cod_modulo"]);
                         $det_modulo = $obj_modulo->detalhe();
                         //							Carrega o nome do módulo no qual a turma se encontra
                         $this->modulo = $det_modulo["nm_tipo"];
                         //							Carrega o número do módulo no qual a turma se encontra
                         $this->num_modulo = $resultado;
                         break;
                     } else {
                         if ($resultado > $this->qtd_modulos) {
                             //							Carrega o nome do módulo no qual a turma se encontra como "Exame"
                             $this->modulo = "Exame";
                             //							Carrega o número do módulo no qual a turma se encontra igual ao número de módulos da turma mais 1
                             $this->num_modulo = $resultado + 1;
                             break;
                         }
                     }
                     $cont++;
                 }
             }
         }
     }
     //		echo "<pre>";
     //		print_r( $this->cod_disciplinas );
     $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);
         //			Carrega o ano letivo em que a turma se encontra
         $this->ano_letivo = $det_ano_letivo["ano"];
     }
     $obj_tipo_avaliacao = new clsPmieducarTipoAvaliacao($this->ref_cod_tipo_avaliacao);
     $det_tipo_avaliacao = $obj_tipo_avaliacao->detalhe();
     // 		Carrega o tipo de avaliação
     if ($det_tipo_avaliacao) {
         $this->conceitual = $det_tipo_avaliacao["conceitual"];
     }
     //		Carrega todos os valores do tipo de avaliação do curso
     $obj_avaliacao_valores = new clsPmieducarTipoAvaliacaoValores();
     $obj_avaliacao_valores->setOrderby("valor ASC");
     $lst_avaliacao_valores = $obj_avaliacao_valores->lista($this->ref_cod_tipo_avaliacao);
     if (is_array($lst_avaliacao_valores)) {
         $opcoes_valores = array("" => "Selecione");
         foreach ($lst_avaliacao_valores as $valores) {
             $opcoes_valores[$valores['sequencial']] = $valores["nome"];
         }
     }
     $obj_turma_disciplina = new clsPmieducarTurmaDisciplina();
     $obj_turma_disciplina->setOrderby("ref_cod_disciplina");
     //		Carrega o código das disciplinas da turma
     $lst_turma_disciplina = $obj_turma_disciplina->lista($this->ref_cod_turma);
     //echo "<pre>";
     //print_r( $lst_turma_disciplina );
     if (is_array($lst_turma_disciplina)) {
         //			Carrega a quantidade de disciplinas da turma
         $this->qtd_disciplinas = count($lst_turma_disciplina);
         $opcoes_disciplinas = array("" => "Selecione");
         foreach ($lst_turma_disciplina as $valores) {
             $obj_disciplina = new clsPmieducarDisciplina($valores["ref_cod_disciplina"]);
             $det_disciplina = $obj_disciplina->detalhe();
             if ($det_disciplina) {
                 //					Carrega a informação se a disciplina apura falta ou não
                 $this->lst_apura_falta["{$det_disciplina["cod_disciplina"]}"] = $det_disciplina["apura_falta"];
                 //$obj_notas = new clsPmieducarNotaAluno();
                 //					Carrega a quantidade de notas por aluno de uma turma numa determinada disciplina
                 //$lst_notas = $obj_notas->retornaDiscMod( $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $det_disciplina["cod_disciplina"], $this->ref_cod_turma, $this->ref_cod_turma, null, true );
                 //					Verifica se a quantidade de notas por aluno é diferente do número do módulo em que a turma se encontra
                 //echo "{$lst_notas} != {$this->num_modulo}<br>";
                 //if ( $lst_notas != $this->num_modulo )
                 //{
                 $opcoes_disciplinas[$det_disciplina["cod_disciplina"]] = $det_disciplina["nm_disciplina"];
                 //}
             }
         }
     }
     //echo "<pre>";
     //print_r( $opcoes_disciplinas );
     //		Verifica se deve ser exibida a página para classificar os alunos
     if ($this->classifica == "S") {
         //			Verifica se a turma terminou o último módulo ou se está no último módulo
         if ($this->num_modulo >= $this->qtd_modulos) {
             $obj_nota_aluno = new clsPmieducarNotaAluno();
             //				Carrega as médias de cada disciplina de cada aluno
             $lst_exame = $obj_nota_aluno->listaMedias($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->ref_cod_turma, $this->ref_cod_turma, $this->qtd_modulos, $this->ref_cod_curso, true, true, true);
             if (is_array($lst_exame)) {
                 $lst_disciplina_aprovacao = array("" => "Selecione");
                 foreach ($lst_exame as $exame) {
                     //						Verifica se o aluno possui freqüência abaixo da freqüência mínima
                     if (100 - $exame["faltas"] < $this->frequencia_minima) {
                         $obj_disciplina = new clsPmieducarDisciplina($exame["disc_ref_ref_cod_disciplina"]);
                         $det_disciplina = $obj_disciplina->detalhe();
                         if ($det_disciplina) {
                             //								Carrega a disciplina que possui alunos com freqüência abaixo da freqüência mínima
                             $lst_disciplina_aprovacao["{$exame["disc_ref_ref_cod_disciplina"]}"] = $det_disciplina["nm_disciplina"];
                             //								Carrega as informações referentes a disciplina e ao aluno que possui freqüência abaixo da freqüência mínima
                             $lst_aprovacao[] = $exame;
                         }
                     }
                 }
                 foreach ($lst_aprovacao as $classificacao) {
                     if ($classificacao["media"] < $this->media) {
                         $lst_classificacao[$classificacao["ref_ref_cod_matricula"]]["ref_ref_cod_matricula"] = $classificacao["ref_ref_cod_matricula"];
                         $lst_classificacao[$classificacao["ref_ref_cod_matricula"]]["exibe"] = "S";
                     } else {
                         if ($lst_classificacao[$classificacao["ref_ref_cod_matricula"]]) {
                             if ($lst_classificacao[$classificacao["ref_ref_cod_matricula"]]["exibe"] != "S") {
                                 $lst_classificacao[$classificacao["ref_ref_cod_matricula"]]["ref_ref_cod_matricula"] = $classificacao["ref_ref_cod_matricula"];
                                 $lst_classificacao[$classificacao["ref_ref_cod_matricula"]]["exibe"] = "N";
                             }
                         } else {
                             $lst_classificacao[$classificacao["ref_ref_cod_matricula"]]["ref_ref_cod_matricula"] = $classificacao["ref_ref_cod_matricula"];
                             $lst_classificacao[$classificacao["ref_ref_cod_matricula"]]["exibe"] = "N";
                         }
                     }
                 }
                 foreach ($lst_classificacao as $registro) {
                     foreach ($lst_exame as $exame) {
                         if ($exame["ref_ref_cod_matricula"] == $registro["ref_ref_cod_matricula"]) {
                             if ($exame["media"] < $this->media) {
                                 if ($registro["exibe"] == "N") {
                                     $lst_classificacao[$registro["ref_ref_cod_matricula"]]["ref_ref_cod_matricula"] = $registro["ref_ref_cod_matricula"];
                                     $lst_classificacao[$registro["ref_ref_cod_matricula"]]["exibe"] = "S";
                                 }
                             }
                         }
                     }
                 }
                 $opcoes_disciplinas = array_unique($lst_disciplina_aprovacao);
             }
             //				Verifica se existem alunos com a freqüência abaixo da freqüência mínima
             if (is_array($lst_aprovacao)) {
                 foreach ($lst_classificacao as $registro) {
                     $obj_matricula = new clsPmieducarMatricula($registro["ref_ref_cod_matricula"], null, null, null, null, null, null, null, null, null, 1, null, 1, $this->modulo);
                     $det_matricula = $obj_matricula->detalhe();
                     if ($det_matricula) {
                         $obj_aluno = new clsPmieducarAluno($det_matricula["ref_cod_aluno"]);
                         $det_aluno = $obj_aluno->detalhe();
                         if ($det_aluno) {
                             $obj_pessoa = new clsPessoa_($det_aluno["ref_idpes"]);
                             $det_pessoa = $obj_pessoa->detalhe();
                             $obj_dispensa = new clsPmieducarDispensaDisciplina($this->ref_cod_turma, $det_matricula["cod_matricula"], $this->ref_cod_turma, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->ref_cod_disciplina, null, null, null, null, null, 1);
                             $det_dispensa = $obj_dispensa->detalhe();
                             if (is_numeric($this->ref_cod_tipo_avaliacao)) {
                                 $obj_tipo_avaliacao = new clsPmieducarTipoAvaliacao($this->ref_cod_tipo_avaliacao, null, null, null, null, null, 1, null, $this->ref_cod_instituicao);
                                 $det_tipo_avaliacao = $obj_tipo_avaliacao->detalhe();
                                 //									Verifica se o tipo de avaliação não é conceitual
                                 if ($det_tipo_avaliacao["conceitual"] == 0) {
                                     $this->campoOculto("nm_aluno_{$det_pessoa["idpes"]}", $det_pessoa["nome"]);
                                     $this->campoTextoInv("nm_aluno_{$det_pessoa["idpes"]}_", "Aluno", $det_pessoa["nome"], 30, 255, false, false, true);
                                     $this->lst_matriculas[] = array("{$det_matricula["ref_cod_aluno"]}", "{$det_pessoa["idpes"]}", "{$det_matricula["cod_matricula"]}");
                                     //										Verifica se a falta não é globalizada e se não está na última disciplina
                                     if (!($this->falta_ch_globalizada == 1 && $this->qtd_disciplinas > 1)) {
                                         //$this->campoTextoInv( "faltas_{$det_pessoa["idpes"]}_", "Faltas", $registro["faltas"], 5, 5, false, false, true );
                                         //											Verifica se a média é maior ou igual a média mínima
                                         if ($registro["exibe"] == "N") {
                                             $this->campoCheck("aprovacao_{$det_pessoa["idpes"]}_", " ", 0, "Aprovado");
                                         } else {
                                             $this->campoCheck("aprovacao_{$det_pessoa["idpes"]}_", " ", 0, "Exame");
                                         }
                                     }
                                 } else {
                                     $this->campoTexto("nm_aluno_{$det_pessoa["idpes"]}", "Aluno", $det_pessoa["nome"], 30, 255, false, false, false, "", "", "", "onKeyUp", true);
                                 }
                             } else {
                                 $this->campoTexto("nm_aluno_{$det_pessoa["idpes"]}", "Aluno", $det_pessoa["nome"], 30, 255, false, false, false, "", "", "", "onKeyUp", true);
                             }
                         }
                     }
                 }
             }
         }
     } else {
         //			Verifica se a turma terminou o último módulo
         if ($this->num_modulo > $this->qtd_modulos) {
             $obj_nota_aluno = new clsPmieducarNotaAluno();
             //				Carrega as médias de cada disciplina de cada aluno
             $lst_exame = $obj_nota_aluno->listaMedias($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->ref_cod_turma, $this->ref_cod_turma, $this->qtd_modulos, $this->ref_cod_curso, true, true, false, true);
             if (is_array($lst_exame)) {
                 $lst_disciplina_aprovacao = array("" => "Selecione");
                 foreach ($lst_exame as $exame) {
                     $obj_notas = new clsPmieducarNotaAluno();
                     //						Carrega a quantidade de notas por aluno de uma turma numa determinada disciplina
                     $lst_notas = $obj_notas->retornaDiscMod($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $exame["disc_ref_ref_cod_disciplina"], $this->ref_cod_turma, $this->ref_cod_turma, $exame["ref_ref_cod_matricula"]);
                     $obj_dispensa = new clsPmieducarDispensaDisciplina($this->ref_cod_turma, $exame["ref_ref_cod_matricula"], $this->ref_cod_turma, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $exame["disc_ref_ref_cod_disciplina"], null, null, null, null, null, 1);
                     $det_dispensa = $obj_dispensa->detalhe();
                     //						Verifica se a quantiade de notas da disciplina é diferente da quantidade de módulos, se não foi dispensado da disciplina e se a média é menor que a média mínima
                     if ($lst_notas != $this->num_modulo && !is_array($det_dispensa) && $exame["media"] < $this->media) {
                         $obj_disciplina = new clsPmieducarDisciplina($exame["disc_ref_ref_cod_disciplina"]);
                         $det_disciplina = $obj_disciplina->detalhe();
                         if ($det_disciplina) {
                             //								Carrega a disciplina que possui alunos com média abaixo da média mínima
                             $lst_disciplina_aprovacao["{$exame["disc_ref_ref_cod_disciplina"]}"] = $det_disciplina["nm_disciplina"];
                         }
                     }
                 }
                 $opcoes_disciplinas = array_unique($lst_disciplina_aprovacao);
             }
         }
         $this->campoRotulo("tipo_modulo", "Módulo", $this->modulo);
         $this->campoRotulo("numero_modulo", "Número do Módulo", $this->num_modulo);
         //			$this->campoTexto( "tipo_modulo", "Módulo", $this->modulo, 30, 255, false, false, false, "", "", "", "onKeyUp", true );
         $this->campoLista("ref_cod_disciplina", "Disciplina", $opcoes_disciplinas, $this->ref_cod_disciplina);
         if (is_numeric($this->ref_cod_disciplina)) {
             $this->tipoacao = "Novo";
             //				Verifica se a turma terminou o último módulo
             if ($this->qtd_modulos < $this->num_modulo) {
                 $obj_nota_aluno = new clsPmieducarNotaAluno();
                 //					Carrega as médias dos alunos por disciplina
                 $lst_exame = $obj_nota_aluno->listaMedias($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->ref_cod_turma, $this->ref_cod_turma, $this->qtd_modulos, $this->ref_cod_curso, true, true, false, true);
                 if (is_array($lst_exame)) {
                     foreach ($lst_exame as $registro) {
                         $obj_matricula = new clsPmieducarMatricula($registro["ref_ref_cod_matricula"], null, null, null, null, null, null, null, null, null, 1, null, 1, $this->modulo);
                         $det_matricula = $obj_matricula->detalhe();
                         if ($registro["disc_ref_ref_cod_disciplina"] == $this->ref_cod_disciplina) {
                             //								Verifica se a média do aluno em uma disciplina está abaixo da média mínima
                             if ($registro["media"] < $this->media) {
                                 if ($det_matricula) {
                                     $obj_aluno = new clsPmieducarAluno($det_matricula["ref_cod_aluno"]);
                                     $det_aluno = $obj_aluno->detalhe();
                                     if ($det_aluno) {
                                         $obj_pessoa = new clsPessoa_($det_aluno["ref_idpes"]);
                                         $det_pessoa = $obj_pessoa->detalhe();
                                         $obj_dispensa = new clsPmieducarDispensaDisciplina($this->ref_cod_turma, $det_matricula["cod_matricula"], $this->ref_cod_turma, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->ref_cod_disciplina, null, null, null, null, null, 1);
                                         $det_dispensa = $obj_dispensa->detalhe();
                                         //											Verifica se o aluno não foi dispensado da disciplina
                                         if (!$det_dispensa) {
                                             if (is_numeric($this->ref_cod_tipo_avaliacao)) {
                                                 $obj_tipo_avaliacao = new clsPmieducarTipoAvaliacao($this->ref_cod_tipo_avaliacao, null, null, null, null, null, 1, null, $this->ref_cod_instituicao);
                                                 $det_tipo_avaliacao = $obj_tipo_avaliacao->detalhe();
                                                 //													Verifica se o tipo de avaliação não é conceitual
                                                 if ($det_tipo_avaliacao["conceitual"] == 0) {
                                                     $this->campoOculto("nm_aluno_{$det_pessoa["idpes"]}", $det_pessoa["nome"]);
                                                     $this->campoTextoInv("nm_aluno_{$det_pessoa["idpes"]}_", "Aluno", $det_pessoa["nome"], 30, 255, false, false, true);
                                                     $this->lst_matriculas[] = array("{$det_matricula["ref_cod_aluno"]}", "{$det_pessoa["idpes"]}", "{$det_matricula["cod_matricula"]}");
                                                     $this->campoLista("nota_{$det_pessoa["idpes"]}", " Nota", $opcoes_valores, "", "", true);
                                                     $this->exame = "S";
                                                     //														Verifica se a falta não é globalizada e se não está na última disciplina
                                                     if (!($this->falta_ch_globalizada == 1 && $this->qtd_disciplinas > 1)) {
                                                         //															Verifica se a disciplina apura faltas
                                                         if ($this->lst_apura_falta[$this->ref_cod_disciplina] == 1) {
                                                             //																Verifica se o ano letivo ainda está em andamento
                                                             if (!($this->num_modulo > $this->qtd_modulos)) {
                                                                 $this->campoNumero("faltas_{$det_pessoa["idpes"]}", " Faltas", "", 3, 3, true);
                                                             } else {
                                                                 $this->exame = "S";
                                                             }
                                                         } else {
                                                             $this->campoLista("nota_{$det_pessoa["idpes"]}", " Nota", $opcoes_valores, "", "", false);
                                                         }
                                                     }
                                                 } else {
                                                     $this->campoTexto("nm_aluno_{$det_pessoa["idpes"]}", "Aluno", $det_pessoa["nome"], 30, 255, false, false, false, "", "", "", "onKeyUp", true);
                                                 }
                                             } else {
                                                 $this->campoTexto("nm_aluno_{$det_pessoa["idpes"]}", "Aluno", $det_pessoa["nome"], 30, 255, false, false, false, "", "", "", "onKeyUp", true);
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 } else {
                 }
             } else {
                 if (is_array($this->lst_matricula_turma)) {
                     foreach ($this->lst_matricula_turma as $registro) {
                         $obj_notas = new clsPmieducarNotaAluno();
                         //							Carrega a quantidade de notas por aluno de uma turma numa determinada disciplina
                         $lst_notas = $obj_notas->retornaDiscMod($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->ref_cod_disciplina, $this->ref_cod_turma, $this->ref_cod_turma, $registro["ref_cod_matricula"]);
                         //echo "matrc.: {$registro["ref_cod_matricula"]}<br>";
                         //							echo "1 {$this->num_modulo} == ".( $lst_notas + 1 )."<br>";
                         if ($this->num_modulo == $lst_notas + 1) {
                             $obj_matricula = new clsPmieducarMatricula();
                             $modulo_matric = $obj_matricula->numModulo($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->ref_cod_turma, $this->ref_cod_turma, $registro["ref_cod_matricula"]);
                             $obj_matricula = new clsPmieducarMatricula($registro["ref_cod_matricula"], null, null, null, null, null, null, null, null, null, 1, null, 1, $this->modulo);
                             $det_matricula = $obj_matricula->detalhe();
                             if ($det_matricula) {
                                 //									echo "2 ".( $modulo_matric + 1 )." == {$this->num_modulo}<br>";
                                 if ($modulo_matric + 1 == $this->num_modulo) {
                                     $obj_aluno = new clsPmieducarAluno($det_matricula["ref_cod_aluno"]);
                                     $det_aluno = $obj_aluno->detalhe();
                                     if ($det_aluno) {
                                         $obj_pessoa = new clsPessoa_($det_aluno["ref_idpes"]);
                                         $det_pessoa = $obj_pessoa->detalhe();
                                         $obj_dispensa = new clsPmieducarDispensaDisciplina();
                                         $det_dispensa = $obj_dispensa->lista($this->ref_cod_turma, $det_matricula["cod_matricula"], $this->ref_cod_turma, $this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->ref_cod_disciplina, null, null, null, null, null, null, null, 1);
                                         $det_disciplina = $det_disciplina[0];
                                         //										Verifica se o aluno não foi dispensado da disciplina
                                         if (!$det_dispensa) {
                                             if (is_numeric($this->ref_cod_tipo_avaliacao)) {
                                                 $obj_tipo_avaliacao = new clsPmieducarTipoAvaliacao($this->ref_cod_tipo_avaliacao, null, null, null, null, null, 1, null, $this->ref_cod_instituicao);
                                                 $det_tipo_avaliacao = $obj_tipo_avaliacao->detalhe();
                                                 $this->campoOculto("nm_aluno_{$det_pessoa["idpes"]}", $det_pessoa["nome"]);
                                                 $this->campoTextoInv("nm_aluno_{$det_pessoa["idpes"]}_", "Aluno", $det_pessoa["nome"], 30, 255, false, false, true);
                                                 $this->lst_matriculas[] = array("{$det_matricula["ref_cod_aluno"]}", "{$det_pessoa["idpes"]}", "{$det_matricula["cod_matricula"]}");
                                                 $obj_nota_aluno = new clsPmieducarNotaAluno();
                                                 $disc_nota = $obj_nota_aluno->retornaDiscNota($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->ref_cod_turma, $this->ref_cod_turma, $det_matricula["cod_matricula"], $this->num_modulo);
                                                 $obj_disciplina_serie = new clsPmieducarDisciplinaSerie();
                                                 $qtd_disc = $obj_disciplina_serie->retornaQtdDiscMat($this->ref_ref_cod_serie, $this->ref_ref_cod_escola, $this->ref_cod_turma, $this->ref_cod_turma, $det_matricula["cod_matricula"]);
                                                 if ($this->falta_ch_globalizada == 1 && $disc_nota == $qtd_disc - 1) {
                                                     $this->campoLista("nota_{$det_pessoa["idpes"]}", " Nota", $opcoes_valores, "", "", true);
                                                 } else {
                                                     $this->campoLista("nota_{$det_pessoa["idpes"]}", " Nota", $opcoes_valores, "", "", false);
                                                 }
                                                 //												Verifica se a falta não é globalizada e se não está na última disciplina
                                                 if (!($this->falta_ch_globalizada == 1 && $this->qtd_disciplinas > 1)) {
                                                     //													Verifica se a disciplina apura faltas
                                                     if ($this->lst_apura_falta[$this->ref_cod_disciplina] == 1) {
                                                         //														Verifica se o ano letivo ainda está em andamento
                                                         if (!($this->num_modulo > $this->qtd_modulos)) {
                                                             $this->campoNumero("faltas_{$det_pessoa["idpes"]}", " Faltas", "", 3, 3, true);
                                                         } else {
                                                             $this->exame = "S";
                                                         }
                                                     } else {
                                                         $this->campoLista("nota_{$det_pessoa["idpes"]}", " Nota", $opcoes_valores, "", "", false);
                                                     }
                                                 } else {
                                                     if ($this->falta_ch_globalizada == 1 && $disc_nota == $qtd_disc - 1) {
                                                         //													Verifica se o ano letivo ainda está em andamento
                                                         if (!($this->num_modulo > $this->qtd_modulos)) {
                                                             if ($this->num_modulo == $this->qtd_modulos) {
                                                                 $this->campoNumero("faltas_{$det_pessoa["idpes"]}", " Faltas", "", 3, 3, true, "", "", false, false, true);
                                                                 $this->campoLista("aprovacao_{$det_pessoa["idpes"]}", "", array("" => "Selecione", "S" => "Aprovado", "N" => "Reprovado"), "");
                                                             } else {
                                                                 $this->campoNumero("faltas_{$det_pessoa["idpes"]}", " Faltas", "", 3, 3, true);
                                                             }
                                                         }
                                                     }
                                                 }
                                             } else {
                                                 $this->campoTexto("nm_aluno_{$det_pessoa["idpes"]}", "Aluno", $det_pessoa["nome"], 30, 255, false, false, false, "", "", "", "onKeyUp", true);
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     $this->lst_matriculas = serialize($this->lst_matriculas);
     $this->cod_disciplinas = serialize($this->cod_disciplinas);
     $this->lst_apura_falta = serialize($this->lst_apura_falta);
     $this->campoOculto("ref_cod_turma", $this->ref_cod_turma);
     $this->campoOculto("ref_ref_cod_escola", $this->ref_ref_cod_escola);
     $this->campoOculto("ref_ref_cod_serie", $this->ref_ref_cod_serie);
     $this->campoOculto("ref_cod_curso", $this->ref_cod_curso);
     $this->campoOculto("ref_cod_tipo_avaliacao", $this->ref_cod_tipo_avaliacao);
     $this->campoOculto("media", $this->media);
     $this->campoOculto("media_exame", $this->media_exame);
     $this->campoOculto("ano_letivo", $this->ano_letivo);
     $this->campoOculto("conceitual", $this->conceitual);
     $this->campoOculto("lst_matriculas", $this->lst_matriculas);
     $this->campoOculto("falta_ch_globalizada", $this->falta_ch_globalizada);
     $this->campoOculto("qtd_modulos", $this->qtd_modulos);
     $this->campoOculto("num_modulo", $this->num_modulo);
     $this->campoOculto("frequencia_minima", $this->frequencia_minima);
     $this->campoOculto("carga_horaria", $this->carga_horaria);
     $this->campoOculto("cod_disciplinas", $this->cod_disciplinas);
     $this->campoOculto("lst_apura_falta", $this->lst_apura_falta);
     $this->campoOculto("qtd_disciplinas", $this->qtd_disciplinas);
     $this->campoOculto("exame", $this->exame);
     $this->campoOculto("classifica", $this->classifica);
 }
 /**
  * calcula as médias do aluno $cod_matricula em todas as disciplinas
  *
  * @param int $cod_matricula
  * @param int $qtd_modulos
  *
  * @return array
  */
 function getMediasAluno($cod_matricula, $qtd_modulos, $nao_arredondar_nota = false)
 {
     $retorno = array();
     if (is_numeric($cod_matricula) && is_numeric($qtd_modulos) && $qtd_modulos) {
         $i = 0;
         $db = new clsBanco();
         $db2 = new clsBanco();
         $db->Consulta("\n\t\t\tSELECT na.ref_cod_disciplina, na.ref_cod_serie, SUM( tav.valor )\n\t\t\tFROM pmieducar.nota_aluno na\n\t\t\t, pmieducar.tipo_avaliacao_valores tav\n\t\t\tWHERE na.ref_cod_matricula = '{$cod_matricula}'\n\t\t\tAND na.ativo = 1\n\t\t\tAND tav.ref_cod_tipo_avaliacao = na.ref_ref_cod_tipo_avaliacao\n\t\t\tAND tav.sequencial = na.ref_sequencial\n\t\t\tAND na.modulo <= '{$qtd_modulos}'\n\t\t\tGROUP BY ref_cod_disciplina, ref_cod_serie\n\t\t\t");
         while ($db->ProximoRegistro()) {
             list($cod_disciplina, $cod_serie, $soma) = $db->Tupla();
             $retorno[$i]["cod_disciplina"] = $cod_disciplina;
             $retorno[$i]["cod_serie"] = $cod_serie;
             $tipo_avaliacao = $db2->CampoUnico("SELECT ref_ref_cod_tipo_avaliacao FROM pmieducar.nota_aluno WHERE ref_cod_matricula = '{$cod_matricula}' AND ref_ref_cod_tipo_avaliacao IS NOT NULL LIMIT 1");
             $media = $soma / $qtd_modulos;
             if (!$nao_arredondar_nota) {
                 $objTipoAvaliacaoValores = new clsPmieducarTipoAvaliacaoValores();
                 $objTipoAvaliacaoValores->setLimite(1);
                 $objTipoAvaliacaoValores->setOrderby("valor DESC");
                 $lista = $objTipoAvaliacaoValores->lista($tipo_avaliacao, null, null, null, $media, $media);
                 foreach ($lista as $valor) {
                     $media_valor = $valor["valor"];
                 }
             } else {
                 $media_valor = $media;
             }
             $retorno[$i]["media"] = $media_valor;
             $i++;
         }
     }
     return $retorno;
 }
 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;
 }