From b4b5131c73a92cb7d4044b12e19edd9453590698 Mon Sep 17 00:00:00 2001 From: Lucas D'Avila Date: Thu, 31 Jan 2013 21:07:24 -0200 Subject: [PATCH] Adicionado modulo de processamento de histótico escolar, corrigido e melhorado cadastro, listagem e detalhe de histórico escolar --- ieducar/intranet/educar_historico_escolar_cad.php | 186 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------------------ ieducar/intranet/educar_historico_escolar_det.php | 46 ++++++++++++++++++++++++++++++++++++++++++---- ieducar/intranet/educar_historico_escolar_lst.php | 19 +++++++++++++++---- ieducar/intranet/include/pmieducar/clsPmieducarHistoricoEscolar.inc.php | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ ieducar/modules/HistoricoEscolar/Static/images/loading.gif | Bin 0 -> 2644 bytes ieducar/modules/HistoricoEscolar/Static/scripts/processamento.js | 647 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/modules/HistoricoEscolar/Static/styles/processamento.css | 8 ++++++++ ieducar/modules/HistoricoEscolar/Views/ProcessamentoApiController.php | 1045 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ieducar/modules/HistoricoEscolar/Views/ProcessamentoController.php | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 2215 insertions(+), 62 deletions(-) create mode 100644 ieducar/modules/HistoricoEscolar/Static/images/loading.gif create mode 100644 ieducar/modules/HistoricoEscolar/Static/scripts/processamento.js create mode 100644 ieducar/modules/HistoricoEscolar/Static/styles/processamento.css create mode 100644 ieducar/modules/HistoricoEscolar/Views/ProcessamentoApiController.php create mode 100644 ieducar/modules/HistoricoEscolar/Views/ProcessamentoController.php diff --git a/ieducar/intranet/educar_historico_escolar_cad.php b/ieducar/intranet/educar_historico_escolar_cad.php index 3f643fd..df7d1e1 100644 --- a/ieducar/intranet/educar_historico_escolar_cad.php +++ b/ieducar/intranet/educar_historico_escolar_cad.php @@ -30,6 +30,7 @@ require_once 'include/clsBase.inc.php'; require_once 'include/clsCadastro.inc.php'; require_once 'include/clsBanco.inc.php'; require_once 'include/pmieducar/geral.inc.php'; +require_once 'lib/Portabilis/View/Helper/Application.php'; class clsIndexBase extends clsBase { @@ -73,7 +74,7 @@ class indice extends clsCadastro var $faltas_globalizadas; var $cb_faltas_globalizadas; - + var $frequencia; //------INCLUI DISCIPLINA------// var $historico_disciplinas; @@ -83,6 +84,8 @@ class indice extends clsCadastro var $excluir_disciplina; var $ultimo_sequencial; + var $aceleracao; + function Inicializar() { $retorno = "Novo"; @@ -102,7 +105,7 @@ class indice extends clsCadastro $registro = $obj->detalhe(); if( $registro ) { - foreach( $registro AS $campo => $val ) // passa todos os valores obtidos no registro para atributos do objeto + foreach( $registro AS $campo => $val ) // passa todos os valores obtidos no registro para atributos do objeto $this->$campo = $val; if (!$this->origem) @@ -152,7 +155,7 @@ class indice extends clsCadastro { $obj_instituicao = new clsPmieducarInstituicao(); $lista = $obj_instituicao->lista(null,null,null,null,null,null,null,null,null,null,null,null,null,1); - $opcoes[""] = "Selecione"; + $opcoes["1"] = "Selecione"; if ( is_array( $lista ) && count( $lista ) ) { foreach ( $lista as $registro ) @@ -181,8 +184,7 @@ class indice extends clsCadastro $obj_uf = new clsUf($this->escola_uf); $det_uf = $obj_uf->detalhe(); } - - $lista_pais_origem = array('NULL' => "Pas da escola"); + $lista_pais_origem = array('45' => "Pas da escola"); $obj_pais = new clsPais(); $obj_pais_lista = $obj_pais->lista(null,null,null,"","","nome asc"); if($obj_pais_lista) @@ -192,11 +194,11 @@ class indice extends clsCadastro $lista_pais_origem[$pais["idpais"]] = $pais["nome"]; } } - $this->campoLista("idpais", "País da Escola", $lista_pais_origem, $det_uf['idpais'] ); + $this->campoLista("idpais", "País da Escola", $lista_pais_origem, $det_uf['45'] ); $obj_uf = new clsUf(); $lista_uf = $obj_uf->lista( false,false,$det_uf['idpais'],false,false, "sigla_uf" ); - $lista_estado = array( "" => "Selecione um país" ); + $lista_estado = array( "SC" => "Selecione um país" ); if( $lista_uf ) { foreach ($lista_uf as $uf) @@ -206,18 +208,31 @@ class indice extends clsCadastro } $this->campoLista("escola_uf", "Estado da Escola", $lista_estado, $this->escola_uf ); + $this->campoTexto( "nm_curso", "Curso", $this->nm_curso, 30, 255, false ); + + $opcoesGradeCurso = getOpcoesGradeCurso(); + $this->campoLista( "historico_grade_curso_id", "Grade curso", $opcoesGradeCurso, $this->historico_grade_curso_id ); + + $this->campoTexto( "nm_serie", "Série", $this->nm_serie, 30, 255, true ); $this->campoNumero( "ano", "Ano", $this->ano, 4, 4, true ); $this->campoMonetario( "carga_horaria", "Carga Horária", $this->carga_horaria, 8, 8, true ); - $this->campoCheck( "cb_faltas_globalizadas", "Faltas Globalizadas", $this->faltas_globalizadas ); + $this->campoCheck( "cb_faltas_globalizadas", "Faltas Globalizadas", is_numeric($this->faltas_globalizadas) ? 'on' : ''); $this->campoNumero( "faltas_globalizadas", "Faltas Globalizadas", $this->faltas_globalizadas, 4, 4, false ); $this->campoNumero( "dias_letivos", "Dias Letivos", $this->dias_letivos, 3, 3, true ); + $this->campoMonetario( "frequencia", "Frequncia", $this->frequencia, 8, 8, true ); $this->campoCheck( "extra_curricular", "Extra-Curricular", $this->extra_curricular ); + $this->campoCheck( "aceleracao", "Acelerao", $this->aceleracao ); $this->campoMemo( "observacao", "Observação", $this->observacao, 60, 5, false ); $opcoes = array( "" => "Selecione", 1 => "Aprovado", 2 => "Reprovado", 3 => "Em Andamento", 4 => "Transferido" ); $this->campoLista( "aprovado", "Situação", $opcoes, $this->aprovado ); + $this->campoTexto( "registro", "Registro (arquivo)", $this->registro, 30, 50, false); + $this->campoTexto( "livro", "Livro", $this->livro, 30, 50, false); + $this->campoTexto( "folha", "Folha", $this->folha, 30, 50, false); + + //---------------------INCLUI DISCIPLINAS---------------------// $this->campoQuebra(); @@ -247,10 +262,12 @@ class indice extends clsCadastro $this->campoTabelaInicio("notas","Notas",array("Disciplina","Nota","Faltas"),$this->historico_disciplinas); - $this->campoTexto( "nm_disciplina", "Disciplina", $this->nm_disciplina, 30, 255, false ); - $this->campoTexto( "nota", "Nota", $this->nota, 10, 255, false ); - $this->campoNumero( "faltas", "Faltas", $this->faltas, 3, 3, false ); - //$this->campoOculto("sequencial",""); + //$this->campoTexto( "nm_disciplina", "Disciplina", $this->nm_disciplina, 30, 255, false, false, false, '', '', 'autoCompleteComponentesCurricular(this)', 'onfocus' ); + $this->campoTexto( "nm_disciplina", "Disciplina", $this->nm_disciplina, 30, 255, false, false, false, '', '', '', 'onfocus' ); + + $this->campoTexto( "nota", "Nota", $this->nota, 10, 255, false ); + $this->campoNumero( "faltas", "Faltas", $this->faltas, 3, 3, false ); + //$this->campoOculto("sequencial",""); $this->campoTabelaFim(); @@ -258,6 +275,16 @@ class indice extends clsCadastro $this->campoQuebra(); //---------------------FIM INCLUI DISCIPLINAS---------------------// + + Portabilis_View_Helper_Application::loadJQueryLib($this); + Portabilis_View_Helper_Application::loadJQueryUiLib($this); + + Portabilis_View_Helper_Application::loadJavascript( + $this, + array('/modules/Portabilis/Assets/Javascripts/Utils.js', + '/modules/Portabilis/Assets/Javascripts/Frontend/Inputs/SimpleSearch.js') + ); + } function Novo() @@ -269,20 +296,22 @@ class indice extends clsCadastro $obj_permissoes = new clsPermissoes(); $obj_permissoes->permissao_cadastra( 578, $this->pessoa_logada, 7, "educar_historico_escolar_lst.php?ref_cod_aluno={$this->ref_cod_aluno}" ); -/* $this->historico_disciplinas = unserialize( urldecode( $this->historico_disciplinas ) ); +/* $this->historico_disciplinas = unserialize( urldecode( $this->historico_disciplinas ) ); if ($this->historico_disciplinas) { */ $this->carga_horaria = str_replace(".","",$this->carga_horaria); $this->carga_horaria = str_replace(",",".",$this->carga_horaria); + $this->frequencia = str_replace(".","",$this->frequencia); + $this->frequencia = str_replace(",",".",$this->frequencia); if ($this->extra_curricular == 'on') $this->extra_curricular = 1; else $this->extra_curricular = 0; -// echo "clsPmieducarHistoricoEscolar( $this->ref_cod_aluno, null, null, $this->pessoa_logada, $this->nm_serie, $this->ano, $this->carga_horaria, $this->dias_letivos, $this->escola, $this->escola_cidade, $this->escola_uf, $this->observacao, $this->aprovado, null, null, 1, null, $this->ref_cod_instituicao, 1, $this->extra_curricular )"; - $obj = new clsPmieducarHistoricoEscolar( $this->ref_cod_aluno, null, null, $this->pessoa_logada, $this->nm_serie, $this->ano, $this->carga_horaria, $this->dias_letivos, $this->escola, $this->escola_cidade, $this->escola_uf, $this->observacao, $this->aprovado, null, null, 1, $this->faltas_globalizadas, $this->ref_cod_instituicao, 1, $this->extra_curricular ); +// echo "clsPmieducarHistoricoEscolar( $this->ref_cod_aluno, null, null, $this->pessoa_logada, $this->nm_serie, $this->ano, $this->carga_horaria, $this->dias_letivos, $this->escola, $this->escola_cidade, $this->escola_uf, $this->observacao, $this->aprovado, null, null, 1, null, $this->ref_cod_instituicao, 1, $this->extra_curricular )"; + $obj = new clsPmieducarHistoricoEscolar( $this->ref_cod_aluno, null, null, $this->pessoa_logada, $this->nm_serie, $this->ano, $this->carga_horaria, $this->dias_letivos, $this->escola, $this->escola_cidade, $this->escola_uf, $this->observacao, $this->aprovado, null, null, 1, $this->faltas_globalizadas, $this->ref_cod_instituicao, 1, $this->extra_curricular, null, $this->frequencia, $this->registro, $this->livro, $this->folha, $this->nm_curso, $this->historico_grade_curso_id, $this->aceleracao); $cadastrou = $obj->cadastra(); if( $cadastrou ) { @@ -317,7 +346,7 @@ class indice extends clsCadastro $this->mensagem = "Cadastro não realizado.
"; echo ""; return false; -/* } +/* } echo ""; $this->mensagem = "Cadastro não realizado.
"; return false; @@ -333,24 +362,28 @@ class indice extends clsCadastro $obj_permissoes = new clsPermissoes(); $obj_permissoes->permissao_cadastra( 578, $this->pessoa_logada, 7, "educar_historico_escolar_lst.php?ref_cod_aluno={$this->ref_cod_aluno}" ); -/* $this->historico_disciplinas = unserialize( urldecode( $this->historico_disciplinas ) ); +/* $this->historico_disciplinas = unserialize( urldecode( $this->historico_disciplinas ) ); if ($this->historico_disciplinas) { */ $this->carga_horaria = str_replace(".","",$this->carga_horaria); $this->carga_horaria = str_replace(",",".",$this->carga_horaria); + $this->frequencia = str_replace(".","",$this->frequencia); + $this->frequencia = str_replace(",",".",$this->frequencia); if ($this->extra_curricular == 'on') $this->extra_curricular = 1; else $this->extra_curricular = 0; - - if(!$this->cb_faltas_globalizadas) + if($this->cb_faltas_globalizadas != 'on') $this->faltas_globalizadas = 'NULL'; - $obj = new clsPmieducarHistoricoEscolar( $this->ref_cod_aluno, $this->sequencial, $this->pessoa_logada, null, $this->nm_serie, $this->ano, $this->carga_horaria, $this->dias_letivos, $this->escola, $this->escola_cidade, $this->escola_uf, $this->observacao, $this->aprovado, null, null, 1, $this->faltas_globalizadas, $this->ref_cod_instituicao, 1, $this->extra_curricular ); + $this->aceleracao = is_null($this->aceleracao) ? 0 : 1; + + $obj = new clsPmieducarHistoricoEscolar( $this->ref_cod_aluno, $this->sequencial, $this->pessoa_logada, null, $this->nm_serie, $this->ano, $this->carga_horaria, $this->dias_letivos, $this->escola, $this->escola_cidade, $this->escola_uf, $this->observacao, $this->aprovado, null, null, 1, $this->faltas_globalizadas, $this->ref_cod_instituicao, 1, $this->extra_curricular, null, $this->frequencia, $this->registro, $this->livro, $this->folha, $this->nm_curso, $this->historico_grade_curso_id, $this->aceleracao); $editou = $obj->edita(); + if( $editou ) { //--------------EDITA DISCIPLINAS--------------// @@ -389,7 +422,7 @@ class indice extends clsCadastro $this->mensagem = "Edição não realizada.
"; echo ""; return false; -/* } +/* } echo ""; $this->mensagem = "Edição não realizada.
"; return false; @@ -427,6 +460,22 @@ class indice extends clsCadastro } } + +function getOpcoesGradeCurso(){ + + $db = new clsBanco(); + $sql = "select * from pmieducar.historico_grade_curso where ativo = 1"; + $db->Consulta($sql); + + $opcoes = array("" => "Selecione"); + while ($db->ProximoRegistro()){ + $record = $db->Tupla(); + $opcoes[$record['id']] = $record['descricao_etapa']; + } + + return $opcoes; + } + // cria uma extensao da classe base $pagina = new clsIndexBase(); // cria o conteudo @@ -435,54 +484,95 @@ $miolo = new indice(); $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); + ?> \ No newline at end of file + setAutoComplete(); + + // bind event + + var $addDisciplinaButton = $j('#btn_add_tab_add_1'); + + $addDisciplinaButton.click(function(){ + setAutoComplete(); + }); + + diff --git a/ieducar/intranet/educar_historico_escolar_det.php b/ieducar/intranet/educar_historico_escolar_det.php index 79252ca..81c2f59 100644 --- a/ieducar/intranet/educar_historico_escolar_det.php +++ b/ieducar/intranet/educar_historico_escolar_det.php @@ -68,6 +68,7 @@ class indice extends clsDetalhe var $origem; var $extra_curricular; var $ref_cod_matricula; + var $frequencia; function Gerar() { @@ -132,7 +133,7 @@ class indice extends clsDetalhe } if( $registro["nm_serie"] ) { - $this->addDetalhe( array( "Curso", "{$registro["nm_serie"]}") ); + $this->addDetalhe( array( "Srie", "{$registro["nm_serie"]}") ); } } else @@ -154,6 +155,12 @@ class indice extends clsDetalhe $this->addDetalhe( array( "Série", "{$registro["nm_serie"]}") ); } } + + if( $registro["nm_curso"] ) + { + $this->addDetalhe( array( "Curso", "{$registro["nm_curso"]}") ); + } + if( $registro["ano"] ) { $this->addDetalhe( array( "Ano", "{$registro["ano"]}") ); @@ -164,10 +171,17 @@ class indice extends clsDetalhe $this->addDetalhe( array( "Carga Horária", "{$registro["carga_horaria"]}") ); } + + $this->addDetalhe( array( "Faltas globalizadas", is_numeric($registro["faltas_globalizadas"]) ? 'Sim' : 'No')); + if( $registro["dias_letivos"] ) { $this->addDetalhe( array( "Dias Letivos", "{$registro["dias_letivos"]}") ); } + if( $registro["frequencia"] ) + { + $this->addDetalhe( array( "Frequncia", "{$registro["frequencia"]}") ); + } if( $registro["extra_curricular"] ) { $this->addDetalhe( array( "Extra-Curricular", "Sim") ); @@ -176,6 +190,15 @@ class indice extends clsDetalhe { $this->addDetalhe( array( "Extra-Curricular", "Não") ); } + + if( $registro["aceleracao"] ) + { + $this->addDetalhe( array( "Acelerao", "Sim") ); + } + else + { + $this->addDetalhe( array( "Acelerao", "Não") ); + } if( $registro["origem"] ) { $this->addDetalhe( array( "Origem", "Externo") ); @@ -209,6 +232,21 @@ class indice extends clsDetalhe $this->addDetalhe( array( "Situação", "{$registro["aprovado"]}") ); } + if( $registro["registro"] ) + { + $this->addDetalhe( array( "Registro (arquivo)", "{$registro["registro"]}") ); + } + + if( $registro["livro"] ) + { + $this->addDetalhe( array( "Livro", "{$registro["livro"]}") ); + } + + if( $registro["folha"] ) + { + $this->addDetalhe( array( "Folha", "{$registro["folha"]}") ); + } + $obj = new clsPmieducarHistoricoDisciplinas(); $obj->setOrderby("nm_disciplina ASC"); $lst = $obj->lista( null,$this->ref_cod_aluno,$this->sequencial ); @@ -240,9 +278,9 @@ class indice extends clsDetalhe {$valor["nm_disciplina"]} {$valor["nota"]}"; - if ($registro["faltas_globalizadas"] && !$prim_disciplina) + if (is_numeric($registro["faltas_globalizadas"]) && !$prim_disciplina) $tabela .= "{$registro["faltas_globalizadas"]}"; - else if ( !$registro["faltas_globalizadas"] ) + else if ( !is_numeric($registro["faltas_globalizadas"]) ) $tabela .= "{$valor["faltas"]}"; $tabela .= ""; @@ -280,4 +318,4 @@ $miolo = new indice(); $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/educar_historico_escolar_lst.php b/ieducar/intranet/educar_historico_escolar_lst.php index fd32d11..1df9e59 100644 --- a/ieducar/intranet/educar_historico_escolar_lst.php +++ b/ieducar/intranet/educar_historico_escolar_lst.php @@ -87,6 +87,7 @@ class indice extends clsListagem var $ref_cod_instituicao; var $ref_cod_escola; var $extra_curricular; + var $frequencia; function Gerar() { @@ -128,10 +129,12 @@ class indice extends clsListagem if (!$this->extra_curricular) $lista_busca[] = "Escola"; } + $lista_busca = array_merge($lista_busca, array('Curso', 'Srie', 'Registro', 'Livro', 'Folha')); + $this->addCabecalhos($lista_busca); $get_escola = true; - + include("include/pmieducar/educar_campo_lista.php"); // outros Filtros @@ -155,7 +158,7 @@ class indice extends clsListagem $this->offset = ( $_GET["pagina_{$this->nome}"] ) ? $_GET["pagina_{$this->nome}"]*$this->limite-$this->limite: 0; $obj_historico_escolar = new clsPmieducarHistoricoEscolar(); - $obj_historico_escolar->setOrderby( "ano ASC" ); + $obj_historico_escolar->setOrderby( "ano, sequencial ASC" ); $obj_historico_escolar->setLimite( $this->limite, $this->offset ); $lista = $obj_historico_escolar->lista( @@ -180,7 +183,8 @@ class indice extends clsListagem null, $this->ref_cod_instituicao, null, - $this->extra_curricular + $this->extra_curricular, + null ); $total = $obj_historico_escolar->_total; @@ -225,6 +229,13 @@ class indice extends clsListagem if (!$this->extra_curricular) $lista_busca[] = "{$registro["escola"]}"; } + + $lista_busca[] = $registro['nm_curso']; + $lista_busca[] = $registro['nm_serie']; + $lista_busca[] = $registro['registro']; + $lista_busca[] = $registro['livro']; + $lista_busca[] = $registro['folha']; + $this->addLinhas($lista_busca); } } @@ -249,4 +260,4 @@ $miolo = new indice(); $pagina->addForm( $miolo ); // gera o html $pagina->MakeAll(); -?> \ No newline at end of file +?> diff --git a/ieducar/intranet/include/pmieducar/clsPmieducarHistoricoEscolar.inc.php b/ieducar/intranet/include/pmieducar/clsPmieducarHistoricoEscolar.inc.php index 791dc1d..e1caacd 100644 --- a/ieducar/intranet/include/pmieducar/clsPmieducarHistoricoEscolar.inc.php +++ b/ieducar/intranet/include/pmieducar/clsPmieducarHistoricoEscolar.inc.php @@ -50,6 +50,7 @@ class clsPmieducarHistoricoEscolar var $data_exclusao; var $ativo; var $faltas_globalizadas; + var $frequencia; var $ref_cod_instituicao; var $nm_serie; @@ -121,13 +122,13 @@ class clsPmieducarHistoricoEscolar * * @return object */ - function clsPmieducarHistoricoEscolar( $ref_cod_aluno = null, $sequencial = null, $ref_usuario_exc = null, $ref_usuario_cad = null, $nm_serie = null, $ano = null, $carga_horaria = null, $dias_letivos = null, $escola = null, $escola_cidade = null, $escola_uf = null, $observacao = null, $aprovado = null, $data_cadastro = null, $data_exclusao = null, $ativo = null, $faltas_globalizadas = null, $ref_cod_instituicao = null, $origem = null, $extra_curricular = null, $ref_cod_matricula = null ) + function clsPmieducarHistoricoEscolar( $ref_cod_aluno = null, $sequencial = null, $ref_usuario_exc = null, $ref_usuario_cad = null, $nm_serie = null, $ano = null, $carga_horaria = null, $dias_letivos = null, $escola = null, $escola_cidade = null, $escola_uf = null, $observacao = null, $aprovado = null, $data_cadastro = null, $data_exclusao = null, $ativo = null, $faltas_globalizadas = null, $ref_cod_instituicao = null, $origem = null, $extra_curricular = null, $ref_cod_matricula = null, $frequencia = null, $registro = null, $livro = null, $folha = null, $nm_curso = null, $historico_grade_curso_id = null, $aceleracao = null ) { $db = new clsBanco(); $this->_schema = "pmieducar."; $this->_tabela = "{$this->_schema}historico_escolar"; - $this->_campos_lista = $this->_todos_campos = "ref_cod_aluno, sequencial, ref_usuario_exc, ref_usuario_cad, ano, carga_horaria, dias_letivos, escola, escola_cidade, escola_uf, observacao, aprovado, data_cadastro, data_exclusao, ativo, faltas_globalizadas, ref_cod_instituicao, nm_serie, origem, extra_curricular, ref_cod_matricula"; + $this->_campos_lista = $this->_todos_campos = "ref_cod_aluno, sequencial, ref_usuario_exc, ref_usuario_cad, ano, carga_horaria, dias_letivos, escola, escola_cidade, escola_uf, observacao, aprovado, data_cadastro, data_exclusao, ativo, faltas_globalizadas, ref_cod_instituicao, nm_serie, origem, extra_curricular, ref_cod_matricula, frequencia, registro, livro, folha, nm_curso, historico_grade_curso_id, aceleracao"; if( is_numeric( $ref_usuario_exc ) ) { @@ -334,7 +335,17 @@ class clsPmieducarHistoricoEscolar { $this->nm_serie = $nm_serie; } + if( is_numeric( $frequencia ) ) + { + $this->frequencia = $frequencia; + } + $this->registro = $registro; + $this->livro = $livro; + $this->folha = $folha; + $this->nm_curso = $nm_curso; + $this->historico_grade_curso_id = $historico_grade_curso_id; + $this->aceleracao = $aceleracao; } /** @@ -344,7 +355,7 @@ class clsPmieducarHistoricoEscolar */ function cadastra() { - if( is_numeric( $this->ref_cod_aluno ) && is_numeric( $this->ref_usuario_cad ) && is_string( $this->nm_serie ) && is_numeric( $this->ano ) && is_numeric( $this->carga_horaria ) && is_string( $this->escola ) && is_string( $this->escola_cidade ) && is_numeric( $this->aprovado ) && is_numeric( $this->ref_cod_instituicao ) ) + if( is_numeric( $this->ref_cod_aluno ) && is_numeric( $this->ref_usuario_cad ) && is_string( $this->nm_serie ) && is_numeric( $this->ano ) && is_numeric( $this->carga_horaria ) && is_string( $this->escola ) && is_string( $this->escola_cidade ) && is_numeric( $this->aprovado ) && is_numeric( $this->ref_cod_instituicao ) && is_numeric( $this->frequencia)) { $db = new clsBanco(); @@ -448,6 +459,54 @@ class clsPmieducarHistoricoEscolar $valores .= "{$gruda}'{$this->faltas_globalizadas}'"; $gruda = ", "; } + if( is_numeric( $this->frequencia ) ) + { + $campos .= "{$gruda}frequencia"; + $valores .= "{$gruda}'{$this->frequencia}'"; + $gruda = ", "; + } + + if( is_string( $this->registro )) + { + $campos .= "{$gruda}registro"; + $valores .= "{$gruda}'{$this->registro}'"; + $gruda = ", "; + } + + if( is_string( $this->livro )) + { + $campos .= "{$gruda}livro"; + $valores .= "{$gruda}'{$this->livro}'"; + $gruda = ", "; + } + + if( is_string( $this->folha )) + { + $campos .= "{$gruda}folha"; + $valores .= "{$gruda}'{$this->folha}'"; + $gruda = ", "; + } + + if( is_string( $this->nm_curso )) + { + $campos .= "{$gruda}nm_curso"; + $valores .= "{$gruda}'{$this->nm_curso}'"; + $gruda = ", "; + } + + if( is_numeric( $this->historico_grade_curso_id )) + { + $campos .= "{$gruda}historico_grade_curso_id"; + $valores .= "{$gruda}'{$this->historico_grade_curso_id}'"; + $gruda = ", "; + } + + if (is_numeric($aceleracao)) { + $campos .= "{$gruda}aceleracao"; + $valores .= "{$gruda}'{$this->aceleracao}'"; + $gruda = ", "; + } + $campos .= "{$gruda}data_cadastro"; $valores .= "{$gruda}NOW()"; $gruda = ", "; @@ -463,7 +522,6 @@ class clsPmieducarHistoricoEscolar } return false; } - /** * Edita os dados de um registro * @@ -564,6 +622,11 @@ class clsPmieducarHistoricoEscolar $set .= "{$gruda}ativo = '{$this->ativo}'"; $gruda = ", "; } + if( is_numeric( $this->frequencia ) ) + { + $set .= "{$gruda}frequencia = '{$this->frequencia}'"; + $gruda = ", "; + } if( is_numeric( $this->faltas_globalizadas ) ) { $set .= "{$gruda}faltas_globalizadas = '{$this->faltas_globalizadas}'"; @@ -575,6 +638,42 @@ class clsPmieducarHistoricoEscolar $gruda = ", "; } + if( is_string( $this->registro)) + { + $set .= "{$gruda}registro = '{$this->registro}'"; + $gruda = ", "; + } + + if( is_string( $this->livro)) + { + $set .= "{$gruda}livro = '{$this->livro}'"; + $gruda = ", "; + } + + if( is_string( $this->folha)) + { + $set .= "{$gruda}folha = '{$this->folha}'"; + $gruda = ", "; + } + + if( is_string( $this->nm_curso)) + { + $set .= "{$gruda}nm_curso = '{$this->nm_curso}'"; + $gruda = ", "; + } + + if( is_numeric( $this->historico_grade_curso_id)) + { + $set .= "{$gruda}historico_grade_curso_id = '{$this->historico_grade_curso_id}'"; + $gruda = ", "; + } + + if( is_numeric( $this->aceleracao)) + { + $set .= "{$gruda}aceleracao = '{$this->aceleracao}'"; + $gruda = ", "; + } + if( $set ) { $db->Consulta( "UPDATE {$this->_tabela} SET $set WHERE ref_cod_aluno = '{$this->ref_cod_aluno}' AND sequencial = '{$this->sequencial}'" ); @@ -589,7 +688,7 @@ class clsPmieducarHistoricoEscolar * * @return array */ - function lista( $int_ref_cod_aluno = null, $int_sequencial = null, $int_ref_usuario_exc = null, $int_ref_usuario_cad = null, $str_nm_serie = null, $int_ano = null, $int_carga_horaria = null, $int_dias_letivos = null, $str_escola = null, $str_escola_cidade = null, $str_escola_uf = null, $str_observacao = null, $int_aprovado = null, $date_data_cadastro_ini = null, $date_data_cadastro_fim = null, $date_data_exclusao_ini = null, $date_data_exclusao_fim = null, $int_ativo = null, $int_faltas_globalizadas = null, $int_ref_cod_instituicao = null, $int_origem = null, $int_extra_curricular = null, $int_ref_cod_matricula = null ) + function lista( $int_ref_cod_aluno = null, $int_sequencial = null, $int_ref_usuario_exc = null, $int_ref_usuario_cad = null, $str_nm_serie = null, $int_ano = null, $int_carga_horaria = null, $int_dias_letivos = null, $str_escola = null, $str_escola_cidade = null, $str_escola_uf = null, $str_observacao = null, $int_aprovado = null, $date_data_cadastro_ini = null, $date_data_cadastro_fim = null, $date_data_exclusao_ini = null, $date_data_exclusao_fim = null, $int_ativo = null, $int_faltas_globalizadas = null, $int_ref_cod_instituicao = null, $int_origem = null, $int_extra_curricular = null, $int_ref_cod_matricula = null, $int_frequencia = null ) { $sql = "SELECT {$this->_campos_lista} FROM {$this->_tabela}"; $filtros = ""; @@ -719,6 +818,11 @@ class clsPmieducarHistoricoEscolar $filtros .= "{$whereAnd} faltas_globalizadas = '{$int_faltas_globalizadas}'"; $whereAnd = " AND "; } + if( is_numeric( $int_frequencia ) ) + { + $filtros .= "{$whereAnd} frequencia = '{$int_frequencia}'"; + $whereAnd = " AND "; + } $db = new clsBanco(); $countCampos = count( explode( ",", $this->_campos_lista ) ); @@ -908,4 +1012,4 @@ class clsPmieducarHistoricoEscolar } } -?> \ No newline at end of file +?> diff --git a/ieducar/modules/HistoricoEscolar/Static/images/loading.gif b/ieducar/modules/HistoricoEscolar/Static/images/loading.gif new file mode 100644 index 0000000..2fd2bc4 Binary files /dev/null and b/ieducar/modules/HistoricoEscolar/Static/images/loading.gif differ diff --git a/ieducar/modules/HistoricoEscolar/Static/scripts/processamento.js b/ieducar/modules/HistoricoEscolar/Static/scripts/processamento.js new file mode 100644 index 0000000..20d7134 --- /dev/null +++ b/ieducar/modules/HistoricoEscolar/Static/scripts/processamento.js @@ -0,0 +1,647 @@ +(function($){ + + $(function(){ + var $formFilter = $('#formcadastro'); + var $submitButton = $('#botao_busca'); + var $resultTable = $('#form_resultado .tablelistagem').addClass('horizontal-expand'); + $resultTable.children().remove(); + + $('
').attr('id', 'first-bar-action') + .attr('class', 'bar-action hide-on-search') + .prependTo($resultTable.parent()); + + $('
').attr('id', 'second-bar-action') + .attr('class', 'bar-action hide-on-search') + .appendTo($resultTable.parent()); + + var $barActions = $('.bar-action').hide(); + + $('').appendTo($barActions); + var $selectAllButton = $barActions.find('input.selecionar'); + + $('').appendTo($barActions); + var $actionButton = $barActions.find('input.processar'); + + $('').appendTo($barActions); + var $destroyButton = $barActions.find('input.destroy'); + + var PageUrlBase = 'processamento'; + var ApiUrlBase = 'processamentoApi'; + + var $resourceOptionsTable = $('#resource-options'); + $resourceOptionsTable.find('tr:even').addClass('even'); + $resourceOptionsTable.hide().prependTo($formFilter.parent()); + + var $disciplinasManualTable = $('#disciplinas-manual'); + $('#new-disciplina-line').click(function(){ + var $lastDisplinaRow = $disciplinasManualTable.find('tr.disciplina:last'); + var $newRow = $lastDisplinaRow.clone().removeClass('notice').insertAfter($lastDisplinaRow); + var $fieldNome = $newRow.find('input.nome'); + resetAutoCompleteNomeDisciplinaEvent($fieldNome.val('')); + $fieldNome.focus(); + setRemoveDisciplinaLineEvent($newRow.find('.remove-disciplina-line')); + }); + + function resetAutoCompleteNomeDisciplinaEvent($element){ + var handleSelect = function(event, ui){ + $j(event.target).val(ui.item.label); + return false; + }; + + var search = function(request, response) { + var searchPath = '/module/Api/ComponenteCurricular?oper=get&resource=componente_curricular-search'; + var params = { query : request.term }; + + $j.get(searchPath, params, function(dataResponse) { + simpleSearch.handleSearch(dataResponse, response); + }); + }; + + $element.autocomplete({ + source : search, + select : handleSelect, + minLength : 1, + autoFocus : true + }); + } + + function setRemoveDisciplinaLineEvent($targetElement){ + $targetElement.click(function(event){ + event.preventDefault(); + if($disciplinasManualTable.find('tr.disciplina').length > 1) + $(this).closest('tr').remove(); + else + handleMessages([{type : 'notice', msg : 'Não é possivel remover a primeira linha.'}], $(this).closest('tr')); + }); + } + setRemoveDisciplinaLineEvent($('.remove-disciplina-line')); + + var $notasField = $resourceOptionsTable.find('#notas'); + $notasField.change(function(){ + var $targetElementId = '#notas-manual'; + + if ($notasField.val() == 'informar-manualmente') + $($targetElementId).show().removeAttr('disabled'); + else if($notasField.val() == 'AP') + $($targetElementId).show().removeAttr('disabled').val('AP'); + else + $($targetElementId).hide().attr('disabled', 'disabled'); + }); + + var changeStateFieldManual = function($containerElementId, $targetElementId){ + $targetElement = $($targetElementId); + + if ($($containerElementId).val() == 'informar-manualmente'){ + $targetElement.show().removeAttr('disabled').find('.change-state-with-parent').show().removeAttr('disabled'); + } + else{ + $targetElement.hide().attr('disabled', 'disabled').find('.change-state-with-parent').hide().attr('disabled', 'disabled'); + } + }; + + $resourceOptionsTable.find('#percentual-frequencia').change(function(){ + changeStateFieldManual('#percentual-frequencia', '#percentual-frequencia-manual'); + }); + + $resourceOptionsTable.find('#faltas').change(function(){ + changeStateFieldManual('#faltas', '#faltas-manual'); + }); + + $resourceOptionsTable.find('#disciplinas').change(function(){ + changeStateFieldManual('#disciplinas', '#disciplinas-manual'); + + /*chama .change para respectivos elementos esconderem / mostrar os campos que + dependam deles*/ + if ($(this).val() == 'informar-manualmente'){ + $('.disable-and-hide-wen-disciplinas-manual').hide().attr('disabled', 'disabled').change(); + $('#disciplinas-manual').find('input.nome').focus(); + } + else + $('.disable-and-hide-wen-disciplinas-manual').show().removeAttr('disabled').change(); + + }); + + $('.disable-on-search').attr('disabled', 'disabled'); + $('.hide-on-search').hide(); + + $('#ref_cod_curso').change(function(){ + $('.clear-on-change-curso').val(''); + }); + + var $navActions = $('

