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 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 473 $whereAnd = ' WHERE ';
446 474 $filtros = '';
447 475 $tabela_compl = '';
... ... @@ -609,7 +637,7 @@ class clsPmieducarServidor
609 637 FROM pmieducar.quadro_horario_horarios qhh
610 638 WHERE qhh.ref_cod_instituicao_servidor = '$int_ref_cod_instituicao'
611 639 AND qhh.ref_cod_escola = '$int_ref_cod_escola'
612   - AND hora_inicial >= '08:00'
  640 + AND hora_inicial >= '06:00'
613 641 AND hora_inicial <= '12:00'
614 642 AND qhh.ativo = '1'
615 643 AND qhh.dia_semana <> '$int_dia_semana'
... ... @@ -619,7 +647,7 @@ class clsPmieducarServidor
619 647 FROM pmieducar.quadro_horario_horarios_aux qhha
620 648 WHERE qhha.ref_cod_instituicao_servidor = '$int_ref_cod_instituicao'
621 649 AND qhha.ref_cod_escola = $int_ref_cod_escola
622   - AND hora_inicial >= '08:00'
  650 + AND hora_inicial >= '06:00'
623 651 AND hora_inicial <= '12:00'
624 652 AND qhha.ref_servidor = a.ref_cod_servidor
625 653 AND identificador = '$int_identificador'
... ... @@ -686,8 +714,9 @@ class clsPmieducarServidor
686 714 AND qhh.ref_cod_escola = '$int_ref_cod_escola'
687 715 AND qhh.ativo = '1'
688 716 AND hora_inicial >= '18:00'
689   - AND hora_inicial <= '23:00'
  717 + AND hora_inicial <= '23:59'
690 718 AND qhh.dia_semana <> '$int_dia_semana'
  719 + AND qhh.ref_servidor = a.ref_cod_servidor
691 720 GROUP BY qhh.ref_servidor ),'00:00') + '$str_hr_not' + COALESCE(
692 721 (SELECT SUM( qhha.hora_final - qhha.hora_inicial )
693 722 FROM pmieducar.quadro_horario_horarios_aux qhha
... ... @@ -695,7 +724,7 @@ class clsPmieducarServidor
695 724 AND qhha.ref_cod_escola = '$int_ref_cod_escola'
696 725 AND qhha.ref_servidor = a.ref_cod_servidor
697 726 AND hora_inicial >= '18:00'
698   - AND hora_inicial <= '23:00'
  727 + AND hora_inicial <= '23:59'
699 728 AND identificador = '$int_identificador'
700 729 GROUP BY qhha.ref_servidor),'00:00') )";
701 730 }
... ...