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 | } |