').attr('id', 'nav-actions'); + $navActions.prependTo($formFilter.parent()); + + var $tableSearchDetails = $('') + .attr('id', 'search-details') + .addClass('styled') + .addClass('horizontal-expand') + .addClass('center') + .hide() + .prependTo($formFilter.parent()); + + var $feedbackMessages = $('
').attr('id', 'feedback-messages').appendTo($formFilter.parent()); + + var $additionalFields = $j('#resource-options select, #resource-options input[type="text"]'); + fixupFieldsWidth($additionalFields); + + //url builders + var resourceUrlBuilder = { + buildUrl : function(urlBase, vars){ + + _vars = ''; + for(varName in vars){ + _vars += '&'+varName+'='+vars[varName]; + } + return urlBase + '?' + _vars; + } + }; + + + var deleteResourceUrlBuilder = { + buildUrl : function(urlBase, resourceName, additionalVars){ + + var vars = { + att : resourceName, + oper : 'delete', + instituicao_id : $('#ref_cod_instituicao').val(), + matricula_id : '' + }; + + return resourceUrlBuilder.buildUrl(urlBase, $.extend(vars, additionalVars)); + } + }; + + + var postResourceUrlBuilder = { + buildUrl : function(urlBase, resourceName, additionalVars){ + + var vars = { + att : resourceName, + oper : 'post', + instituicao_id : $('#ref_cod_instituicao').val(), + matricula_id : '' + }; + + return resourceUrlBuilder.buildUrl(urlBase, $.extend(vars, additionalVars)); + } + }; + + + var getResourceUrlBuilder = { + buildUrl : function(urlBase, resourceName, additionalVars){ + + var vars = { + att : resourceName, + oper : 'get', + instituicao_id : $('#ref_cod_instituicao').val(), + escola_id : $('#ref_cod_escola').val(), + curso_id : $('#ref_cod_curso').val(), + serie_id : $('#ref_cod_serie').val(), + turma_id : $('#ref_cod_turma').val(), + ano : $('#ano').val(), + etapa : $('#etapa').val() + }; + + return resourceUrlBuilder.buildUrl(urlBase, $.extend(vars, additionalVars)); + + } + }; + + + function changeResource($resourceElement, postFunction, deleteFunction){ + if ($.trim($resourceElement.val()) == '') + deleteFunction($resourceElement); + else + postFunction($resourceElement); + }; + + var changeResourceName = function(event){ + changeResource($(this), postFalta, deleteFalta); + }; + + + function postResource(options, errorCallback){ + $.ajax(options).error(errorCallback); + } + + + function updateFieldSituacao(linkToHistorico, matricula_id, situacao){ + if(situacao){ + var $fieldSituacao = $('#situacao-matricula-' + matricula_id); + var situacaoHistorico = safeUtf8Decode(situacao); + + $fieldSituacao.html(getLinkToHistorico(linkToHistorico, situacaoHistorico)); + $fieldSituacao.data('situacao_historico', situacaoHistorico); + } + } + + + //callback handlers + + //delete + function handleDelete(dataResponse){ + try{ + var $checkbox = $('matricula-' + dataResponse.matricula_id); + var $targetElement = $j('#matricula-'+dataResponse.matricula_id).closest('tr').first(); + handleMessages(dataResponse.msgs, $targetElement); + updateFieldSituacao(dataResponse.link_to_historico, dataResponse.matricula_id, dataResponse.situacao_historico); + } + catch(error){ + showNewSearchButton(); + handleMessages([{type : 'error', msg : 'Ocorreu um erro ao remover o recurso, por favor tente novamente, detalhes: ' + error}], ''); + + safeLog(dataResponse); + } + } + + + function handleErrorDeleteResource(response){ + handleMessages([{type : 'error', msg : 'Erro ao alterar recurso, detalhes:' + response.responseText}], ''); + safeLog(response); + } + + function handleErrorPost(response){ + handleMessages([{type : 'error', msg : 'Erro ao alterar recurso, detalhes:' + response.responseText}], ''); + safeLog(response); + } + + + function setTableSearchDetails(dataDetails){ + $('
'); + $('').addClass('even'); + + $('').appendTo($resultTable)); + } + else if (dataResponse.matriculas.length < 1) + { + $('').appendTo($resultTable)); + } + else + { + setTableSearchDetails(); + //set headers + var $linha = $(''); + $(''); + $('
').html(safeUtf8Decode('Processamento dos históricos')).appendTo($tableSearchDetails); + + //set headers table + var $linha = $('
').html('Ano').appendTo($linha); + $('').html('Escola').appendTo($linha); + $('').html('Curso').appendTo($linha); + $('').html('Serie').appendTo($linha); + $('').html('Turma').appendTo($linha); + $('').html('Matricula').appendTo($linha); + + $linha.appendTo($tableSearchDetails); + + var $linha = $('
').html($('#ano').val()).appendTo($linha); + + //field escola pode ser diferente de select caso usuario comum + var $htmlEscolaField = $('#ref_cod_escola').children("[selected='selected']").html() || + $j('#tr_nm_escola span:last').html(); + $('').html(safeToUpperCase($htmlEscolaField)).appendTo($linha); + + $('').html(safeToUpperCase($('#ref_cod_curso').children("[value!=''][selected='selected']").html() || 'Todos')).appendTo($linha); + $('').html(safeToUpperCase($('#ref_cod_serie').children("[value!=''][selected='selected']").html() || 'Todas')).appendTo($linha); + $('').html(safeToUpperCase($('#ref_cod_turma').children("[value!=''][selected='selected']").html() || 'Todas')).appendTo($linha); + $('').html(safeToUpperCase($('#ref_cod_matricula').children("[value!=''][selected='selected']").html() || 'Todas')).appendTo($linha); + + $linha.appendTo($tableSearchDetails); + $tableSearchDetails.show(); + + $tableSearchDetails.data('details', dataDetails); + } + + //exibe formulário nova consulta + function showSearchForm(event){ + $navActions.html(''); + $tableSearchDetails.children().remove(); + $resultTable.children().fadeOut('fast').remove(); + $formFilter.fadeIn('fast', function(){ + $(this).show() + }); + $('.disable-on-search').attr('disabled', 'disabled'); + $('.hide-on-search').hide(); + $('.disable-on-apply-changes').removeAttr('disabled'); + $actionButton.val('Processar'); + } + + + function showNewSearchButton(){ + $navActions.html( + $("Nova consulta") + .bind('click', showSearchForm) + .attr('style', 'text-decoration: underline') + ); + $('.disable-on-search').removeAttr('disabled'); + $('.hide-on-search').show(); + } + + function getLinkToHistorico(link, text){ + if (link) + return $(''+text+''); + else + return text; + } + + + function handleMatriculasSearch(dataResponse){ + + showNewSearchButton(); + + try{ + handleMessages(dataResponse.msgs); + + if(! $.isArray(dataResponse.matriculas)) + { + $('') + .html('As matriculas não poderam ser recuperadas, verifique as mensagens de erro ou tente recarregar.') + .addClass('center') + .appendTo($('
') + .html('Sem matriculas em andamento nesta turma.') + .addClass('center') + .appendTo($('
').html('Selecionar').appendTo($linha); + $('').html('Curso').appendTo($linha); + $('').html(safeUtf8Decode('Série')).appendTo($linha); + $('').html('Turma').appendTo($linha); + $('').html('Matricula').appendTo($linha); + $('').html('Aluno').appendTo($linha); + $('').html('Situação').appendTo($linha); + $linha.appendTo($resultTable); + + //set rows + $.each(dataResponse.matriculas, function(index, value){ + + var $checkbox = $('') + .attr('type', 'checkbox') + .attr('name', 'processar-matricula') + .attr('value', 'sim') + .attr('id', 'matricula-' + value.matricula_id) + .attr('class', 'matricula disable-on-apply-changes') + .data('matricula_id', value.matricula_id); + + var $linha = $('
').html($checkbox).addClass('center').appendTo($linha); + $('').html(value.nome_curso).addClass('center').appendTo($linha); + $('').html(safeUtf8Decode(value.nome_serie)).addClass('center').appendTo($linha); + $('').html(safeUtf8Decode(value.nome_turma)).addClass('center').appendTo($linha); + $('').html(value.matricula_id).addClass('center').appendTo($linha); + $('').html(value.aluno_id + " - " + safeToUpperCase(value.nome)).appendTo($linha); + + var situacaoHistorico = safeUtf8Decode(value.situacao_historico); + var $htmlSituacao = getLinkToHistorico(value.link_to_historico, situacaoHistorico); + $('').html($htmlSituacao).data('situacao_historico', situacaoHistorico).attr('id', 'situacao-matricula-' + value.matricula_id).addClass('situacao').addClass('center').appendTo($linha); + + $linha.fadeIn('slow').appendTo($resultTable); + });//fim each matriculas + + $resultTable.find('tr:even').addClass('even'); + $resultTable.addClass('styled').find('checkbox:first').focus(); + + var $observacaoField = $('#observacao'); + if($.trim($observacaoField.val()) == '' || ($observacaoField.val() == $observacaoField.data('old_value'))){ + $observacaoField.val(dataResponse.observacao_padrao); + $observacaoField.data('old_value', dataResponse.observacao_padrao); + } + } + } + catch(error){ + showNewSearchButton(); + + handleMessages([{type : 'error', msg : 'Ocorreu um erro ao exibir as matriculas, por favor tente novamente, detalhes: ' + error}], ''); + + safeLog(dataResponse); + } + } + + function handleErrorMatriculasSearch(response){ + showNewSearchButton(); + + handleMessages([{type : 'error', msg : 'Ocorreu um erro ao carregar as matriculas, por favor tente novamente, detalhes:' + response.responseText}], ''); + + safeLog(response); + } + + //change submit button + var onClickSearchEvent = function(event){ + if (validatesPresenseOfValueInRequiredFields()) + { + matriculasSearchOptions.url = getResourceUrlBuilder.buildUrl(ApiUrlBase, 'matriculas', {matricula_id : $('#ref_cod_matricula').val()}); + + if (window.history && window.history.pushState) + window.history.pushState('', '', getResourceUrlBuilder.buildUrl(PageUrlBase, 'matriculas')); + + $resultTable.children().fadeOut('fast').remove(); + + $formFilter.submit(); + $formFilter.fadeOut('fast'); + $navActions + .html('Aguarde, carregando...') + .attr('style', 'text-align:center;') + .unbind('click'); + + resetAutoCompleteNomeDisciplinaEvent($disciplinasManualTable.find('input.nome')); + } + }; + $submitButton.val('Carregar'); + $submitButton.attr('onclick', ''); + $submitButton.click(onClickSearchEvent); + + //config form search + var matriculasSearchOptions = { + url : '', + dataType : 'json', + success : handleMatriculasSearch, + error : handleErrorMatriculasSearch + }; + + $formFilter.ajaxForm(matriculasSearchOptions); + + var onClickActionEvent = function(event){ + + var $firstChecked = $('input.matricula:checked:first'); + + if ($firstChecked.length < 1) + handleMessages([{type : 'error', msg : 'Selecione alguma matrícula.'}], $actionButton, true); + else { + var additionalFields = [ + $('#percentual-frequencia-manual').get(0), + $('#notas-manual').get(0), + $('#faltas-manual').get(0) + ]; + + $.each($('#disciplinas-manual').find('.obrigatorio'), function(index, requiredElement){ + additionalFields.push(requiredElement); + }); + + if (validatesPresenseOfValueInRequiredFields(additionalFields)){ + + var isValid = validatesIfValueIsNumeric($('#dias-letivos').val(), 'dias-letivos'); + + if (isValid && $('#percentual-frequencia').val() != 'buscar-boletim') + isValid = validatesIfNumericValueIsInRange($('#percentual-frequencia-manual').val(), '#percentual-frequencia-manual', 0, 100); + + var $faltas = $('#faltas'); + if (isValid && $faltas.val() != 'buscar-boletim' && $faltas.is(':visible')) + isValid = validatesIfNumericValueIsInRange($('#faltas-manual').val(), '#faltas-manual', 0, 999); + + if (isValid && $('#disciplinas').val() != 'buscar-boletim'){ + $.each($('#disciplinas-manual').find('.falta'), function(index, field){ + $field = $(field); + isValid = $.trim($field.val()) == '' || validatesIfNumericValueIsInRange($field.val(), $field, 0, 999); + }); + } + + if (isValid){ + $('.disable-on-apply-changes').attr('disabled', 'disabled'); + $actionButton.val('Aguarde processando...'); + postProcessamento($firstChecked); + } + } + } + }; + + function getDisciplinasManuais(){ + var disciplinas = []; + $.each($('#disciplinas-manual').find('.disciplina'), function(index, disciplina){ + var $disciplina = $(disciplina); + + disciplinas.push({ + nome : $disciplina.find('.nome').val(), + nota : $disciplina.find('.nota').val(), + falta : $disciplina.find('.falta').val() + }); + }); + return disciplinas; + } + + function postProcessamento($resourceElement){ + + var percentualFrequencia = $('#percentual-frequencia').val() == 'buscar-boletim' ? 'buscar-boletim' : $('#percentual-frequencia-manual').val(); + var faltas = $('#faltas').val() == 'buscar-boletim' ? 'buscar-boletim' : $('#faltas-manual').val(); + var notas = $('#notas').val() == 'buscar-boletim' ? 'buscar-boletim' : $('#notas-manual').val(); + var disciplinas = $('#disciplinas').val() == 'buscar-boletim' ? 'buscar-boletim' : getDisciplinasManuais(); + + var options = { + url : postResourceUrlBuilder.buildUrl(ApiUrlBase, 'processamento', { + matricula_id : $resourceElement.data('matricula_id') + }), + dataType : 'json', + data : { + dias_letivos : $('#dias-letivos').val(), + situacao : $('#situacao').val(), + extra_curricular : $('#extra-curricular').is(':checked') ? 1 : 0, + grade_curso_id : $('#grade-curso').val(), + percentual_frequencia : percentualFrequencia, + notas : notas, + faltas : faltas, + observacao : $('#observacao').val(), + registro : $('#registro').val(), + livro : $('#livro').val(), + folha : $('#folha').val(), + disciplinas : disciplinas + }, + success : function(dataResponse){ + afterChangeResource($resourceElement, postProcessamento); + handlePostProcessamento(dataResponse); + } + }; + + beforeChangeResource($resourceElement); + postResource(options, handleErrorPost); + } + + function deleteHistorico($resourceElement){ + var options = { + url : deleteResourceUrlBuilder.buildUrl(ApiUrlBase, 'historico', { + matricula_id : $resourceElement.data('matricula_id') + }), + dataType : 'json', + data : { + }, + success : function(dataResponse){ + afterChangeResource($resourceElement, deleteHistorico); + handlePostProcessamento(dataResponse); + } + }; + + beforeChangeResource($resourceElement); + deleteResource(options, handleErrorDeleteResource); + } + + function deleteResource(options, errorCallback){ + $.ajax(options).error(errorCallback); + } + + function beforeChangeResource($resourceElement){ + if ($resourceElement.siblings('img').length < 1); + $('loading...').appendTo($resourceElement.parent()); + } + + function handlePostProcessamento(dataResponse){ + try{ + var $checkbox = $('matricula-' + dataResponse.matricula_id); + var $targetElement = $j('#matricula-'+dataResponse.matricula_id).closest('tr').first(); + handleMessages(dataResponse.msgs, $targetElement); + updateFieldSituacao(dataResponse.link_to_historico, dataResponse.matricula_id, dataResponse.situacao_historico); + } + catch(error){ + showNewSearchButton(); + handleMessages([{type : 'error', msg : 'Ocorreu um erro ao enviar o processamento, por favor tente novamente, detalhes: ' + error}], ''); + + safeLog(dataResponse); + } + } + + + function afterChangeResource($resourceElement, callbackContinueNextChange){ + $resourceElement.siblings('img').remove(); + $resourceElement.attr('checked', false); + + //verifica se chegou na ultima matricula e ativa os elements desativados + var $firstChecked = $('input.matricula:checked:first'); + if ($firstChecked.length < 1){ + $('.disable-on-apply-changes').removeAttr('disabled'); + $actionButton.val('Processar'); + window.setTimeout(function(){alert(safeUtf8Decode('Operação finalizada.'));}, 1); + } + else if (typeof(callbackContinueNextChange) == 'function') + callbackContinueNextChange($firstChecked); + } + + var onClickSelectAllEvent = function(event){ + var $checked = $('input.matricula:checked'); + var $unchecked = $('input.matricula:not(:checked)'); + + $checked.attr('checked', false); + $unchecked.attr('checked', true); + }; + + var onClickDestroyEvent = function(event){ + + var $firstChecked = $('input.matricula:checked:first'); + + if ($firstChecked.length < 1) + handleMessages([{type : 'error', msg : 'Selecione alguma matrícula.'}], $actionButton, true); + else{ + + if (confirm("Confirma remoção dos históricos selecionados?")){ + + $.each($('input.matricula:checked').closest('tr').find('.situacao'), function(indice, fieldSituacao){ + var $fieldSituacao = $(fieldSituacao); + if ($fieldSituacao.data('situacao_historico') != 'Processado') + $fieldSituacao.closest('tr').find('input.matricula').attr('checked', false); + }); + + $('.disable-on-apply-changes').attr('disabled', 'disabled'); + $actionButton.val('Aguarde removendo...'); + deleteHistorico($firstChecked); + } + } + }; + + $actionButton.click(onClickActionEvent); + $selectAllButton.click(onClickSelectAllEvent); + $destroyButton.click(onClickDestroyEvent) + + }); +})(jQuery); diff --git a/ieducar/modules/HistoricoEscolar/Static/styles/processamento.css b/ieducar/modules/HistoricoEscolar/Static/styles/processamento.css new file mode 100644 index 0000000..fe27541 --- /dev/null +++ b/ieducar/modules/HistoricoEscolar/Static/styles/processamento.css @@ -0,0 +1,8 @@ +#disciplinas-manual { + border: 1px solid #fff; +} + +#disciplinas-manual th, #disciplinas-manual td { + border: 0px; + padding: 2px; +} diff --git a/ieducar/modules/HistoricoEscolar/Views/ProcessamentoApiController.php b/ieducar/modules/HistoricoEscolar/Views/ProcessamentoApiController.php new file mode 100644 index 0000000..afc1846 --- /dev/null +++ b/ieducar/modules/HistoricoEscolar/Views/ProcessamentoApiController.php @@ -0,0 +1,1045 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Avaliacao + * @subpackage Modules + * @since Arquivo disponível desde a versão ? + * @version $Id$ + */ + +require_once 'Core/Controller/Page/EditController.php'; +require_once 'Avaliacao/Model/NotaComponenteDataMapper.php'; +require_once 'Avaliacao/Service/Boletim.php'; +require_once 'App/Model/MatriculaSituacao.php'; +require_once 'RegraAvaliacao/Model/TipoPresenca.php'; +require_once 'RegraAvaliacao/Model/TipoParecerDescritivo.php'; + +require_once 'include/pmieducar/clsPmieducarMatricula.inc.php'; +require_once 'include/pmieducar/clsPmieducarHistoricoEscolar.inc.php'; +require_once 'include/pmieducar/clsPmieducarHistoricoDisciplinas.inc.php'; + +require_once 'lib/Portabilis/String/Utils.php'; +require_once 'Portabilis/Utils/Database.php'; + + +// TODO migrar classe novo padrao api controller +class ProcessamentoApiController extends Core_Controller_Page_EditController +{ + protected $_dataMapper = 'Avaliacao_Model_NotaComponenteDataMapper'; + protected $_processoAp = 999613; + protected $_nivelAcessoOption = App_Model_NivelAcesso::SOMENTE_ESCOLA; + protected $_saveOption = FALSE; + protected $_deleteOption = FALSE; + protected $_titulo = ''; + + + protected function validatesPresenceOf(&$value, $name, $raiseExceptionOnEmpty = false, $msg = '', $addMsgOnEmpty = true){ + if (! isset($value) || (empty($value) && !is_numeric($value))){ + if ($addMsgOnEmpty) + { + $msg = empty($msg) ? "É necessário receber uma variavel '$name'" : $msg; + $this->appendMsg($msg); + } + + if ($raiseExceptionOnEmpty) + throw new Exception($msg); + + return false; + } + return true; + } + + protected function validatesValueIsNumeric(&$value, $name, $raiseExceptionOnError = false, $msg = '', $addMsgOnError = true){ + if (! is_numeric($value)){ + if ($addMsgOnError) + { + $msg = empty($msg) ? "O valor recebido para variavel '$name' deve ser numerico" : $msg; + $this->appendMsg($msg); + } + + if ($raiseExceptionOnError) + throw new Exception($msg); + + return false; + } + return true; + } + + protected function validatesValueIsArray(&$value, $name, $raiseExceptionOnError = false, $msg = '', $addMsgOnError = true){ + + if (! is_array($value)){ + if ($addMsgOnError) + { + $msg = empty($msg) ? "Deve ser recebido uma lista de '$name'" : $msg; + $this->appendMsg($msg); + } + + if ($raiseExceptionOnError) + throw new Exception($msg); + + return false; + } + return true; + } + + protected function validatesValueInSetOf(&$value, $setExpectedValues, $name, $raiseExceptionOnError = false, $msg = ''){ + if (! in_array($value, $setExpectedValues)){ + $msg = empty($msg) ? "Valor recebido na variavel '$name' é invalido" : $msg; + $this->appendMsg($msg); + + if ($raiseExceptionOnError) + throw new Exception($msg); + + return false; + } + return true; + } + + + protected function requiresLogin($raiseExceptionOnEmpty){ + return $this->validatesPresenceOf($this->getSession()->id_pessoa, '', $raiseExceptionOnEmpty, 'Usuário deve estar logado'); + } + + protected function validatesPresenceOfInstituicaoId($raiseExceptionOnEmpty){ + return $this->validatesPresenceOf($this->getRequest()->instituicao_id, 'instituicao_id', $raiseExceptionOnEmpty); + } + + protected function validatesPresenceOfEscolaId($raiseExceptionOnEmpty){ + return $this->validatesPresenceOf($this->getRequest()->escola_id, 'escola_id', $raiseExceptionOnEmpty); + } + + protected function validatesPresenceOfCursoId($raiseExceptionOnEmpty){ + return $this->validatesPresenceOf($this->getRequest()->curso_id, 'curso_id', $raiseExceptionOnEmpty); + } + + protected function validatesPresenceOfSerieId($raiseExceptionOnEmpty, $addMsgOnEmpty = true){ + return $this->validatesPresenceOf($this->getRequest()->serie_id, 'serie_id', $raiseExceptionOnEmpty, '', $addMsgOnEmpty); + } + + protected function validatesPresenceOfAno($raiseExceptionOnEmpty){ + return $this->validatesPresenceOf($this->getRequest()->ano, 'ano', $raiseExceptionOnEmpty); + } + + protected function validatesPresenceOfMatriculaId($raiseExceptionOnEmpty){ + return $this->validatesPresenceOf($this->getRequest()->matricula_id, 'matricula_id', $raiseExceptionOnEmpty); + } + + protected function validatesValueIsInBd($fieldName, &$value, $schemaName, $tableName, $raiseExceptionOnError = true){ + $sql = "select 1 from $schemaName.$tableName where $fieldName = $1"; + $isValid = Portabilis_Utils_DataBase::selectField($sql, $value) == '1'; + + if (! $isValid){ + $msg = "O valor informado {$value} para $tableName, não esta presente no banco de dados."; + $this->appendMsg($msg); + + if ($raiseExceptionOnError) + throw new Exception($msg); + + return false; + } + + return true; + } + + protected function validatesPresenceAndValueInDbOfGradeCursoId($raiseExceptionOnError){ + return $this->validatesPresenceOf($this->getRequest()->grade_curso_id, 'grade_curso_id', $raiseExceptionOnError) && + $this->validatesValueIsInBd('id', $this->getRequest()->grade_curso_id, 'pmieducar', 'historico_grade_curso', $raiseExceptionOnError); + } + + protected function validatesPresenceOfDiasLetivos($raiseExceptionOnEmpty){ + return $this->validatesPresenceOf($this->getRequest()->dias_letivos, 'dias_letivos', $raiseExceptionOnEmpty); + } + + protected function validatesValueOfAttValueIsNumeric($raiseExceptionOnError){ + return $this->validatesValueIsNumeric($this->getRequest()->att_value, 'att_value', $raiseExceptionOnError); + } + + protected function validatesPresenceOfAttValue($raiseExceptionOnEmpty){ + return $this->validatesPresenceOf($this->getRequest()->att_value, 'att_value', $raiseExceptionOnEmpty); + } + + + protected function validatesPresenceAndValueInSetOfAtt($raiseExceptionOnError){ + $result = $this->validatesPresenceOf($this->getRequest()->att, 'att', $raiseExceptionOnError); + + if ($result){ + $expectedAtts = array('matriculas', 'processamento', 'historico'); + $result = $this->validatesValueInSetOf($this->getRequest()->att, $expectedAtts, 'att', $raiseExceptionOnError); + } + return $result; + } + + + protected function validatesPresenceAndValueInSetOfOper($raiseExceptionOnError){ + $result = $this->validatesPresenceOf($this->getRequest()->oper, 'oper', $raiseExceptionOnError); + + if ($result){ + $expectedOpers = array('post', 'get', 'delete'); + $result = $this->validatesValueInSetOf($this->getRequest()->oper, $expectedOpers, 'oper', $raiseExceptionOnError); + } + return $result; + } + + + protected function validatesPresenceAndValueInSetOfExtraCurricular($raiseExceptionOnError){ + $result = $this->validatesPresenceOf($this->getRequest()->extra_curricular, 'extra_curricular', $raiseExceptionOnError); + + if ($result){ + $expectedOpers = array(0, 1); + $result = $this->validatesValueInSetOf($this->getRequest()->extra_curricular, $expectedOpers, 'extra_curricular', $raiseExceptionOnError); + } + return $result; + } + + protected function validatesPresenceAndValueOfPercentualFrequencia($raiseExceptionOnError){ + $name = 'percentual_frequencia'; + $isValid = $this->validatesPresenceOf($this->getRequest()->percentual_frequencia, $name, $raiseExceptionOnError); + + if ($isValid && $this->getRequest()->percentual_frequencia != 'buscar-boletim') + $isValid = $this->validatesValueIsNumeric($this->getRequest()->percentual_frequencia, $name, $raiseExceptionOnError); + + return $isValid; + } + + protected function validatesPresenceOfNotas($raiseExceptionOnError){ + return $this->validatesPresenceOf($this->getRequest()->notas, 'notas', $raiseExceptionOnError); + } + + protected function validatesPresenceAndValueOfFaltas($raiseExceptionOnError){ + $name = 'faltas'; + $isValid = $this->validatesPresenceOf($this->getRequest()->faltas, $name, $raiseExceptionOnError); + + if ($isValid && $this->getRequest()->faltas != 'buscar-boletim') + $isValid = $this->validatesValueIsNumeric($this->getRequest()->faltas, $name, $raiseExceptionOnError); + + return $isValid; + } + + + protected function validatesPresenceAndValueOfDisciplinas($raiseExceptionOnError){ + $name = 'disciplinas'; + $isValid = $this->validatesPresenceOf($this->getRequest()->disciplinas, $name, $raiseExceptionOnError); + + if ($isValid && $this->getRequest()->disciplinas != 'buscar-boletim'){ + $isValid = $this->validatesValueIsArray($this->getRequest()->disciplinas, 'disciplinas', $raiseExceptionOnError); + if ($isValid){ + foreach($this->getRequest()->disciplinas as $disciplina){ + $isValid = $this->validatesPresenceOf($disciplina['nome'], 'nome (para todas disciplinas)', $raiseExceptionOnError); + + if ($isValid && isset($disciplina['falta']) && trim($disciplina['falta']) != '') + $isValid = $this->validatesValueIsNumeric($disciplina['falta'], 'falta (para todas disciplinas)', $raiseExceptionOnError); + } + } + } + return $isValid; + } + + protected function validatesPresenceAndValueInSetOfSituacao($raiseExceptionOnError){ + $name = 'situacao'; + $isValid = $this->validatesPresenceOf($this->getRequest()->situacao, $name, $raiseExceptionOnError); + + if ($isValid){ + $expectedOpers = array('buscar-matricula', 'aprovado', 'reprovado', 'em-andamento', 'transferido'); + $isValid = $this->validatesValueInSetOf($this->getRequest()->situacao, $expectedOpers, $name, $raiseExceptionOnError); + } + + return $isValid; + } + + + /* esta funcao só pode ser chamada após setar $this->getService() */ + protected function validatesPresenceOfComponenteCurricularId($raiseExceptionOnEmpty, $addMsgOnEmpty = true) + { + return $this->validatesPresenceOf($this->getRequest()->componente_curricular_id, 'componente_curricular_id', $raiseExceptionOnEmpty, $msg = '', $addMsgOnEmpty); + } + + + protected function canAcceptRequest() + { + try { + $this->requiresLogin(true); + $this->validatesPresenceAndValueInSetOfAtt(true); + $this->validatesPresenceAndValueInSetOfOper(true); + } + catch (Exception $e){ + return false; + } + return true; + } + + + protected function canGetMatriculas(){ + return $this->validatesPresenceOfAno(false) && + $this->validatesPresenceOfInstituicaoId(false) && + $this->validatesPresenceOfEscolaId(false); + } + + + protected function canPostProcessamento(){ + $canPost = $this->validatesPresenceOfInstituicaoId(false) && + $this->validatesPresenceOfMatriculaId(false) && + $this->validatesPresenceOfDiasLetivos(false) && + $this->validatesPresenceAndValueInSetOfSituacao(false) && + $this->validatesPresenceAndValueInSetOfExtraCurricular(false) && + $this->validatesPresenceAndValueInDbOfGradeCursoId(false) && + $this->validatesPresenceAndValueOfPercentualFrequencia(false) && + $this->validatesPresenceAndValueOfDisciplinas(false); + + if ($canPost && $this->getRequest()->disciplinas == 'buscar-boletim') + $canPost = $this->validatesPresenceOfNotas(false) && $this->validatesPresenceAndValueOfFaltas(false); + + if($canPost){ + $sql = "select 1 from pmieducar.matricula where cod_matricula = $1 and ativo = 1"; + + if(! Portabilis_Utils_Database::selectField($sql, $this->getRequest()->matricula_id)){ + $this->appendMsg("A matricula {$this->getRequest()->matricula_id} não existe ou esta desativa", 'error'); + $canPost = false; + } + } + + if($canPost){ + $sql = "select 1 from pmieducar.matricula_turma where ref_cod_matricula = $1 and ativo = 1 limit 1"; + + if(! Portabilis_Utils_Database::selectField($sql, $this->getRequest()->matricula_id)){ + $this->appendMsg("A matricula {$this->getRequest()->matricula_id} não está enturmada.", 'error'); + $canPost = false; + } + } + + return $canPost && $this->setService(); + } + + + protected function canDeleteHistorico(){ + return $this->validatesPresenceOfInstituicaoId(false) && + $this->validatesPresenceOfMatriculaId(false); + } + + + protected function deleteHistorico(){ + if ($this->canDeleteHistorico()){ + + $matriculaId = $this->getRequest()->matricula_id; + $alunoId = $this->getAlunoIdByMatriculaId($matriculaId); + $dadosMatricula = $this->getdadosMatricula($matriculaId); + $ano = $dadosMatricula['ano']; + + if ($this->existsHistorico($alunoId, $ano, $matriculaId)){ + $sequencial = $this->getSequencial($alunoId, $ano, $matriculaId); + $this->deleteHistoricoDisplinas($alunoId, $sequencial); + + $historicoEscolar = new clsPmieducarHistoricoEscolar( + $ref_cod_aluno = $alunoId, + $sequencial, + $ref_usuario_exc = $this->getSession()->id_pessoa, + $ref_usuario_cad = null, + #TODO nm_curso + $nm_serie = null, + $ano = $ano, + $carga_horaria = null, + $dias_letivos = null, + $escola = null, + $escola_cidade = null, + $escola_uf = null, + $observacao = null, + $aprovado = null, + $data_cadastro = null, + $data_exclusao = date('Y-m-d'), + $ativo = 0 + ); + $historicoEscolar->edita(); + + $this->appendMsg('Histórico escolar removido com sucesso', 'success'); + } + else + $this->appendMsg("Histórico matricula $matriculaId inexistente ou já removido", 'notice'); + + $situacaoHistorico = $this->getSituacaoHistorico($alunoId, $ano, $matriculaId, $reload = true); + + $this->appendResponse('situacao_historico', $situacaoHistorico); + $this->appendResponse('link_to_historico', ''); + } + } + + + protected function deleteHistoricoDisplinas($alunoId, $historicoSequencial){ + $historicoDisciplinas = new clsPmieducarHistoricoDisciplinas(); + $historicoDisciplinas->excluirTodos($alunoId, $historicoSequencial); + } + + + protected function getdadosEscola($escolaId){ + + $sql = "select + + (select pes.nome from pmieducar.escola esc, cadastro.pessoa pes + where esc.ref_cod_instituicao = $1 and esc.cod_escola = $2 + and pes.idpes = esc.ref_idpes) as nome, + + (select coalesce((select coalesce((select municipio.nome from public.municipio, + cadastro.endereco_pessoa, cadastro.juridica, public.bairro, pmieducar.escola + where endereco_pessoa.idbai = bairro.idbai and bairro.idmun = municipio.idmun and + juridica.idpes = endereco_pessoa.idpes and juridica.idpes = escola.ref_idpes and + escola.cod_escola = $2),(select endereco_externo.cidade from cadastro.endereco_externo, + pmieducar.escola where endereco_externo.idpes = escola.ref_idpes and escola.cod_escola = $2))), + (select municipio from pmieducar.escola_complemento where ref_cod_escola = $2))) as cidade, + + (select coalesce((select coalesce((select municipio.sigla_uf from public.municipio, + cadastro.endereco_pessoa, cadastro.juridica, public.bairro, pmieducar.escola + where endereco_pessoa.idbai = bairro.idbai and bairro.idmun = municipio.idmun and + juridica.idpes = endereco_pessoa.idpes and juridica.idpes = escola.ref_idpes and + escola.cod_escola = $2),(select endereco_externo.sigla_uf from cadastro.endereco_externo, + pmieducar.escola where endereco_externo.idpes = escola.ref_idpes and escola.cod_escola = $2))), + (select inst.ref_sigla_uf from pmieducar.instituicao inst where inst.cod_instituicao = $1))) as uf"; + + $params = array('params' => array($this->getrequest()->instituicao_id, $escolaId), 'return_only' => 'first-line'); + return Portabilis_Utils_Database::fetchPreparedQuery($sql, $params); + } + + + protected function getNextHistoricoSequencial($alunoId){ + //A consulta leva em consideração historicos inativos pois o sequencial é chave composta com ref_cod_aluno id + $sql = "select coalesce(max(sequencial), 0) + 1 from pmieducar.historico_escolar where ref_cod_aluno = $1"; + + return Portabilis_Utils_Database::selectField($sql, $alunoId); + } + + + protected function getNextHistoricoDisciplinasSequencial($historicoSequencial, $alunoId){ + $sql = "select coalesce(max(sequencial), 0) + 1 from pmieducar.historico_disciplinas where + ref_sequencial = $1 and ref_ref_cod_aluno = $2"; + + return Portabilis_Utils_Database::selectField($sql, array($historicoSequencial, $alunoId)); + } + + + protected function getSituacaoMatricula($matriculaId = null) { + if (! is_null($matriculaId)) { + + if (! is_null($this->getService(false, false))) + $situacao = $this->getService()->getOption('aprovado'); + else { + $sql = "select aprovado from pmieducar.matricula where cod_matricula = $1"; + $situacao = Portabilis_Utils_Database::selectField($sql, $matriculaId); + } + + } + + else if($this->getRequest()->situacao == 'buscar-matricula') + $situacao = $this->getService()->getOption('aprovado'); + + else { + $situacoes = array( + 'aprovado' => App_Model_MatriculaSituacao::APROVADO, + 'reprovado' => App_Model_MatriculaSituacao::REPROVADO, + 'em-andamento' => App_Model_MatriculaSituacao::EM_ANDAMENTO, + 'transferido' => App_Model_MatriculaSituacao::TRANSFERIDO + ); + + $situacao = $situacoes[$this->getRequest()->situacao]; + } + + return $situacao; + + } + + + protected function getPercentualFrequencia(){ + if($this->getRequest()->percentual_frequencia == 'buscar-boletim') + $percentual = round($this->getService()->getSituacaoFaltas()->porcentagemPresenca, 2); + else + $percentual = $this->getRequest()->percentual_frequencia; + + return str_replace(',', '.', $percentual); + } + + + protected function getFaltaGlobalizada($defaultValue=null){ + if ($this->getService()->getRegra()->get('tipoPresenca') == RegraAvaliacao_Model_TipoPresenca::GERAL) + return $this->getFalta(); + else + return $defaultValue; + } + + protected function postProcessamento() { + + if ($this->canPostProcessamento()){ + $matriculaId = $this->getRequest()->matricula_id; + + try { + $alunoId = $this->getAlunoIdByMatriculaId($matriculaId); + $dadosMatricula = $this->getdadosMatricula($matriculaId); + $dadosEscola = $this->getdadosEscola($dadosMatricula['escola_id']); + $ano = $dadosMatricula['ano']; + $isNewHistorico = ! $this->existsHistorico($alunoId, $ano, $matriculaId); + + if ($isNewHistorico){ + $sequencial = $this->getNextHistoricoSequencial($alunoId); + + $historicoEscolar = new clsPmieducarHistoricoEscolar( + $alunoId, + $sequencial, + $ref_usuario_exc = NULL, + $ref_usuario_cad = $this->getSession()->id_pessoa, + $dadosMatricula['nome_serie'], + $ano, + $this->getService()->getOption('serieCargaHoraria'), + $this->getRequest()->dias_letivos, + mb_strtoupper($dadosEscola['nome']), + mb_strtoupper($dadosEscola['cidade']), + $dadosEscola['uf'], + utf8_decode($this->getRequest()->observacao), + $this->getSituacaoMatricula(), + $data_cadastro = date('Y-m-d'), + $data_exclusao = NULL, + $ativo = 1, + $this->getFaltaGlobalizada($defaultValue='NULL'), + $dadosMatricula['instituicao_id'], + $origem = '', #TODO + $this->getRequest()->extra_curricular, + $matriculaId, + $this->getPercentualFrequencia(), + utf8_decode($this->getRequest()->registro), + utf8_decode($this->getRequest()->livro), + utf8_decode($this->getRequest()->folha), + $dadosMatricula['nome_curso'], + $this->getRequest()->grade_curso_id + ); + + $historicoEscolar->cadastra(); + $this->recreateHistoricoDisciplinas($sequencial, $alunoId); + + $this->appendMsg('Histórico processado com sucesso', 'success'); + } + else{ + + $sequencial = $this->getSequencial($alunoId, $ano, $matriculaId); + + $historicoEscolar = new clsPmieducarHistoricoEscolar( + $alunoId, + $sequencial, + $this->getSession()->id_pessoa, + $ref_usuario_cad = null, + $dadosMatricula['nome_serie'], + $ano, + $this->getService()->getOption('serieCargaHoraria'), + $this->getRequest()->dias_letivos, + mb_strtoupper($dadosEscola['nome']), + mb_strtoupper($dadosEscola['cidade']), + $dadosEscola['uf'], + utf8_decode($this->getRequest()->observacao), + $this->getSituacaoMatricula(), + $data_cadastro = NULL, + $data_exclusao = NULL, + $ativo = 1, + $this->getFaltaGlobalizada($defaultValue='NULL'), + $dadosMatricula['instituicao_id'], + $origem = '', #TODO + $this->getRequest()->extra_curricular, + $matriculaId, + $this->getPercentualFrequencia(), + utf8_decode($this->getRequest()->registro), + utf8_decode($this->getRequest()->livro), + utf8_decode($this->getRequest()->folha), + $dadosMatricula['nome_curso'], + $this->getRequest()->grade_curso_id + ); + + $historicoEscolar->edita(); + $this->recreateHistoricoDisciplinas($dadosHistoricoEscolar['sequencial'], $alunoId); + $this->appendMsg('Histórico reprocessado com sucesso', 'success'); + } + + } + catch (Exception $e){ + $this->appendMsg('Erro ao processar histórico, detalhes:' . $e->getMessage(), 'error', true); + } + + $situacaoHistorico = $this->getSituacaoHistorico($alunoId, $ano, $matriculaId, $reload = true); + $linkToHistorico = $this->getLinkToHistorico($alunoId, $ano, $matriculaId); + + $this->appendResponse('situacao_historico', $situacaoHistorico); + $this->appendResponse('link_to_historico', $linkToHistorico); + } + } + + + protected function _createHistoricoDisciplinas($fields){ + $historicoDisciplina = new clsPmieducarHistoricoDisciplinas( + $fields['sequencial'], + $fields['alunoId'], + $fields['historicoSequencial'], + $fields['nome'], + $fields['nota'], + $fields['falta'] + ); + $historicoDisciplina->cadastra(); + } + + + protected function recreateHistoricoDisciplinas($historicoSequencial, $alunoId){ + + $this->deleteHistoricoDisplinas($alunoId, $historicoSequencial); + + if ($this->getRequest()->disciplinas == 'buscar-boletim'){ + + $cnsNota = RegraAvaliacao_Model_Nota_TipoValor; + $tpNota = $this->getService()->getRegra()->get('tipoNota'); + $situacaoFaltasCc = $this->getService()->getSituacaoFaltas()->componentesCurriculares; + $mediasCc = $this->getService()->getMediasComponentes(); + + foreach ($this->getService()->getComponentes() as $componenteCurricular) + { + $ccId = $componenteCurricular->get('id'); + $nome = $componenteCurricular->nome; + $sequencial = $this->getNextHistoricoDisciplinasSequencial($historicoSequencial, $alunoId); + $nota = ''; + + if ($this->getRequest()->notas == 'buscar-boletim'){ + if ($tpNota == $cnsNota::NUMERICA) { + $nota = (string)$mediasCc[$ccId][0]->mediaArredondada; + } + elseif ($tpNota == $cnsNota::CONCEITUAL){ + $nota = (string)$mediasCc[$ccId][0]->media; + } + } + else + $nota = utf8_decode($this->getRequest()->notas); + + if(is_numeric($nota)) + $nota = sprintf("%.1f", $nota); + + $this->_createHistoricoDisciplinas(array( + "sequencial" => $sequencial, + "alunoId" => $alunoId, + "historicoSequencial" => $historicoSequencial, + "nome" => $nome, + "nota" => $nota, + "falta" => $this->getFalta($situacaoFaltasCc[$ccId]) + )); + } + } + else{ + foreach ($this->getRequest()->disciplinas as $disciplina){ + $sequencial = $this->getNextHistoricoDisciplinasSequencial($historicoSequencial, $alunoId); + + $this->_createHistoricoDisciplinas(array( + "sequencial" => $sequencial, + "alunoId" => $alunoId, + "historicoSequencial" => $historicoSequencial, + "nome" => utf8_decode($disciplina['nome']), + "nota" => utf8_decode($disciplina['nota']), + "falta" => $falta = $disciplina['falta'] + )); + } + } + } + + protected function getFalta($situacaoFaltaComponenteCurricular=null){ + if ($this->getRequest()->faltas == 'buscar-boletim'){ + + $cnsPresenca = RegraAvaliacao_Model_TipoPresenca; + $tpPresenca = $this->getService()->getRegra()->get('tipoPresenca'); + + //retorna '' caso não exista situacaoFalta para o componente curricular, + //como nos casos em que a regra de avaliação muda + if($tpPresenca == $cnsPresenca::POR_COMPONENTE && ! is_null($situacaoFaltaComponenteCurricular)){ + $falta = $situacaoFaltaComponenteCurricular->total; + } + elseif($tpPresenca == $cnsPresenca::POR_COMPONENTE){ + $falta = ''; + } + elseif($tpPresenca == $cnsPresenca::GERAL){ + $falta = $this->getService()->getSituacaoFaltas()->totalFaltas; + } + } + else + $falta = $this->getRequest()->faltas; + + return $falta; + } + + + protected function getDadosMatricula($matriculaId){ + $ano = $this->getAnoMatricula($matriculaId); + $sql = "select ref_ref_cod_serie as serie_id, ref_cod_curso as curso_id from pmieducar.matricula + where cod_matricula = $1"; + + $params = array('params' => $matriculaId, 'return_only' => 'first-line'); + $idsSerieCurso = Portabilis_Utils_Database::fetchPreparedQuery($sql, $params); + + $matriculas = array(); + + $matriculaTurma = new clsPmieducarMatriculaTurma(); + $matriculaTurma = $matriculaTurma->lista( + $matriculaId, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + 1, + $idsSerieCurso['serie_id'], + $idsSerieCurso['curso_id'] + ); + + $matriculaTurma = $matriculaTurma[0]; + + $dadosMatricula = array(); + if (is_array($matriculaTurma) && count($matriculaTurma) > 0){ + $dadosMatricula['ano'] = $ano; + $dadosMatricula['instituicao_id'] = $matriculaTurma['ref_cod_instituicao']; + $dadosMatricula['escola_id'] = $matriculaTurma['ref_ref_cod_escola']; + $dadosMatricula['serie_id'] = $matriculaTurma['ref_ref_cod_serie']; + $dadosMatricula['matricula_id'] = $matriculaTurma['ref_cod_matricula']; + $dadosMatricula['aluno_id'] = $matriculaTurma['ref_cod_aluno']; + $dadosMatricula['nome'] = $this->toUtf8($matriculaTurma['nome_aluno']); + $dadosMatricula['nome_curso'] = $this->toUtf8($matriculaTurma['nm_curso']); + $dadosMatricula['nome_serie'] = $this->getNomeSerie($matriculaTurma['ref_ref_cod_serie']); + $dadosMatricula['nome_turma'] = $this->toUtf8($matriculaTurma['nm_turma']); + $dadosMatricula['situacao_historico'] = $this->getSituacaoHistorico($matriculaTurma['ref_cod_aluno'], $ano, $matriculaId); + $dadosMatricula['link_to_historico'] = $this->getLinkToHistorico($matriculaTurma['ref_cod_aluno'], $ano, $matriculaId); + } + else { + throw new Exception("Não foi possivel recuperar os dados da matricula: $matriculaId."); + } + + return $dadosMatricula; + } + + + protected function getAlunoIdByMatriculaId($matriculaId){ + $sql = "select ref_cod_aluno from pmieducar.matricula where cod_matricula = $1"; + + return Portabilis_Utils_Database::selectField($sql, $matriculaId); + } + + + protected function getAnoMatricula($matriculaId){ + $sql = "select ano from pmieducar.matricula where cod_matricula = $1"; + + return Portabilis_Utils_Database::selectField($sql, $matriculaId); + } + + + protected function getNomeSerie($serieId){ + $sql = "select nm_serie from pmieducar.serie where cod_serie = $1"; + + return Portabilis_String_Utils::toLatin1(Portabilis_Utils_Database::selectField($sql, $serieId)); + } + + + protected function getSequencial($alunoId, $ano, $matriculaId){ + $sql = "select sequencial from pmieducar.historico_escolar where ref_cod_aluno = $1 and ano = $2 + and ref_cod_instituicao = $3 and ref_cod_matricula = $4 and ativo = 1 limit 1"; + + $params = array($alunoId, $ano, $this->getRequest()->instituicao_id, $matriculaId); + return Portabilis_Utils_Database::selectField($sql, $params); + } + + + protected function existsHistorico($alunoId, $ano, $matriculaId, $ativo = 1, $reload = false){ + if(! isset($this->existsHistorico) || $reload){ + $sql = "select 1 from pmieducar.historico_escolar where ref_cod_aluno = $1 and ano = $2 + and ref_cod_instituicao = $3 and ref_cod_matricula = $4 and ativo = $5"; + + $params = array($alunoId, $ano, $this->getRequest()->instituicao_id, $matriculaId, $ativo); + $this->existsHistorico = Portabilis_Utils_Database::selectField($sql, $params) == 1; + } + + return $this->existsHistorico; + } + + + protected function getSituacaoHistorico($alunoId, $ano, $matriculaId, $reload = false){ + if ($this->existsHistorico($alunoId, $ano, $matriculaId, 1, $reload)) + $situacao = 'Processado'; + else + $situacao = 'Sem histórico'; + + return $this->toUtf8($situacao); + } + + + protected function getLinkToHistorico($alunoId, $ano, $matriculaId){ + $sql = "select sequencial from pmieducar.historico_escolar where ref_cod_aluno = $1 and + ano = $2 and ref_cod_instituicao = $3 and ref_cod_matricula = $4 and ativo = 1"; + + $params = array($alunoId, $ano, $this->getRequest()->instituicao_id, $matriculaId); + $sequencial = Portabilis_Utils_DataBase::selectField($sql, $params); + + if (is_numeric($sequencial)) + $link = "/intranet/educar_historico_escolar_det.php?ref_cod_aluno=$alunoId&sequencial=$sequencial"; + else + $link = ''; + + return $link; + } + + + protected function getMatriculas(){ + $matriculas = array(); + + if ($this->canGetMatriculas()){ + + + $alunos = new clsPmieducarMatriculaTurma(); + $alunos->setOrderby('ref_cod_curso, ref_ref_cod_serie, ref_cod_turma, nome'); + + $alunos = $alunos->lista( + $this->getRequest()->matricula_id, + $this->getRequest()->turma_id, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + 1, + $this->getRequest()->serie_id, + $this->getRequest()->curso_id, + $this->getRequest()->escola_id, + $this->getRequest()->instituicao_id, + $this->getRequest()->aluno_id, + NULL, + NULL, + NULL, + NULL, + $this->getRequest()->ano, + NULL, + TRUE, + NULL, + NULL, + TRUE, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL + ); + + + if (! is_array($alunos)) + $alunos = array(); + + $situacoesMatricula = array('aprovado' => App_Model_MatriculaSituacao::APROVADO, + 'reprovado' => App_Model_MatriculaSituacao::REPROVADO, + 'em-andamento' => App_Model_MatriculaSituacao::EM_ANDAMENTO, + ); + + foreach($alunos as $aluno) + { + + $situacaoMatricula = $this->getSituacaoMatricula($aluno['ref_cod_matricula']); + + if (in_array($situacaoMatricula, $situacoesMatricula)){ + $matricula = array(); + $matriculaId = $aluno['ref_cod_matricula']; + $matricula['matricula_id'] = $matriculaId; + $matricula['aluno_id'] = $aluno['ref_cod_aluno']; + $matricula['nome'] = $this->toUtf8($aluno['nome_aluno']); + $matricula['nome_curso'] = $this->toUtf8($aluno['nm_curso']); + $matricula['nome_serie'] = $this->toUtf8($this->getNomeSerie($aluno['ref_ref_cod_serie'])); + $matricula['nome_turma'] = $this->toUtf8($aluno['nm_turma']); + $matricula['situacao_historico'] = $this->getSituacaoHistorico($aluno['ref_cod_aluno'], $this->getRequest()->ano, $matriculaId, $reload = true); + $matricula['link_to_historico'] = $this->getLinkToHistorico($aluno['ref_cod_aluno'], $this->getRequest()->ano, $matriculaId); + $matriculas[] = $matricula; + } + } + } + + return $matriculas; + } + + + protected function getObservacaoPadraoSerie(){ + if($this->validatesPresenceOfSerieId(false, false)){ + $sql = "select coalesce(observacao_historico, '') as observacao_historico from pmieducar.serie + where cod_serie = $1"; + + $observacao = Portabilis_Utils_DataBase::selectField($sql, $this->getRequest()->serie_id); + } + else + $observacao = ''; + + return $this->toUtf8($observacao); + } + + + protected function saveService() + { + try { + $this->getService()->save(); + } + catch (CoreExt_Service_Exception $e){ + //excecoes ignoradas :( servico lanca excecoes de alertas, que não são exatamente erros. + //error_log('CoreExt_Service_Exception ignorada: ' . $e->getMessage()); + } + } + + protected function getService($raiseExceptionOnErrors = false, $appendMsgOnErrors = true){ + if (isset($this->service) && ! is_null($this->service)) + return $this->service; + + $msg = 'Erro ao recuperar serviço boletim: serviço não definido.'; + if($appendMsgOnErrors) + $this->appendMsg($msg); + + if ($raiseExceptionOnErrors) + throw new Exception($msg); + + return null; + } + + protected function canSetService($validatesPresenceOfMatriculaId = true) + { + try { + $this->requiresLogin(true); + if ($validatesPresenceOfMatriculaId) + $this->validatesPresenceOfMatriculaId(true); + } + catch (Exception $e){ + return false; + } + return true; + } + + protected function setService($matriculaId = null){ + if ($this->canSetService($validatesPresenceOfMatriculaId = is_null($matriculaId))){ + try { + + if (! $matriculaId) + $matriculaId = $this->getRequest()->matricula_id; + + $this->service = new Avaliacao_Service_Boletim(array( + 'matricula' => $matriculaId, + 'usuario' => $this->getSession()->id_pessoa + )); + + return true; + } + catch (Exception $e){ + $this->appendMsg('Exception ao instanciar serviço boletim: ' . $e->getMessage(), 'error', $encodeToUtf8 = true); + } + } + return false; + } + + + protected function notImplementedError() + { + $this->appendMsg("Operação '{$this->getRequest()->oper}' inválida para o att '{$this->getRequest()->att}'"); + } + + + public function Gerar(){ + $this->msgs = array(); + $this->response = array(); + + if ($this->canAcceptRequest()){ + try { + + if(isset($this->getRequest()->matricula_id)) + $this->appendResponse('matricula_id', $this->getRequest()->matricula_id); + + if ($this->getRequest()->oper == 'get') + { + if ($this->getRequest()->att == 'matriculas') + { + $matriculas = $this->getMatriculas(); + $this->appendResponse('matriculas', $matriculas); + $this->appendResponse('observacao_padrao', $this->getObservacaoPadraoSerie()); + } + else + $this->notImplementedError(); + + } + elseif ($this->getRequest()->oper == 'post') + { + if ($this->getRequest()->att == 'processamento') + { + $this->postProcessamento(); + } + else + $this->notImplementedError(); + } + elseif ($this->getRequest()->oper == 'delete') + { + if ($this->getRequest()->att == 'historico') + { + $this->deleteHistorico(); + } + else + $this->notImplementedError(); + } + } + catch (Exception $e){ + $this->appendMsg('Exception: ' . $e->getMessage(), $type = 'error', $encodeToUtf8 = true); + } + } + echo $this->prepareResponse(); + } + + protected function appendResponse($name, $value){ + $this->response[$name] = $value; + } + + protected function prepareResponse(){ + $msgs = array(); + $this->appendResponse('att', isset($this->getRequest()->att) ? $this->getRequest()->att : ''); + + foreach($this->msgs as $m) + $msgs[] = array('msg' => $m['msg'], 'type' => $m['type']); + $this->appendResponse('msgs', $msgs); + + echo json_encode($this->response); + } + + protected function appendMsg($msg, $type="error", $encodeToUtf8 = false){ + if ($encodeToUtf8) + $msg = utf8_encode($msg); + + //error_log("$type msg: '$msg'"); + $this->msgs[] = array('msg' => $msg, 'type' => $type); + } + + public function generate(CoreExt_Controller_Page_Interface $instance){ + header('Content-type: application/json'); + $instance->Gerar(); + } + + + // TODO remover metodo, ao migrar esta classe para novo padrao + + protected function toUtf8($str, $options = array()) { + return Portabilis_String_Utils::toUtf8($str, $options); + } +} diff --git a/ieducar/modules/HistoricoEscolar/Views/ProcessamentoController.php b/ieducar/modules/HistoricoEscolar/Views/ProcessamentoController.php new file mode 100644 index 0000000..98b7021 --- /dev/null +++ b/ieducar/modules/HistoricoEscolar/Views/ProcessamentoController.php @@ -0,0 +1,210 @@ + + * + * Este programa é software livre; você pode redistribuí-lo e/ou modificá-lo + * sob os termos da Licença Pública Geral GNU conforme publicada pela Free + * Software Foundation; tanto a versão 2 da Licença, como (a seu critério) + * qualquer versão posterior. + * + * Este programa é distribuí­do na expectativa de que seja útil, porém, SEM + * NENHUMA GARANTIA; nem mesmo a garantia implí­cita de COMERCIABILIDADE OU + * ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral + * do GNU para mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral do GNU junto + * com este programa; se não, escreva para a Free Software Foundation, Inc., no + * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. + * + * @author Lucas D'Avila + * @category i-Educar + * @license @@license@@ + * @package Avaliacao + * @subpackage Modules + * @since Arquivo disponível desde a versão ? + * @version $Id$ + */ + +require_once 'Portabilis/Controller/Page/ListController.php'; + +class ProcessamentoController extends Portabilis_Controller_Page_ListController +{ + protected $_dataMapper = 'Avaliacao_Model_NotaAlunoDataMapper'; + protected $_titulo = 'Processamento histórico'; + protected $_processoAp = 999613; + protected $_formMap = array(); + + // #TODO migrar funcionalidade para novo padrão + protected $backwardCompatibility = true; + + public function Gerar() + { + Portabilis_View_Helper_Application::loadStylesheet($this, '/modules/HistoricoEscolar/Static/styles/processamento.css'); + + $this->inputsHelper()->dynamic(array('ano', 'instituicao', 'escola')); + $this->inputsHelper()->dynamic(array('curso', 'serie', 'turma', 'matricula'), array('required' => false)); + + $resourceOptionsTable = " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "; + + + $this->appendOutput($resourceOptionsTable); + + Portabilis_View_Helper_Application::loadJQueryUiLib($this); + + Portabilis_View_Helper_Application::loadJavascript( + $this, + array('/modules/Portabilis/Assets/Javascripts/Utils.js', + '/modules/Portabilis/Assets/Javascripts/Frontend/Inputs/SimpleSearch.js', + '/modules/HistoricoEscolar/Static/scripts/processamento.js') + ); + } + + function getSelectGradeCurso(){ + $db = new clsBanco(); + $sql = "select * from pmieducar.historico_grade_curso where ativo = 1"; + $db->Consulta($sql); + + $select = "'; + return $select; + } +} +?> \ No newline at end of file -- libgit2 0.21.2