Commit b1a1974b8537b326e84d06850c308f33ffbf6f5f

Authored by Eriksen Costa Paixão
1 parent 1d5a441b
Exists in master

#71 by Eriksen Costa: Atualizada interface de alocação de servidores:

 * Reforçada validação javascript para evitar cargas horárias maiores que {{{clsPmieducarServidorAlocacao::$cargaHorariaMax}}} (padrão 6h)
 * Restrição da carga horária validada também no construtor de {{{clsPmieducarServidorAlocacao}}}
 * Melhoria na interface com javascript e texto de ajuda para esclarecer que o valor máximo da alocação é de 6h (padrão) por período)
ieducar/intranet/educar_servidor_alocacao_cad.php
... ... @@ -84,6 +84,9 @@ class indice extends clsCadastro
84 84 var $alocacao_array = array();
85 85 var $alocacao_excluida_array = array();
86 86  
  87 + static $escolasPeriodos = array();
  88 + static $periodos = array();
  89 +
87 90 function Inicializar()
88 91 {
89 92 $retorno = 'Novo';
... ... @@ -154,26 +157,21 @@ class indice extends clsCadastro
154 157 $this->campoRotulo('nm_instituicao', 'Instituição', $inst_det['nm_instituicao']);
155 158 $this->campoOculto('ref_ref_cod_instituicao', $this->ref_ref_cod_instituicao);
156 159  
157   - if (class_exists('clsPmieducarServidor')) {
158   - $objTemp = new clsPmieducarServidor($this->ref_cod_servidor);
159   - $det = $objTemp->detalhe();
160   -
161   - if ($det) {
162   - foreach ($det as $key => $registro) {
163   - $this->$key = $registro;
164   - }
165   - }
  160 + // Dados do servidor
  161 + $objTemp = new clsPmieducarServidor($this->ref_cod_servidor);
  162 + $det = $objTemp->detalhe();
166 163  
167   - if ($this->ref_cod_servidor) {
168   - $objTemp = new clsFuncionario($this->ref_cod_servidor);
169   - $detalhe = $objTemp->detalhe();
170   - $detalhe = $detalhe['idpes']->detalhe();
171   - $nm_servidor = $detalhe['nome'];
  164 + if ($det) {
  165 + foreach ($det as $key => $registro) {
  166 + $this->$key = $registro;
172 167 }
173 168 }
174   - else {
175   - echo '<!--\nErro\nClasse clsPmieducarServidor não encontrada\n-->';
176   - $opcoes = array('' => 'Erro na geração');
  169 +
  170 + if ($this->ref_cod_servidor) {
  171 + $objTemp = new clsFuncionario($this->ref_cod_servidor);
  172 + $detalhe = $objTemp->detalhe();
  173 + $detalhe = $detalhe['idpes']->detalhe();
  174 + $nm_servidor = $detalhe['nome'];
177 175 }
178 176  
179 177 $this->campoRotulo('nm_servidor', 'Servidor', $nm_servidor);
... ... @@ -202,9 +200,7 @@ class indice extends clsCadastro
202 200 unset($this->ref_cod_escola);
203 201 }
204 202  
205   - /**
206   - * Exclusão
207   - */
  203 + // Exclusão
208 204 if ($this->alocacao_array) {
209 205 foreach ($this->alocacao_array as $key => $alocacao) {
210 206 if (is_numeric($_POST['excluir_periodo'])) {
... ... @@ -217,9 +213,7 @@ class indice extends clsCadastro
217 213 }
218 214 }
219 215  
220   - /**
221   - * Carga Horária
222   - */
  216 + // Carga horária
223 217 $total_horas = sprintf('%02d', (int) (floor($this->carga_horaria_disponivel)));
224 218 $total_horas = sprintf('%02d', (int) (floor($this->carga_horaria_disponivel)));
225 219 $total_minutos = sprintf('%02d', (int) ((floatval($this->carga_horaria_disponivel) - floatval($total_horas)) * 60));
... ... @@ -257,29 +251,24 @@ class indice extends clsCadastro
257 251 $this->campoOculto('excluir_periodo', '');
258 252 unset($aux);
259 253  
260   - if (class_exists('clsPmieducarEscola')) {
261   - $obj_escola = new clsPmieducarEscola();
262   - $lista_escola = $obj_escola->lista(null, null, null,
263   - $this->ref_ref_cod_instituicao, null, null, null, null, null, null, 1);
  254 + // Escolas
  255 + $obj_escola = new clsPmieducarEscola();
  256 + $lista_escola = $obj_escola->lista(NULL, NULL, NULL,
  257 + $this->ref_ref_cod_instituicao, NULL, NULL, NULL, NULL, NULL, NULL, 1);
264 258  
265   - if ($lista_escola) {
266   - $opcoes = array('' => 'Selecione');
267   - foreach ($lista_escola as $escola) {
268   - $opcoes[$escola['cod_escola']] = $escola['nome'];
269   - }
  259 + if ($lista_escola) {
  260 + $opcoes = array('' => 'Selecione');
  261 + foreach ($lista_escola as $escola) {
  262 + $opcoes[$escola['cod_escola']] = $escola['nome'];
270 263 }
271 264 }
272   - else {
273   - $registro['ref_cod_escola'] = 'Erro na geração';
274   - echo "<!--\nErro\nClasse não existente: clsPmieducarEscola\n-->";
275   - }
276 265  
277 266 $periodo = array(
278   - '' => 'Selecione',
279 267 1 => 'Matutino',
280 268 2 => 'Vespertino',
281 269 3 => 'Noturno'
282 270 );
  271 + self::$periodos = $periodo;
283 272  
284 273 $this->campoLista('ref_cod_escola', 'Escola', $opcoes, $this->ref_cod_escola,
285 274 '', FALSE, '', '', FALSE, FALSE);
... ... @@ -290,6 +279,9 @@ class indice extends clsCadastro
290 279 $this->campoHora('carga_horaria_alocada', 'Carga Horária',
291 280 $this->carga_horaria_alocada, FALSE);
292 281  
  282 + // Altera a string de descrição original do campo hora
  283 + $this->campos['carga_horaria_alocada'][6] = sprintf('Formato hh:mm (máximo de %d horas por período)', clsPmieducarServidorAlocacao::$cargaHorariaMax);
  284 +
293 285 $this->campoOculto('alocacao_array', serialize($this->alocacao_array));
294 286  
295 287 $this->campoOculto('alocacao_excluida_array', serialize($this->alocacao_excluida_array));
... ... @@ -308,10 +300,10 @@ class indice extends clsCadastro
308 300 $link_excluir = '';
309 301  
310 302 if ($obj_permissoes->permissao_excluir(635, $this->pessoa_logada, 3)) {
311   - $link_excluir = "<a href='#' onclick=\"getElementById('excluir_periodo').value = '{$key}'; getElementById( 'tipoacao' ).value = ''; {$this->__nome}.submit();\"><img src='imagens/nvp_bola_xis.gif' title='Excluir' border=0></a>";
  303 + $link_excluir = "<a href='#' onclick=\"getElementById('excluir_periodo').value = '{$key}'; getElementById('tipoacao').value = ''; {$this->__nome}.submit();\"><img src='imagens/nvp_bola_xis.gif' title='Excluir' border=0></a>";
312 304 }
313 305  
314   - $obj_escola = new clsPmieducarEscola( $alocacao['ref_cod_escola'] );
  306 + $obj_escola = new clsPmieducarEscola($alocacao['ref_cod_escola']);
315 307 $det_escola = $obj_escola->detalhe();
316 308 $det_escola = $det_escola['nome'];
317 309  
... ... @@ -328,6 +320,9 @@ class indice extends clsCadastro
328 320 break;
329 321 }
330 322  
  323 + // Períodos usados na escola
  324 + self::$escolasPeriodos[$alocacao['ref_cod_escola']][$alocacao['periodo']] = $alocacao['periodo'];
  325 +
331 326 $this->campoTextoInv('periodo_' . $key, '', $nm_periodo, 10, 10, FALSE,
332 327 FALSE, TRUE, '', '', '', '', 'periodo');
333 328  
... ... @@ -382,7 +377,7 @@ class indice extends clsCadastro
382 377 $achou = FALSE;
383 378  
384 379 foreach ($this->alocacao_array as $alocacao) {
385   - if ($alocacao['periodo'] == $aux["periodo"]) {
  380 + if ($alocacao['periodo'] == $aux['periodo']) {
386 381 $achou = TRUE;
387 382 }
388 383 }
... ... @@ -403,7 +398,13 @@ class indice extends clsCadastro
403 398 $this->ref_cod_servidor, NULL, NULL, $this->ativo,
404 399 $alocacao['carga_horaria_alocada'], $alocacao['periodo']);
405 400  
406   - $cadastrou = $obj->cadastra();
  401 + $cadastrou = FALSE;
  402 + if (FALSE == $obj->lista(NULL, $this->ref_ref_cod_instituicao,
  403 + NULL, NULL, $alocacao['escola'], $this->ref_cod_servidor, NULL, NULL,
  404 + NULL, NULL, NULL, NULL, $alocacao['periodo'])
  405 + ) {
  406 + $cadastrou = $obj->cadastra();
  407 + }
407 408  
408 409 if (!$cadastrou) {
409 410 $this->mensagem = 'Cadastro não realizado.<br />';
... ... @@ -428,7 +429,6 @@ class indice extends clsCadastro
428 429 function Excluir()
429 430 {
430 431 return FALSE;
431   -
432 432 }
433 433 }
434 434  
... ... @@ -445,6 +445,31 @@ $pagina-&gt;addForm($miolo);
445 445 $pagina->MakeAll();
446 446 ?>
447 447 <script type="text/javascript">
  448 +var escolasPeriodos = <?php print json_encode(indice::$escolasPeriodos); ?>;
  449 +var periodos = <?php print json_encode(indice::$periodos); ?>;
  450 +
  451 +window.onload = function()
  452 +{
  453 + getPeriodos(document.getElementById('ref_cod_escola').value);
  454 +}
  455 +
  456 +document.getElementById('ref_cod_escola').onchange = function()
  457 +{
  458 + getPeriodos(document.getElementById('ref_cod_escola').value);
  459 +}
  460 +
  461 +function getPeriodos(codEscola)
  462 +{
  463 + obj = document.getElementById('periodo');
  464 + obj.length = 0;
  465 +
  466 + for (var ii in periodos) {
  467 + if (!escolasPeriodos[codEscola] || !escolasPeriodos[codEscola][ii]) {
  468 + obj.options[obj.length] = new Option(periodos[ii], i);
  469 + }
  470 + }
  471 +}
  472 +
448 473 function validaHora()
449 474 {
450 475 var carga_horaria = document.getElementById('carga_horaria_alocada').value;
... ... @@ -473,8 +498,14 @@ function validaHora()
473 498 var carga_horaria_alocada_ = document.getElementById('carga_horaria_alocada').value.split(":");
474 499  
475 500 hora_ = Date.UTC(1970, 01, 01, carga_horaria_alocada_[0], carga_horaria_alocada_[1], 0);
  501 + hora_max_ = Date.UTC(1970, 01, 01, <?php print clsPmieducarServidorAlocacao::$cargaHorariaMax ?>, 0, 0);
476 502 hora_restantes_ = Date.UTC(1970, 01, 01, horas_restantes[0], horas_restantes[1], 0);
477 503  
  504 + if (hora_ > hora_max_) {
  505 + alert("O número de horas máximo por período/escola é de 6h.");
  506 + return false;
  507 + }
  508 +
478 509 if (hora_ > hora_restantes_) {
479 510 alert("Atenção número de horas excedem o número de horas disponíveis! Por favor, corrija.");
480 511 document.getElementById('ref_cod_escola').value = '';
... ...
ieducar/intranet/include/pmieducar/clsPmieducarServidorAlocacao.inc.php
... ... @@ -55,6 +55,12 @@ class clsPmieducarServidorAlocacao
55 55 var $periodo;
56 56  
57 57 /**
  58 + * Carga horária máxima para um período de alocação (em horas).
  59 + * @var float
  60 + */
  61 + static $cargaHorariaMax = 6.0;
  62 +
  63 + /**
58 64 * Armazena o total de resultados obtidos na última chamada ao método lista().
59 65 * @var int
60 66 */
... ... @@ -125,89 +131,33 @@ class clsPmieducarServidorAlocacao
125 131 $this->_campos_lista = $this->_todos_campos = 'cod_servidor_alocacao, ref_ref_cod_instituicao, ref_usuario_exc, ref_usuario_cad, ref_cod_escola, ref_cod_servidor, data_cadastro, data_exclusao, ativo, carga_horaria, periodo';
126 132  
127 133 if (is_numeric($ref_usuario_cad)) {
128   - if (class_exists("clsPmieducarUsuario")) {
129   - $tmp_obj = new clsPmieducarUsuario($ref_usuario_cad);
130   - if (method_exists($tmp_obj, "existe")) {
131   - if ($tmp_obj->existe()) {
132   - $this->ref_usuario_cad = $ref_usuario_cad;
133   - }
134   - }
135   - elseif (method_exists($tmp_obj, "detalhe")) {
136   - if ($tmp_obj->detalhe()) {
137   - $this->ref_usuario_cad = $ref_usuario_cad;
138   - }
139   - }
140   - }
141   - else {
142   - if ($db->CampoUnico("SELECT 1 FROM pmieducar.usuario WHERE cod_usuario = '{$ref_usuario_cad}'")) {
143   - $this->ref_usuario_cad = $ref_usuario_cad;
144   - }
  134 + $usuario = new clsPmieducarUsuario($ref_usuario_cad);
  135 + if ($usuario->existe()) {
  136 + $this->ref_usuario_cad = $ref_usuario_cad;
145 137 }
146 138 }
147 139  
148 140 if (is_numeric($ref_usuario_exc)) {
149   - if (class_exists("clsPmieducarUsuario")) {
150   - $tmp_obj = new clsPmieducarUsuario($ref_usuario_exc);
151   - if (method_exists($tmp_obj, "existe")) {
152   - if ($tmp_obj->existe()) {
153   - $this->ref_usuario_exc = $ref_usuario_exc;
154   - }
155   - }
156   - elseif (method_exists($tmp_obj, "detalhe")) {
157   - if ($tmp_obj->detalhe()) {
158   - $this->ref_usuario_exc = $ref_usuario_exc;
159   - }
160   - }
161   - }
162   - else {
163   - if ($db->CampoUnico("SELECT 1 FROM pmieducar.usuario WHERE cod_usuario = '{$ref_usuario_exc}'")) {
164   - $this->ref_usuario_exc = $ref_usuario_exc;
165   - }
  141 + $usuario = new clsPmieducarUsuario($ref_usuario_exc);
  142 + if ($usuario->existe()) {
  143 + $this->ref_usuario_exc = $ref_usuario_exc;
166 144 }
167 145 }
  146 +
168 147 if (is_numeric($ref_cod_escola)) {
169   - if (class_exists("clsPmieducarEscola")) {
170   - $tmp_obj = new clsPmieducarEscola($ref_cod_escola);
171   - if (method_exists($tmp_obj, "existe")) {
172   - if ($tmp_obj->existe()) {
173   - $this->ref_cod_escola = $ref_cod_escola;
174   - }
175   - }
176   - elseif (method_exists($tmp_obj, "detalhe")) {
177   - if ($tmp_obj->detalhe()) {
178   - $this->ref_cod_escola = $ref_cod_escola;
179   - }
180   - }
181   - }
182   - else {
183   - if ($db->CampoUnico("SELECT 1 FROM pmieducar.escola WHERE cod_escola = '{$ref_cod_escola}'")) {
184   - $this->ref_cod_escola = $ref_cod_escola;
185   - }
  148 + $escola = new clsPmieducarEscola($ref_cod_escola);
  149 + if ($escola->existe()) {
  150 + $this->ref_cod_escola = $ref_cod_escola;
186 151 }
187 152 }
188 153  
189 154 if (is_numeric($ref_cod_servidor) && is_numeric($ref_ref_cod_instituicao)) {
190   - if (class_exists("clsPmieducarServidor")) {
191   - $tmp_obj = new clsPmieducarServidor($ref_cod_servidor, NULL, NULL, NULL,
192   - NULL, NULL, NULL, $ref_ref_cod_instituicao);
193   - if (method_exists($tmp_obj, "existe")) {
194   - if ($tmp_obj->existe()) {
195   - $this->ref_cod_servidor = $ref_cod_servidor;
196   - $this->ref_ref_cod_instituicao = $ref_ref_cod_instituicao;
197   - }
198   - }
199   - elseif (method_exists($tmp_obj, "detalhe")) {
200   - if ($tmp_obj->detalhe()) {
201   - $this->ref_cod_servidor = $ref_cod_servidor;
202   - $this->ref_ref_cod_instituicao = $ref_ref_cod_instituicao;
203   - }
204   - }
205   - }
206   - else {
207   - if ($db->CampoUnico("SELECT 1 FROM pmieducar.servidor WHERE cod_servidor = '{$ref_cod_servidor}' AND ref_cod_instituicao = '{$ref_ref_cod_instituicao}'")) {
208   - $this->ref_cod_servidor = $ref_cod_servidor;
209   - $this->ref_ref_cod_instituicao = $ref_ref_cod_instituicao;
210   - }
  155 + $servidor = new clsPmieducarServidor($ref_cod_servidor, NULL, NULL, NULL,
  156 + NULL, NULL, NULL, $ref_ref_cod_instituicao);
  157 +
  158 + if ($servidor->existe()) {
  159 + $this->ref_cod_servidor = $ref_cod_servidor;
  160 + $this->ref_ref_cod_instituicao = $ref_ref_cod_instituicao;
211 161 }
212 162 }
213 163  
... ... @@ -227,8 +177,14 @@ class clsPmieducarServidorAlocacao
227 177 $this->ativo = $ativo;
228 178 }
229 179  
  180 + // Valida a carga horária
230 181 if (is_string($carga_horaria)) {
231   - $this->carga_horaria = $carga_horaria;
  182 + $datetime = explode(':', $carga_horaria);
  183 + $minutos = (((int) $datetime[0]) * 60) + (int) $datetime[1];
  184 +
  185 + if ((self::$cargaHorariaMax * 60) >= $minutos) {
  186 + $this->carga_horaria = $carga_horaria;
  187 + }
232 188 }
233 189  
234 190 if (is_numeric($periodo)) {
... ... @@ -379,7 +335,7 @@ class clsPmieducarServidorAlocacao
379 335 $int_ref_cod_servidor = NULL, $date_data_cadastro_ini = NULL,
380 336 $date_data_cadastro_fim = NULL, $date_data_exclusao_ini = NULL,
381 337 $date_data_exclusao_fim = NULL, $int_ativo = NULL, $int_carga_horaria = NULL,
382   - $int_periodo = NULL,$bool_busca_nome = FALSE, $boo_professor = NULL)
  338 + $int_periodo = NULL, $bool_busca_nome = FALSE, $boo_professor = NULL)
383 339 {
384 340 $filtros = '';
385 341 $whereAnd = ' WHERE ';
... ... @@ -533,7 +489,7 @@ class clsPmieducarServidorAlocacao
533 489 {
534 490 if (is_numeric($this->cod_servidor_alocacao)) {
535 491 $db = new clsBanco();
536   - $db->Consulta( "SELECT {$this->_todos_campos} FROM {$this->_tabela} WHERE cod_servidor_alocacao = '{$this->cod_servidor_alocacao}'" );
  492 + $db->Consulta("SELECT {$this->_todos_campos} FROM {$this->_tabela} WHERE cod_servidor_alocacao = '{$this->cod_servidor_alocacao}'");
537 493 $db->ProximoRegistro();
538 494 return $db->Tupla();
539 495 }
... ...