Commit e8b4a49ee7767de12de90ac666a8d1157c98b942

Authored by Eriksen Costa
1 parent 6b85cbc0
Exists in master

Atualizações diversas na classe {{{clsPmieducarServidor}}}:

 * Subqueries para a seleção de servidores aptos a lecionar um componente curricular atualizados: período matutino a partir das 6 horas e período noturno encerrando as 23:59
   * O horário de início e fim do array {{{$array_horario}}} é analisado para determinar que aulas iniciadas em um período (matutino, por exemplo), sejam consideradas apenas daquele período, facilitando a alocação dos servidores docentes, evitando a alocação de horário fragmentada (ex: 20 horas matutino e 4 horas vespertino onde 4 aulas semanais iniciam às 11:30 e terminem às 12:30)
 * Subquery para o período noturno corrigida: join para evitar que múltiplos registros fossem retornados, evitando erro de SQL
ieducar/intranet/include/pmieducar/clsPmieducarServidor.inc.php
@@ -442,6 +442,34 @@ class clsPmieducarServidor @@ -442,6 +442,34 @@ class clsPmieducarServidor
442 $int_ref_cod_subnivel = NULL 442 $int_ref_cod_subnivel = NULL
443 ) { 443 ) {
444 444
  445 + // Extrai as informações de hora inicial e hora final, para definir melhor
  446 + // o lookup de carga horária de servidores alocados, para operações como
  447 + // a alocação de docente em quadro de horário. Isso é necessário para que
  448 + // não seja necessário alocar o docente em dois períodos diferentes apenas
  449 + // porque o horário final de uma aula extrapola o limite de horário do
  450 + // período.
  451 + if (is_array($array_horario) && 3 >= count($array_horario)) {
  452 + $horarioInicial = explode(':', $array_horario[1]);
  453 + $horarioFinal = explode(':', $array_horario[2]);
  454 +
  455 + $horarioInicial = $horarioInicial[0] * 60 + $horarioInicial[1];
  456 + $horarioFinal = $horarioFinal[0] * 60 + $horarioFinal[1];
  457 +
  458 + // Caso o horário definido inicie no período "matutino" e se encerre no
  459 + // período "vespertino", irá considerar como "matutino" apenas.
  460 + $matutinoLimite = 12 * 60;
  461 + if ($horarioInicial < $matutinoLimite && $horarioFinal > $matutinoLimite) {
  462 + $vespertino = false;
  463 + }
  464 +
  465 + // Caso o horário definido inicie no período "vespertino" e se encerre
  466 + // no período "noturno", irá considerar como "vespertino" apenas.
  467 + $vespertinoLimite = 18 * 60;
  468 + if ($horarioInicial < $vespertinoLimite && $horarioFinal > $vespertinoLimite) {
  469 + $noturno = false;
  470 + }
  471 + }
  472 +
445 $whereAnd = ' WHERE '; 473 $whereAnd = ' WHERE ';
446 $filtros = ''; 474 $filtros = '';
447 $tabela_compl = ''; 475 $tabela_compl = '';
@@ -609,7 +637,7 @@ class clsPmieducarServidor @@ -609,7 +637,7 @@ class clsPmieducarServidor
609 FROM pmieducar.quadro_horario_horarios qhh 637 FROM pmieducar.quadro_horario_horarios qhh
610 WHERE qhh.ref_cod_instituicao_servidor = '$int_ref_cod_instituicao' 638 WHERE qhh.ref_cod_instituicao_servidor = '$int_ref_cod_instituicao'
611 AND qhh.ref_cod_escola = '$int_ref_cod_escola' 639 AND qhh.ref_cod_escola = '$int_ref_cod_escola'
612 - AND hora_inicial >= '08:00' 640 + AND hora_inicial >= '06:00'
613 AND hora_inicial <= '12:00' 641 AND hora_inicial <= '12:00'
614 AND qhh.ativo = '1' 642 AND qhh.ativo = '1'
615 AND qhh.dia_semana <> '$int_dia_semana' 643 AND qhh.dia_semana <> '$int_dia_semana'
@@ -619,7 +647,7 @@ class clsPmieducarServidor @@ -619,7 +647,7 @@ class clsPmieducarServidor
619 FROM pmieducar.quadro_horario_horarios_aux qhha 647 FROM pmieducar.quadro_horario_horarios_aux qhha
620 WHERE qhha.ref_cod_instituicao_servidor = '$int_ref_cod_instituicao' 648 WHERE qhha.ref_cod_instituicao_servidor = '$int_ref_cod_instituicao'
621 AND qhha.ref_cod_escola = $int_ref_cod_escola 649 AND qhha.ref_cod_escola = $int_ref_cod_escola
622 - AND hora_inicial >= '08:00' 650 + AND hora_inicial >= '06:00'
623 AND hora_inicial <= '12:00' 651 AND hora_inicial <= '12:00'
624 AND qhha.ref_servidor = a.ref_cod_servidor 652 AND qhha.ref_servidor = a.ref_cod_servidor
625 AND identificador = '$int_identificador' 653 AND identificador = '$int_identificador'
@@ -686,8 +714,9 @@ class clsPmieducarServidor @@ -686,8 +714,9 @@ class clsPmieducarServidor
686 AND qhh.ref_cod_escola = '$int_ref_cod_escola' 714 AND qhh.ref_cod_escola = '$int_ref_cod_escola'
687 AND qhh.ativo = '1' 715 AND qhh.ativo = '1'
688 AND hora_inicial >= '18:00' 716 AND hora_inicial >= '18:00'
689 - AND hora_inicial <= '23:00' 717 + AND hora_inicial <= '23:59'
690 AND qhh.dia_semana <> '$int_dia_semana' 718 AND qhh.dia_semana <> '$int_dia_semana'
  719 + AND qhh.ref_servidor = a.ref_cod_servidor
691 GROUP BY qhh.ref_servidor ),'00:00') + '$str_hr_not' + COALESCE( 720 GROUP BY qhh.ref_servidor ),'00:00') + '$str_hr_not' + COALESCE(
692 (SELECT SUM( qhha.hora_final - qhha.hora_inicial ) 721 (SELECT SUM( qhha.hora_final - qhha.hora_inicial )
693 FROM pmieducar.quadro_horario_horarios_aux qhha 722 FROM pmieducar.quadro_horario_horarios_aux qhha
@@ -695,7 +724,7 @@ class clsPmieducarServidor @@ -695,7 +724,7 @@ class clsPmieducarServidor
695 AND qhha.ref_cod_escola = '$int_ref_cod_escola' 724 AND qhha.ref_cod_escola = '$int_ref_cod_escola'
696 AND qhha.ref_servidor = a.ref_cod_servidor 725 AND qhha.ref_servidor = a.ref_cod_servidor
697 AND hora_inicial >= '18:00' 726 AND hora_inicial >= '18:00'
698 - AND hora_inicial <= '23:00' 727 + AND hora_inicial <= '23:59'
699 AND identificador = '$int_identificador' 728 AND identificador = '$int_identificador'
700 GROUP BY qhha.ref_servidor),'00:00') )"; 729 GROUP BY qhha.ref_servidor),'00:00') )";
701 } 730 }