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);
 }
 function buscaDiasLetivos()
 {
     $obj_calendario = new clsPmieducarEscolaAnoLetivo();
     $lista_calendario = $obj_calendario->lista($this->ref_cod_escola, $this->ano, null, null, null, null, null, null, null, 1, null);
     $totalDiasUteis = 0;
     $total_semanas = 0;
     $obj_ano_letivo_modulo = new clsPmieducarAnoLetivoModulo();
     $obj_ano_letivo_modulo->setOrderby("data_inicio asc");
     $lst_ano_letivo_modulo = $obj_ano_letivo_modulo->lista($this->ano, $this->ref_cod_escola, null, null);
     if ($lst_ano_letivo_modulo) {
         $inicio = $lst_ano_letivo_modulo['0'];
         $fim = $lst_ano_letivo_modulo[count($lst_ano_letivo_modulo) - 1];
         $mes_inicial = explode("-", $inicio['data_inicio']);
         $mes_inicial = $mes_inicial[1];
         $dia_inicial = $mes_inicial[2];
         $mes_final = explode("-", $fim['data_fim']);
         $mes_final = $mes_final[1];
         $dia_final = $mes_final[2];
     }
     for ($mes = $mes_inicial; $mes <= $mes_final; $mes++) {
         $obj_calendario_dia = new clsPmieducarCalendarioDia();
         $lista_dias = $obj_calendario_dia->lista($calendario['cod_calendario_ano_letivo'], $mes, null, null, null, null, null, null, null, 1);
         $dias_mes = array();
         if ($lista_dias) {
             foreach ($lista_dias as $dia) {
                 $obj_motivo = new clsPmieducarCalendarioDiaMotivo($dia['ref_cod_calendario_dia_motivo']);
                 $det_motivo = $obj_motivo->detalhe();
                 $dias_mes[$dia['dia']] = strtolower($det_motivo['tipo']);
             }
         }
         //Dias previstos do mes
         // Qual o primeiro dia do mes
         $primeiroDiaDoMes = mktime(0, 0, 0, $mes, 1, $this->ano);
         // Quantos dias tem o mes
         $NumeroDiasMes = date('t', $primeiroDiaDoMes);
         //informacoes primeiro dia do mes
         $dateComponents = getdate($primeiroDiaDoMes);
         // What is the name of the month in question?
         $NomeMes = $mesesDoAno[$dateComponents['mon']];
         // What is the index value (0-6) of the first day of the
         // month in question.
         $DiaSemana = $dateComponents['wday'];
         //total de dias uteis + dias extra-letivos - dia nao letivo - fim de semana
         $DiaSemana = 0;
         if ($mes == $mes_inicial) {
             $dia_ini = $dia_inicial;
         } elseif ($mes == $mes_final) {
             $dia_ini = $dia_final;
         } else {
             $dia_ini = 1;
         }
         for ($dia = $dia_ini; $dia <= $NumeroDiasMes; $dia++) {
             if ($DiaSemana >= 7) {
                 $DiaSemana = 0;
                 $total_semanas++;
             }
             if ($DiaSemana != 0 && $DiaSemana != 6) {
                 if (!(key_exists($dia, $dias_mes) && $dias_mes[$dia] == strtolower('n'))) {
                     $totalDiasUteis++;
                 }
             } elseif (key_exists($dia, $dias_mes) && $dias_mes[$dia] == strtolower('e')) {
                 $totalDiasUteis++;
             }
             $DiaSemana++;
         }
     }
     $this->total_dias_uteis = $totalDiasUteis;
     $this->total_semanas = $total_semanas;
 }
 /**
  * Cria um boletim em HTML para a matricula $matricula
  *
  * @param int $matricula
  * @return array
  */
 function getBoletimAluno($matricula, $ano)
 {
     $media = false;
     $reprovado = 0;
     $falta_globalizada = 0;
     $array_status = array("Aprovado", "Reprovado", "Reprovado por faltas");
     $objCurso = new clsPmieducarCurso($this->ref_cod_curso);
     $detalhe_curso = $objCurso->detalhe();
     // monta o boletim do aluno
     $cor = array("#ffffff", "#dce6f1");
     $corDest = array("#e1c9c9", "#efe7e7");
     $boletim = "\n\t\t<table border=\"0\" cellpadding=\"2\" cellspacing=\"0\" style=\"border-width:2px;color#00000;border-style:solid;\">\n\t\t\t<tr bgcolor=\"#ffffff\">\n\t\t\t\t<td rowspan=\"2\" class=\"cell_normal\" align=\"center\">Disciplina</td>\n\t\t";
     $linha2 = "<tr bgcolor=\"#ffffff\">";
     $objTurmaModulo = new clsPmieducarAnoLetivoModulo();
     $objTurmaModulo->setOrderby("sequencial ASC");
     $lista_modulos = $objTurmaModulo->lista($ano, $this->ref_ref_cod_escola);
     if (is_array($lista_modulos)) {
         foreach ($lista_modulos as $modulo) {
             $objModulo = new clsPmieducarModulo($modulo["ref_cod_modulo"]);
             $detModulo = $objModulo->detalhe();
             $boletim .= "<td colspan=\"2\" class=\"cell_separa\" align=\"center\">{$detModulo["nm_tipo"]}</td>";
             $linha2 .= "\n\t\t\t\t<td class=\"cell_separa\" align=\"center\" width=\"40\">Nota</td>\n\t\t\t\t<td class=\"cell_normal\" align=\"center\" width=\"40\">Faltas</td>\n\t\t\t\t";
         }
     }
     if (!is_null($detalhe_curso["media_exame"])) {
         $boletim .= "<td class=\"cell_separa\" align=\"center\">Exame</td>";
         $linha2 .= "<td class=\"cell_separa\" align=\"center\">Nota</td>";
     }
     $boletim .= "<td colspan=\"2\" class=\"cell_separa\" align=\"center\">Resultado</td>\n\t\t</tr>\n\t\t";
     $linha2 .= "<td class=\"cell_separa\" align=\"center\" width=\"40\">Media</td><td class=\"cell_normal\" align=\"center\" width=\"40\">Faltas</td></tr>";
     $boletim .= $linha2;
     $i = 0;
     $objDisciplinaSerie = new clsPmieducarDisciplinaSerie();
     $lstDisciplinas = $objDisciplinaSerie->lista(null, $this->ref_ref_cod_serie, 1);
     foreach ($lstDisciplinas as $disciplina) {
         $i++;
         $faltas_total = 0;
         $notas_total = 0;
         $objDispensa = new clsPmieducarDispensaDisciplina($matricula, $disciplina["ref_cod_serie"], $this->ref_ref_cod_escola, $disciplina["ref_cod_disciplina"]);
         $dispensa = $objDispensa->existe();
         $objDisciplina = new clsPmieducarDisciplina($disciplina["ref_cod_disciplina"]);
         $detDisciplina = $objDisciplina->detalhe();
         $boletim .= "\n\t\t\t<tr>\n\t\t\t\t<td bgcolor=\"" . $cor[$i % 2] . "\"  class=\"cell_normal\">{$detDisciplina["nm_disciplina"]}</td>\n\t\t\t";
         if (is_array($lista_modulos)) {
             reset($lista_modulos);
             foreach ($lista_modulos as $modulo) {
                 if ($dispensa) {
                     $boletim .= "\n\t\t\t\t\t\t<td bgcolor=\"" . $cor[$i % 2] . "\" class=\"cell_separa\" colspan=\"2\" align=\"center\">dispensa</td>\n\t\t\t\t\t\t";
                 } else {
                     // pegando a falta desse modulo
                     $faltas = 0;
                     $objFaltaAluno = new clsPmieducarFaltaAluno();
                     $objFaltaAluno->setOrderby("data_cadastro DESC");
                     $objFaltaAluno->setLimite(1);
                     $lista_faltas = $objFaltaAluno->lista(null, null, null, $disciplina["ref_cod_serie"], $this->ref_ref_cod_escola, $disciplina["ref_cod_disciplina"], $matricula, null, null, null, null, null, 1, $modulo["sequencial"]);
                     if (is_array($lista_faltas)) {
                         foreach ($lista_faltas as $falta_modulo) {
                             $faltas = $falta_modulo["faltas"];
                         }
                     }
                     $nota = null;
                     $objNotaAluno = new clsPmieducarNotaAluno();
                     $objNotaAluno->setOrderby("data_cadastro DESC");
                     $objNotaAluno->setLimite(1);
                     //						echo "<br><br><br>null,null,null,{$this->ref_ref_cod_serie},{$this->ref_ref_cod_escola},{$disciplina["ref_cod_disciplina"]},{$matricula},null,null,null,null,null,1,{$modulo["sequencial"]}\n<br>\n";
                     $lista_notas = $objNotaAluno->lista(null, null, null, $disciplina["ref_cod_serie"], $this->ref_ref_cod_escola, $disciplina["ref_cod_disciplina"], $matricula, null, null, null, null, null, null, 1, $modulo["sequencial"]);
                     //						print_r($lista_notas);
                     //						echo "<br>";
                     if (is_array($lista_notas)) {
                         foreach ($lista_notas as $nota_modulo) {
                             $objNotaValor = new clsPmieducarTipoAvaliacaoValores($nota_modulo["ref_ref_cod_tipo_avaliacao"], $nota_modulo["ref_sequencial"]);
                             //								echo "{$nota_modulo["ref_ref_cod_tipo_avaliacao"]},{$nota_modulo["ref_sequencial"]}\n<br>\n";
                             $det_nota_valor = $objNotaValor->detalhe();
                             $nota = $det_nota_valor["nome"];
                             $notas_total += $det_nota_valor["valor"];
                         }
                         unset($lista_notas);
                     }
                     $nota = $nota ? $nota : "&nbsp;";
                     $faltas = $faltas ? $faltas : 0;
                     $faltas_total += $faltas;
                     $boletim .= "\n\t\t\t\t\t\t<td bgcolor=\"" . $cor[$i % 2] . "\" class=\"cell_separa\">{$nota}</td>\n\t\t\t\t\t\t<td bgcolor=\"" . $cor[$i % 2] . "\" class=\"cell_normal\">{$faltas}</td>\n\t\t\t\t\t\t";
                 }
             }
             $media = $notas_total / count($lista_modulos);
             $media_aprovacao = $detalhe_curso["media"];
             if (!is_null($detalhe_curso["media_exame"])) {
                 // o curso tem exame
                 if ($dispensa) {
                     $boletim .= "\n\t\t\t\t\t\t<td bgcolor=\"" . $cor[$i % 2] . "\" class=\"cell_separa\" align=\"center\">dispensa</td>\n\t\t\t\t\t\t";
                 } else {
                     // echo count($lista_modulos);
                     $objNotaAluno = new clsPmieducarNotaAluno();
                     $objNotaAluno->setLimite(1);
                     $objNotaAluno->setOrderby("data_cadastro DESC");
                     $listaNotas = $objNotaAluno->lista(null, null, null, $disciplina["ref_cod_serie"], null, $disciplina["ref_cod_disciplina"], $matricula, null, null, null, null, null, null, null, count($lista_modulos) + 1);
                     if ($listaNotas) {
                         // ja recebeu a nota do exame
                         foreach ($listaNotas as $nota_exame) {
                             $objNotaValor = new clsPmieducarTipoAvaliacaoValores($nota_exame["ref_ref_cod_tipo_avaliacao"], $nota_exame["ref_sequencial"]);
                             $detNotaValor = $objNotaValor->detalhe();
                             $nota_exame = $detNotaValor["nome"];
                             // print_r($detNotaValor);
                             $notas_total += $detNotaValor["valor"];
                             $nota_exame = $nota_exame ? $nota_exame : "-";
                             $boletim .= "<td bgcolor=\"" . $cor[$i % 2] . "\" class=\"cell_separa\">{$nota_exame}</td>";
                         }
                         $media = $notas_total / (count($lista_modulos) + 1);
                         $media_aprovacao = $detalhe_curso["media_exame"];
                     } else {
                         $nota_exame = $nota_exame ? $nota_exame : "-";
                         $boletim .= "<td bgcolor=\"" . $cor[$i % 2] . "\" class=\"cell_separa\">-</td>";
                     }
                 }
             }
             if ($media !== false) {
                 $objNotaValor = new clsPmieducarTipoAvaliacaoValores();
                 $objNotaValor->setLimite(1);
                 $objNotaValor->setOrderby("valor DESC");
                 $notas_media = $objNotaValor->lista($detalhe_curso["ref_cod_tipo_avaliacao"], null, null, null, $media, $media);
                 foreach ($notas_media as $nota_media) {
                     $media = $nota_media["nome"];
                     if ($nota_media["valor"] < $media_aprovacao) {
                         $reprovado = 1;
                     }
                 }
             } else {
                 $media = "&nbsp;";
             }
             if ($dispensa) {
                 $boletim .= "\n\t\t\t\t\t<td bgcolor=\"" . $cor[$i % 2] . "\" class=\"cell_separa\" colspan=\"2\" align=\"center\">dispensa</td>\n\t\t\t\t\t";
             } else {
                 $boletim .= "\n\t\t\t\t\t<td bgcolor=\"" . $cor[$i % 2] . "\" class=\"cell_separa\">{$media}</td>\n\t\t\t\t\t<td bgcolor=\"" . $cor[$i % 2] . "\"  class=\"cell_normal\">{$faltas_total}</td>\n\t\t\t\t\t";
             }
         }
         if (!$detalhe_curso["falta_ch_globalizada"] && $maximo_faltas != "Ilimitado") {
             if ($faltas_total > $maximo_faltas) {
                 $reprovado = 2;
             }
         }
         $falta_globalizada += $faltas_total;
     }
     if ($detalhe_curso["falta_ch_globalizada"] && $maximo_faltas != "Ilimitado") {
         if ($falta_globalizada > $maximo_faltas) {
             $reprovado = 2;
         }
     }
     $boletim .= "</table>";
     return array("boletim" => $boletim, "automatico" => $array_status[$reprovado]);
 }