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