From c7299884c5b6bc747490447f58e5e1a7d27635f4 Mon Sep 17 00:00:00 2001 From: Eriksen Costa Paixão Date: Thu, 14 May 2009 00:50:36 +0000 Subject: [PATCH] #32 by Eriksen: Corrigido execução de regra de negócio ao afastar servidor. A correção envolve: --- ieducar/intranet/educar_servidor_afastamento_cad.php | 506 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ieducar/intranet/include/pmieducar/clsPmieducarServidor.inc.php | 28 ++++++++++++++++++++-------- ieducar/tests/functional/ServidorAfastarWebTest.class.php | 24 +++++++++++++++++++----- 3 files changed, 327 insertions(+), 231 deletions(-) diff --git a/ieducar/intranet/educar_servidor_afastamento_cad.php b/ieducar/intranet/educar_servidor_afastamento_cad.php index 8281d33..ce762f1 100644 --- a/ieducar/intranet/educar_servidor_afastamento_cad.php +++ b/ieducar/intranet/educar_servidor_afastamento_cad.php @@ -33,7 +33,6 @@ require_once 'include/pmieducar/geral.inc.php'; class clsIndexBase extends clsBase { - public function Formular() { $this->SetTitulo($this->_instituicao . ' i-Educar - Servidor Afastamento'); $this->processoAp = '635'; @@ -46,11 +45,13 @@ class indice extends clsCadastro { /** * Referência a usuário da sessão - * * @var int */ public $pessoa_logada = NULL; + /** + * Atributos de mapeamento dos campos de banco de dados + */ public $ref_cod_servidor = NULL, $sequencial = NULL, @@ -68,9 +69,8 @@ class indice extends clsCadastro { $parametros = NULL; /** - * Array dos dias da semana - * - * @var Array + * Dias da semana + * @var array */ public $dias_da_semana = array( '' => 'Selecione', @@ -85,6 +85,10 @@ class indice extends clsCadastro { + /** + * Implementação do método clsCadastro::Inicializar() + * @see ieducar/intranet/include/clsCadastro#Inicializar() + */ public function Inicializar() { session_start(); $this->pessoa_logada = $_SESSION['id_pessoa']; @@ -113,8 +117,7 @@ class indice extends clsCadastro { $registro = $obj->detalhe(); if ($registro) { - - // passa todos os valores obtidos no registro para atributos do objeto + // Passa todos os valores obtidos no registro para atributos do objeto foreach ($registro as $campo => $val) { $this->$campo = $val; } @@ -143,6 +146,10 @@ class indice extends clsCadastro { + /** + * Implementação do método clsCadastro::Gerar() + * @see ieducar/intranet/include/clsCadastro#Gerar() + */ public function Gerar() { $this->campoOculto('ref_cod_servidor', $this->ref_cod_servidor); $this->campoOculto('sequencial', $this->sequencial); @@ -153,13 +160,13 @@ class indice extends clsCadastro { $objTemp = new clsPmieducarMotivoAfastamento(); $lista = $objTemp->lista(); - if (is_array($lista) && count($lista)) { + if (is_array($lista) && count($lista) > 0) { foreach ($lista as $registro) { $opcoes[$registro['cod_motivo_afastamento']] = $registro['nm_motivo']; } } else { - $opcoes = array('' => 'Erro na geracao'); + $opcoes = array('' => 'Nenhum motivo de afastamento cadastrado'); } if ($this->status == 'N') { @@ -171,123 +178,140 @@ class indice extends clsCadastro { $opcoes, $this->ref_cod_motivo_afastamento, '', FALSE, '', '', TRUE); } - // data + // Datas para registro + // Se novo registro if ($this->status == 'N') { $this->campoData('data_saida', 'Data de Afastamento', $this->data_saida, TRUE); } + // Se edição, mostra a data de afastamento elseif ($this->status == 'E') { $this->campoRotulo('data_saida', 'Data de Afastamento', $this->data_saida); } + // Se edição, mostra campo para entrar com data de retorno if ($this->status == 'E') { $this->campoData('data_retorno', 'Data de Retorno', $this->data_retorno, FALSE); } - if (class_exists('clsPmieducarServidor')) { - $obj_servidor = new clsPmieducarServidor($this->ref_cod_servidor, - NULL, NULL, NULL, NULL, NULL, 1, $this->ref_cod_instituicao); + $obj_servidor = new clsPmieducarServidor($this->ref_cod_servidor, + NULL, NULL, NULL, NULL, NULL, 1, $this->ref_cod_instituicao); - $det_servidor = $obj_servidor->detalhe(); + $det_servidor = $obj_servidor->detalhe(); - if ($det_servidor) { - if (class_exists('clsPmieducarFuncao')) { - $obj_funcao = new clsPmieducarFuncao($det_servidor['ref_cod_funcao'], - NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, $this->ref_cod_instituicao); + if ($det_servidor) { + $obj_funcao = new clsPmieducarFuncao($det_servidor['ref_cod_funcao'], + NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, $this->ref_cod_instituicao); - $det_funcao = $obj_funcao->detalhe(); + // Se for professor + if (TRUE == $obj_servidor->isProfessor()) { + $obj = new clsPmieducarQuadroHorarioHorarios(); - if ($det_funcao['professor'] == 1) { - $obj = new clsPmieducarQuadroHorarioHorarios(); - $lista = $obj->lista(NULL, NULL, NULL, NULL, NULL, NULL, NULL, - $this->ref_cod_instituicao, NULL, $this->ref_cod_servidor, NULL, - NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL); + // Pega a lista de aulas alocadas para este servidor + $lista = $obj->lista(NULL, NULL, NULL, NULL, NULL, NULL, NULL, + $this->ref_cod_instituicao, NULL, $this->ref_cod_servidor, NULL, + NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, NULL); - if ($lista) { - - // Passa todos os valores obtidos no registro para atributos do objeto - foreach ($lista as $campo => $val) { - $temp = array(); - $temp['hora_inicial'] = $val['hora_inicial']; - $temp['hora_final'] = $val['hora_final']; - $temp['dia_semana'] = $val['dia_semana']; - $temp['ref_cod_escola'] = $val['ref_cod_escola']; - $temp['ref_cod_substituto'] = $val['ref_servidor_substituto']; - $this->alocacao_array[] = $temp; - } - - if ($this->alocacao_array) { - $tamanho = sizeof($alocacao); - $script = ""; + $script .= "\n"; - // Print do Javascript - print $script; - } - } + // Print do Javascript + print $script; } } - } + } } + /** + * Implementação do método clsCadastro::Novo() + * + * Recebe os valores com códigos de servidor e instituição atual, junto com + * a data. Casos de uso: + * - Servidor sem função de professor: apenas é marcado que o servidor está + * afastado + * - Servidor com função de professor: + * - Verifica-se quais professores estão aptos a substituir o servidor, + * baseado em critérios como horário de aula, alocação na escola, + * disciplinas que ministra. Esse passo é realizado no método + * {@see $this->Novo()}, ao possibilitar a escolha do substituto ao + * usuário + * + * @see clsPmieducarServidorAfastamento + * @see ieducar/intranet/include/clsCadastro#Novo() + * @return bool FALSE em caso de falha + */ public function Novo() { session_start(); $this->pessoa_logada = $_SESSION['id_pessoa']; @@ -296,187 +320,233 @@ class indice extends clsCadastro { $this->ref_cod_servidor = isset($_POST['ref_cod_servidor']) ? $_POST['ref_cod_servidor'] : NULL; + $urlPermite = sprintf( + "educar_servidor_det.php?cod_servidor=%d&ref_cod_instituicao=%d", + $this->ref_cod_servidor, $this->ref_cod_instituicao + ); + $obj_permissoes = new clsPermissoes(); - $obj_permissoes->permissao_cadastra(635, $this->pessoa_logada, 7, - "educar_servidor_det.php?cod_servidor={$this->ref_cod_servidor}&ref_cod_instituicao={$this->ref_cod_instituicao}"); + $obj_permissoes->permissao_cadastra(635, $this->pessoa_logada, 7, $urlPermite); $obj = new clsPmieducarServidorAfastamento($this->ref_cod_servidor, NULL, $this->ref_cod_motivo_afastamento, NULL, $this->pessoa_logada, NULL, NULL, $this->data_retorno, $this->data_saida, 1, $this->ref_cod_instituicao); $cadastrou = $obj->cadastra(); + if ($cadastrou) { + if (is_array($_POST['ref_cod_servidor_substituto'])) { + /* + * Itera cada substituto e atualiza o quadro de horário com o código + * do servidor substituto, campos: + * - ref_cod_instituicao_substituto + * - ref_cod_servidor_substituto + */ + foreach ($_POST['ref_cod_servidor_substituto'] as $key => $valor) { + $ref_cod_servidor_substituto = $valor; + $ref_cod_escola = $_POST["ref_cod_escola_{$key}"]; + $dia_semana = $_POST["dia_semana_{$key}"]; + $hora_inicial = urldecode($_POST["hora_inicial_{$key}"]); + $hora_final = urldecode($_POST["hora_final_{$key}"]); + + if (is_numeric($ref_cod_servidor_substituto) && is_numeric($ref_cod_escola) && + is_numeric($dia_semana) && is_string($hora_inicial) && + is_string($hora_final)) { + + $obj_horarios = new clsPmieducarQuadroHorarioHorarios(NULL, NULL, + $ref_cod_escola, NULL, NULL, NULL, $this->ref_cod_instituicao, + $ref_cod_servidor_substituto, $this->ref_cod_servidor, + $hora_inicial, $hora_final, NULL, NULL, 1, $dia_semana); + + $det_horarios = $obj_horarios->detalhe($ref_cod_escola); + + $obj_horario = new clsPmieducarQuadroHorarioHorarios( + $det_horarios['ref_cod_quadro_horario'], $det_horarios['ref_cod_serie'], + $det_horarios['ref_cod_escola'], $det_horarios['ref_cod_disciplina'], + $det_horarios['sequencial'], $det_horarios['ref_cod_instituicao_servidor'], + $det_horarios['ref_cod_instituicao_servidor'], $ref_cod_servidor_substituto, + $this->ref_cod_servidor, NULL, NULL, NULL, NULL, NULL, NULL); + + // Caso a atualização não tenha sucesso + if (!$obj_horario->edita()) { + $this->mensagem = "Cadastro não realizado.
"; - if(is_array($_POST['ref_cod_servidor_substituto'])) - foreach ( $_POST['ref_cod_servidor_substituto'] as $key => $valor ) - { - //if ( substr( $campo, 0, 28 ) == 'ref_cod_servidor_substituto_' ) - // { - $ref_cod_servidor_substituto = $valor; - // } - //if ( substr( $campo, 0, 15 ) == 'ref_cod_escola_' ) - $ref_cod_escola = $_POST["ref_cod_escola_{$key}"]; - //if ( substr( $campo, 0, 11 ) == 'dia_semana_' ) - $dia_semana = $_POST["dia_semana_{$key}"]; - //if ( substr( $campo, 0, 13 ) == 'hora_inicial_' ) - $hora_inicial = urldecode( $_POST["hora_inicial_{$key}"] ); - // if ( substr( $campo, 0, 11 ) == 'hora_final_' ) - $hora_final = urldecode( $_POST["hora_final_{$key}"] ); - - if ( is_numeric( $ref_cod_servidor_substituto ) && is_numeric( $ref_cod_escola ) && is_numeric( $dia_semana ) && is_string( $hora_inicial ) && is_string( $hora_final ) ) - { - - //if ( substr( $campo, 0, 28 ) == 'ref_cod_servidor_substituto_' ) - //{die; - $obj_horarios = new clsPmieducarQuadroHorarioHorarios( null, null, $ref_cod_escola,null, null,null, $this->ref_cod_instituicao,$ref_cod_servidor_substituto, $this->ref_cod_servidor, $hora_inicial, $hora_final, null, null, 1, $dia_semana ); - $det_horarios = $obj_horarios->detalhe($ref_cod_escola); - //echo " = new clsPmieducarQuadroHorarioHorarios( {$det_horarios["ref_cod_quadro_horario"]}, {$det_horarios["ref_cod_serie"]}, {$det_horarios["ref_cod_escola"]}, {$det_horarios["ref_cod_disciplina"]}, {$det_horarios["ref_ref_cod_turma"]}, {$det_horarios["sequencial"]}, {$det_horarios["ref_cod_instituicao_servidor"]}, null, {$ref_cod_servidor_substituto}, null, null, null, null, null, null, null );";die; - $obj_horario = new clsPmieducarQuadroHorarioHorarios( $det_horarios["ref_cod_quadro_horario"], $det_horarios["ref_cod_serie"], $det_horarios["ref_cod_escola"], $det_horarios["ref_cod_disciplina"], $det_horarios["sequencial"], $det_horarios["ref_cod_instituicao_servidor"],$det_horarios["ref_cod_instituicao_servidor"], $ref_cod_servidor_substituto, $this->ref_cod_servidor, null, null, null, null, null, null ); - if( !$obj_horario->edita() ) - { - $this->mensagem = "Cadastro não realizado.
"; - return false; - } - //} + return FALSE; + } } } + $this->mensagem .= "Cadastro efetuado com sucesso.
"; - header( "Location: educar_servidor_det.php?cod_servidor={$this->ref_cod_servidor}&ref_cod_instituicao={$this->ref_cod_instituicao}" ); + header("Location: educar_servidor_det.php?cod_servidor={$this->ref_cod_servidor}&ref_cod_instituicao={$this->ref_cod_instituicao}"); die(); - return true; - } - else - { - $this->mensagem = "Cadastro não realizado.
"; - return false; - } - $this->mensagem = "Cadastro não realizado.
"; - echo ""; - return false; + } + } + else { + $this->mensagem = "Cadastro não realizado.
"; + return FALSE; + } + + $this->mensagem = "Cadastro não realizado.
"; + return FALSE; } - function Editar() - { - @session_start(); + + + /** + * Implementação do método clsCadastro::Editar() + * + * Esse método é chamado quando o usuário "Retorna um servidor". Dessa forma, + * caso seja professor, precisa atualizar a sua alocação na tabela + * pmieducar.quadro_horario_horarios, apagando os valores dos campos + * ref_cod_instituicao_ e ref_cod_servidor_ -substituto + * + * @see ieducar/intranet/include/clsCadastro#Editar() + */ + public function Editar() { + session_start(); $this->pessoa_logada = $_SESSION['id_pessoa']; - @session_write_close(); + session_write_close(); + + $urlPermite = sprintf( + 'educar_servidor_det.php?cod_servidor=%d&ref_cod_instituicao=%d', + $this->ref_cod_servidor, $this->ref_cod_instituicao); $obj_permissoes = new clsPermissoes(); - $obj_permissoes->permissao_cadastra( 635, $this->pessoa_logada, 7, "educar_servidor_det.php?cod_servidor={$this->ref_cod_servidor}&ref_cod_instituicao={$this->ref_cod_instituicao}" ); + $obj_permissoes->permissao_cadastra(635, $this->pessoa_logada, 7, $urlPermite); + + $obj = new clsPmieducarServidorAfastamento($this->ref_cod_servidor, + $this->sequencial, $this->ref_cod_motivo_afastamento, $this->pessoa_logada, + NULL, NULL, NULL, $this->data_retorno, unserialize($this->data_saida), 1, + $this->ref_cod_instituicao ); - $obj = new clsPmieducarServidorAfastamento( $this->ref_cod_servidor, $this->sequencial, $this->ref_cod_motivo_afastamento, $this->pessoa_logada, null, null, null, $this->data_retorno, unserialize( $this->data_saida ), 1, $this->ref_cod_instituicao ); $editou = $obj->edita(); - if( $editou ) - { - if(is_array($_POST['ref_cod_servidor_substituto'])) - foreach ( $_POST['ref_cod_servidor_substituto'] as $key => $valor ) - { - $ref_cod_servidor_substituto = $valor; - - //if ( substr( $campo, 0, 15 ) == 'ref_cod_escola_' ) - $ref_cod_escola = $_POST["ref_cod_escola_{$key}"]; - //if ( substr( $campo, 0, 11 ) == 'dia_semana_' ) - $dia_semana = $_POST["dia_semana_{$key}"]; - //if ( substr( $campo, 0, 13 ) == 'hora_inicial_' ) - $hora_inicial = urldecode( $_POST["hora_inicial_{$key}"] ); - // if ( substr( $campo, 0, 11 ) == 'hora_final_' ) - $hora_final = urldecode( $_POST["hora_final_{$key}"] ); - - if ( is_numeric( $ref_cod_servidor_substituto ) && is_numeric( $ref_cod_escola ) && is_numeric( $dia_semana ) && is_string( $hora_inicial ) && is_string( $hora_final ) ) - { - //if ( substr( $campo, 0, 28 ) == 'ref_cod_servidor_substituto_' ) - //{ - $obj_horarios = new clsPmieducarQuadroHorarioHorarios( null, null, $ref_cod_escola,null, null,null, $this->ref_cod_instituicao,$ref_cod_servidor_substituto, $this->ref_cod_servidor, $hora_inicial, $hora_final, null, null, 1, $dia_semana ); - $det_horarios = $obj_horarios->detalhe($ref_cod_escola); - //if ( is_string( $this->data_retorno ) && $this->data_retorno != '' ) - //{ - //$obj_horario = new clsPmieducarQuadroHorarioHorarios( $det_horarios["ref_cod_quadro_horario"], $det_horarios["ref_ref_cod_serie"], $det_horarios["ref_ref_cod_escola"], $det_horarios["ref_ref_cod_disciplina"], $det_horarios["ref_ref_cod_turma"], $det_horarios["sequencial"], null, null, null, null, null, null, null, null, null, null ); - $obj_horario = new clsPmieducarQuadroHorarioHorarios( $det_horarios["ref_cod_quadro_horario"], $det_horarios["ref_cod_serie"], $det_horarios["ref_cod_escola"], $det_horarios["ref_cod_disciplina"], $det_horarios["sequencial"], null,$det_horarios["ref_cod_instituicao_servidor"], null, $this->ref_cod_servidor, null, null, null, null, null, null ); - //} - /* else - { - // $obj_horario = new clsPmieducarQuadroHorarioHorarios( $det_horarios["ref_cod_quadro_horario"], $det_horarios["ref_ref_cod_serie"], $det_horarios["ref_ref_cod_escola"], $det_horarios["ref_ref_cod_disciplina"], $det_horarios["ref_ref_cod_turma"], $det_horarios["sequencial"], $det_horarios["ref_cod_instituicao_servidor"], null, $ref_cod_servidor_substituto, null, null, null, null, null, null, null ); - $obj_horario = new clsPmieducarQuadroHorarioHorarios( $det_horarios["ref_cod_quadro_horario"], $det_horarios["ref_cod_serie"], $det_horarios["ref_cod_escola"], $det_horarios["ref_cod_disciplina"], $det_horarios["sequencial"], $det_horarios["ref_cod_instituicao_servidor"],$det_horarios["ref_cod_instituicao_servidor"], $ref_cod_servidor_substituto, $this->ref_cod_servidor, null, null, null, null, null, null ); - }*/ - if( !$obj_horario->edita() ) - { + if ($editou) { + if (is_array($_POST['ref_cod_servidor_substituto'])) { + foreach ($_POST['ref_cod_servidor_substituto'] as $key => $valor) { + $ref_cod_servidor_substituto = $valor; + $ref_cod_escola = $_POST["ref_cod_escola_{$key}"]; + $dia_semana = $_POST["dia_semana_{$key}"]; + $hora_inicial = urldecode($_POST["hora_inicial_{$key}"]); + $hora_final = urldecode($_POST["hora_final_{$key}"]); + + if (is_numeric($ref_cod_servidor_substituto) && is_numeric($ref_cod_escola) && + is_numeric($dia_semana) && is_string($hora_inicial) && + is_string($hora_final)) { + + $obj_horarios = new clsPmieducarQuadroHorarioHorarios(NULL, NULL, + $ref_cod_escola, NULL, NULL, NULL, $this->ref_cod_instituicao, + $ref_cod_servidor_substituto, $this->ref_cod_servidor, $hora_inicial, + $hora_final, NULL, NULL, 1, $dia_semana); + + $det_horarios = $obj_horarios->detalhe($ref_cod_escola); + + // Os valores NULL apagam os campos ref_cod_instituicao_ e + // ref_cod_servidor_ -substituto da tabela pmieducar. + // quadro_horario_horarios + $obj_horario = new clsPmieducarQuadroHorarioHorarios( + $det_horarios["ref_cod_quadro_horario"], + $det_horarios["ref_cod_serie"], + $det_horarios["ref_cod_escola"], + $det_horarios["ref_cod_disciplina"], + $det_horarios["sequencial"], + NULL, + $det_horarios["ref_cod_instituicao_servidor"], + NULL, + $this->ref_cod_servidor); + + if (!$obj_horario->edita()) { $this->mensagem = "Cadastro não realizado.
"; - return false; + return FALSE; } - //} + + } } } + $this->mensagem .= "Edição efetuada com sucesso.
"; - header( "Location: educar_servidor_det.php?cod_servidor={$this->ref_cod_servidor}&ref_cod_instituicao={$this->ref_cod_instituicao}" ); + header("Location: educar_servidor_det.php?cod_servidor={$this->ref_cod_servidor}&ref_cod_instituicao={$this->ref_cod_instituicao}"); die(); - return true; } $this->mensagem = "Edição não realizada.
"; - echo ""; - return false; + return FALSE; } - function Excluir() - { - @session_start(); + + + /** + * Implementação do método clsCadastro::Excluir() + * @see ieducar/intranet/include/clsCadastro#Excluir() + */ + public function Excluir() { + session_start(); $this->pessoa_logada = $_SESSION['id_pessoa']; - @session_write_close(); + session_write_close(); + + $urlPermite = sprintf( + "educar_servidor_det.php?cod_servidor=%d&ref_cod_instituicao=%d", + $this->ref_cod_servidor, $this->ref_cod_instituicao); $obj_permissoes = new clsPermissoes(); - $obj_permissoes->permissao_excluir( 635, $this->pessoa_logada, 7, "educar_servidor_det.php?cod_servidor={$this->ref_cod_servidor}&ref_cod_instituicao={$this->ref_cod_instituicao}" ); + $obj_permissoes->permissao_excluir(635, $this->pessoa_logada, 7, $urlPermite); + $obj = new clsPmieducarServidorAfastamento($this->ref_cod_servidor, + $this->sequencial, $this->ref_ref_cod_instituicao, + $this->ref_cod_motivo_afastamento, $this->pessoa_logada, + $this->pessoa_logada, $this->data_cadastro, $this->data_exclusao, + $this->data_retorno, $this->data_saida, 0); - $obj = new clsPmieducarServidorAfastamento($this->ref_cod_servidor, $this->sequencial, $this->ref_ref_cod_instituicao, $this->ref_cod_motivo_afastamento, $this->pessoa_logada, $this->pessoa_logada, $this->data_cadastro, $this->data_exclusao, $this->data_retorno, $this->data_saida, 0); $excluiu = $obj->excluir(); - if( $excluiu ) - { + + if ($excluiu) { $this->mensagem .= "Exclusão efetuada com sucesso.
"; - header( "Location: educar_servidor_afastamento_lst.php" ); + header("Location: educar_servidor_afastamento_lst.php"); + die(); - return true; } $this->mensagem = "Exclusão não realizada.
"; - echo ""; - return false; + return FALSE; } } -// cria uma extensao da classe base +// Instancia objeto de página $pagina = new clsIndexBase(); -// cria o conteudo + +// Instancia objeto de conteúdo $miolo = new indice(); -// adiciona o conteudo na clsBase -$pagina->addForm( $miolo ); -// gera o html + +// Atribui o conteúdo à página +$pagina->addForm($miolo); + +// Gera o código HTML $pagina->MakeAll(); ?> - \ No newline at end of file diff --git a/ieducar/intranet/include/pmieducar/clsPmieducarServidor.inc.php b/ieducar/intranet/include/pmieducar/clsPmieducarServidor.inc.php index c1774ad..55f276f 100644 --- a/ieducar/intranet/include/pmieducar/clsPmieducarServidor.inc.php +++ b/ieducar/intranet/include/pmieducar/clsPmieducarServidor.inc.php @@ -670,7 +670,7 @@ class clsPmieducarServidor { AND qhh.ativo = '1' AND qhh.dia_semana <> '$int_dia_semana' AND qhh.ref_servidor = a.ref_cod_servidor - GROUP BY qhh.ref_servidor ) ,'00:00') + '$str_hr_mat' + COALESCE( + GROUP BY qhh.ref_servidor) ,'00:00') + '$str_hr_mat' + COALESCE( (SELECT SUM( qhha.hora_final - qhha.hora_inicial ) FROM pmieducar.quadro_horario_horarios_aux qhha WHERE qhha.ref_cod_instituicao_servidor = '$int_ref_cod_instituicao' @@ -678,7 +678,7 @@ class clsPmieducarServidor { AND hora_inicial >= '08:00' AND hora_inicial <= '12:00' AND qhha.ref_servidor = a.ref_cod_servidor - AND identificador = $int_identificador + AND identificador = '$int_identificador' GROUP BY qhha.ref_servidor),'00:00'))"; } else { @@ -716,7 +716,7 @@ class clsPmieducarServidor { AND qhha.ref_servidor = a.ref_cod_servidor AND hora_inicial >= '12:00' AND hora_inicial <= '18:00' - AND identificador = $int_identificador + AND identificador = '$int_identificador' GROUP BY qhha.ref_servidor),'00:00') )"; } else { @@ -752,7 +752,7 @@ class clsPmieducarServidor { AND qhha.ref_servidor = a.ref_cod_servidor AND hora_inicial >= '18:00' AND hora_inicial <= '23:00' - AND identificador = $int_identificador + AND identificador = '$int_identificador' GROUP BY qhha.ref_servidor),'00:00') )"; } else { @@ -788,14 +788,26 @@ class clsPmieducarServidor { if ($det_curso['falta_ch_globalizada']) { // Busca professores independentemente da disciplina, somente verifica // se é professor e se ministra a disciplina para o curso - $filtros .= "{$whereAnd} EXISTS ( SELECT 1 FROM pmieducar.servidor_curso_ministra scm WHERE scm.ref_cod_curso = $int_ref_cod_curso AND scm.ref_ref_cod_instituicao = s.ref_cod_instituicao AND s.cod_servidor = scm.ref_cod_servidor)"; + $filtros .= " + {$whereAnd} EXISTS + (SELECT 1 + FROM pmieducar.servidor_curso_ministra scm + WHERE scm.ref_cod_curso = $int_ref_cod_curso AND + scm.ref_ref_cod_instituicao = s.ref_cod_instituicao AND + s.cod_servidor = scm.ref_cod_servidor)"; $whereAnd = " AND "; } else { // Verifica se o professor está habilitado para ministrar a disciplina - if(is_numeric($int_ref_cod_disciplina)) { - $filtros .= "{$whereAnd} EXISTS ( SELECT 1 FROM pmieducar.servidor_disciplina sd WHERE sd.ref_cod_disciplina = $int_ref_cod_disciplina AND sd.ref_ref_cod_instituicao = s.ref_cod_instituicao AND s.cod_servidor = sd.ref_cod_servidor)"; - $whereAnd = " AND "; + if (is_numeric($int_ref_cod_disciplina)) { + $filtros .= " + {$whereAnd} EXISTS + (SELECT 1 + FROM pmieducar.servidor_disciplina sd + WHERE sd.ref_cod_disciplina = $int_ref_cod_disciplina AND + sd.ref_ref_cod_instituicao = s.ref_cod_instituicao AND + s.cod_servidor = sd.ref_cod_servidor)"; + $whereAnd = " AND "; } } diff --git a/ieducar/tests/functional/ServidorAfastarWebTest.class.php b/ieducar/tests/functional/ServidorAfastarWebTest.class.php index 1f60924..91f90c2 100644 --- a/ieducar/tests/functional/ServidorAfastarWebTest.class.php +++ b/ieducar/tests/functional/ServidorAfastarWebTest.class.php @@ -21,6 +21,9 @@ * endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */ +require_once realpath(dirname(__FILE__) . '/../') . '/FunctionalBaseTest.class.php'; + + /** * ServidorAfastarWebTest class. * @@ -34,9 +37,6 @@ * @since Classe disponível desde a versão 1.0.1 * @version $Id$ */ - -require_once realpath(dirname(__FILE__) . '/../') . '/FunctionalBaseTest.class.php'; - class ServidorAfastarWebTest extends FunctionalBaseTest { private @@ -144,6 +144,9 @@ class ServidorAfastarWebTest extends FunctionalBaseTest { public function testServidorAfastar() { $this->doLogin(); + // ID da pessoa/servidor + $id = $this->slPessoaID; + $this->open('/intranet/educar_servidor_lst.php'); $this->clickAndWait('link=' . $this->slPessoaNome); $this->clickAndWait("//input[@value='Afastar Servidor']"); @@ -154,9 +157,20 @@ class ServidorAfastarWebTest extends FunctionalBaseTest { $data = date('d/m/Y', (time() + (60 * 60 * 24 * 10))); $this->type('data_saida', $data); - $this->clickAndWait('btn_enviar'); - $this->assertTrue($this->isTextPresent($this->slPessoaMatricula)); + // Verifica se a opção de busca de substituinte está presente, já que este + // servidor é professor e tem aulas alocadas no quadro de horários. + $searchButton = "//img[@onclick=\"pesquisa_valores_popless('educar_pesquisa_servidor_lst.php?campo1=ref_cod_servidor_substituto[0]&campo2=ref_cod_servidor_substituto_0_&ref_cod_instituicao=2&dia_semana=3&hora_inicial=09:00:00&hora_final=10:00:00&ref_cod_servidor=". $id ."&professor=1&ref_cod_escola=1&horario=S&ref_cod_disciplina=6', 'nome')\"]"; + $this->assertTrue($this->isElementPresent($searchButton)); + + // Clica no botão, seleciona o frame e verifica se existem resultados + // (válido apenas para o estado atual do banco de dados) + $this->click($searchButton); + sleep(10); + $this->selectFrame('temp_win_popless'); + $this->assertTrue(!$this->isTextPresent('Não há informação para ser apresentada')); + // Retorna ao frame principal + $this->selectFrame('relative=up'); $this->doLogout(); } -- libgit2 0.21.2