From 22bbaa0ed34b2b88ad81c7e268d5c05fd9eddc0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laurent=20L=C3=A9cluse?= <laurent.lecluse@unicaen.fr> Date: Wed, 26 Apr 2023 15:58:24 +0200 Subject: [PATCH] =?UTF-8?q?#46387=20on=20peut=20saisir=20des=20d=C3=A9roga?= =?UTF-8?q?tions=20avant=20d'avoir=20des=20heures=20=C3=A0=20plafonner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module/Plafond/src/Service/PlafondService.php | 48 +++++++++++++------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/module/Plafond/src/Service/PlafondService.php b/module/Plafond/src/Service/PlafondService.php index 3f923e1c5c..aa1ee7205b 100755 --- a/module/Plafond/src/Service/PlafondService.php +++ b/module/Plafond/src/Service/PlafondService.php @@ -107,25 +107,43 @@ class PlafondService extends AbstractEntityService - /** - * @param TypeVolumeHoraire $typeVolumeHoraire - * @param Structure|Intervenant|ElementPedagogique|VolumeHoraire|FonctionReferentiel $entity - * - * @return PlafondControle[] - */ public function derogations(TypeVolumeHoraire $typeVolumeHoraire, Intervenant $intervenant): array { - $sqls = []; - - $sqls[] = $this->makeControleQuery($typeVolumeHoraire, $intervenant, null, false, false, false); - //$sqls[] = $this->makeControleQuery($typeVolumeHoraire, $intervenant, PlafondPerimetre::STRUCTURE, false, false, false); - //$sqls[] = $this->makeControleQuery($typeVolumeHoraire, $intervenant, PlafondPerimetre::ELEMENT, false, false, false); - //$sqls[] = $this->makeControleQuery($typeVolumeHoraire, $intervenant, PlafondPerimetre::REFERENTIEL, false, false, false); - //$sqls[] = $this->makeControleQuery($typeVolumeHoraire, $intervenant, PlafondPerimetre::VOLUME_HORAIRE, false, false, false); + $sql = " + SELECT + p.id id, + p.numero numero, + p.libelle libelle, + p.message message, + pp.code perimetre, + pe.code etat, + CASE pe.code WHEN 'bloquant' THEN 1 ELSE 0 END bloquant, + CASE WHEN COALESCE(tpi.heures,0) - ps.heures > 0 THEN 1 ELSE 0 END depassement, + COALESCE(tpi.heures,0) heures, + ps.heures plafond, + COALESCE(pd.heures,0) derogation + FROM + intervenant i + JOIN type_volume_horaire tvh ON 1=1 + JOIN statut s ON s.id = i.statut_id + JOIN plafond_statut ps ON ps.statut_id = s.id AND ps.histo_destruction IS NULL + JOIN plafond p ON p.id = ps.plafond_id + JOIN plafond_perimetre pp ON pp.id = p.plafond_perimetre_id + JOIN plafond_etat pe ON pe.id = CASE tvh.code WHEN 'PREVU' THEN ps.plafond_etat_prevu_id WHEN 'REALISE' THEN ps.plafond_etat_realise_id ELSE 0 END + LEFT JOIN tbl_plafond_intervenant tpi ON tpi.intervenant_id = i.id AND tpi.plafond_id = p.id AND tpi.type_volume_horaire_id = tvh.id + LEFT JOIN plafond_derogation pd ON pd.histo_destruction IS NULL AND pd.intervenant_id = i.id AND pd.plafond_id = p.id + WHERE + i.id = :intervenant + AND tvh.id = :typeVolumeHoraire + AND pe.code NOT IN ('desactive', 'indicateur') + "; - $sql = implode("\n\nUNION ALL\n\n", $sqls); + $params = [ + 'intervenant' => $intervenant->getId(), + 'typeVolumeHoraire' => $typeVolumeHoraire->getId(), + ]; + $res = $this->getEntityManager()->getConnection()->fetchAllAssociative($sql, $params); - $res = $this->getEntityManager()->getConnection()->fetchAllAssociative($sql); $depassements = []; foreach ($res as $r) { $depassements[] = PlafondControle::fromArray($r); -- GitLab