Commit e8b4a49ee7767de12de90ac666a8d1157c98b942
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
Showing
1 changed file
with
33 additions
and
4 deletions
Show diff stats
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 | } |