From 781a17836d6dc1e4126fb24e32a57a35c46bc61f Mon Sep 17 00:00:00 2001 From: Jean-Philippe Metivier <jean-philippe.metivier@unicaen.fr> Date: Tue, 18 Mar 2025 11:43:44 +0100 Subject: [PATCH] =?UTF-8?q?Assertion=20pour=20les=20demandes=20externes=20?= =?UTF-8?q?+=20fix=20pour=20la=20mise=20en=20copies=20de=20sup=C3=A9rieurs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/merged/demande-externe.config.php | 4 ++ .../src/Assertion/DemandeExterneAssertion.php | 38 ++++++++++++++----- .../Notification/NotificationService.php | 1 + 3 files changed, 34 insertions(+), 9 deletions(-) diff --git a/module/DemandeExterne/config/merged/demande-externe.config.php b/module/DemandeExterne/config/merged/demande-externe.config.php index c4f88ce0..2e993953 100644 --- a/module/DemandeExterne/config/merged/demande-externe.config.php +++ b/module/DemandeExterne/config/merged/demande-externe.config.php @@ -40,6 +40,10 @@ return [ DemandeexternePrivileges::DEMANDEEXTERNE_SUPPRIMER, DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_AGENT, DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_VALIDEUR, + DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_GESTIONNAIRE, + DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_RESPONSABLE, + DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DRH, + DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DGS, DemandeexternePrivileges::DEMANDEEXTERNE_GERER, ], 'resources' => ['DemandeExterne'], diff --git a/module/DemandeExterne/src/Assertion/DemandeExterneAssertion.php b/module/DemandeExterne/src/Assertion/DemandeExterneAssertion.php index fa24ac8c..346ef17f 100644 --- a/module/DemandeExterne/src/Assertion/DemandeExterneAssertion.php +++ b/module/DemandeExterne/src/Assertion/DemandeExterneAssertion.php @@ -74,9 +74,6 @@ class DemandeExterneAssertion extends AbstractAssertion switch ($role->getRoleId()) { case AppRoleProvider::ADMIN_TECH : case AppRoleProvider::ADMIN_FONC : - case AppRoleProvider::DRH : - case AppRoleProvider::DGS : - case FormationRoles::GESTIONNAIRE_FORMATION : case FormationRoles::RESPONSABLE_FORMATION : return true; case AgentRoleProvider::ROLE_AGENT : @@ -85,14 +82,28 @@ class DemandeExterneAssertion extends AbstractAssertion case AgentRoleProvider::ROLE_VALIDATEUR : $valideurs = array_map(function (AgentValidateur $a) { return $a->getValidateur(); }, $this->getAgentValidateurService()->getAgentsValidateursByAgent($agent)); $isValideur = DemandeExterneAssertion::userInAgents($user, $valideurs); - switch ($privilege) { - case DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_VALIDEUR : - return $isValideur and ($demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_AGENT)); - default : - return $isValideur; - } + return match ($privilege) { + DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_VALIDEUR => $isValideur and ($demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_AGENT)), + default => $isValideur, + }; + case FormationRoles::GESTIONNAIRE_FORMATION : + return match ($privilege) { + DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_GESTIONNAIRE => $demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_VALIDEUR), + default => true + }; + case AppRoleProvider::DRH : + return match ($privilege) { + DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DRH => $demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_RESPONSABLE), + default => true + }; + case AppRoleProvider::DGS : + return match ($privilege) { + DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DGS => $demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_DRH), + default => true + }; case RoleProvider::RESPONSABLE : if ($privilege === DemandeexternePrivileges::DEMANDEEXTERNE_MODIFIER and !$demande->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS)) return false; + if ($privilege === DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_RESPONSABLE) return $demande->isEtatActif(DemandeExterneEtats::ETAT_VALIDATION_GESTIONNAIRE); $structures = $this->getAgentService()->computesStructures($agent); $responsables = DemandeExterneAssertion::agentInStructures(RoleProvider::RESPONSABLE, $structures); return DemandeExterneAssertion::userInAgents($user, $responsables); @@ -140,9 +151,18 @@ class DemandeExterneAssertion extends AbstractAssertion 'valider-valideur', 'refuser-valideur' => $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_VALIDEUR), + 'valider-gestionnaire', + 'refuser-gestionnaire' + => $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_GESTIONNAIRE), + 'valider-responsable', + 'refuser-responsable' + => $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_RESPONSABLE), 'valider-drh', 'refuser-drh' => $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DRH), + 'valider-dgs', + 'refuser-dgs' + => $this->computeAssertion($entity, DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DGS), default => true, }; } diff --git a/module/Formation/src/Formation/Service/Notification/NotificationService.php b/module/Formation/src/Formation/Service/Notification/NotificationService.php index f2daee31..4b4f9146 100644 --- a/module/Formation/src/Formation/Service/Notification/NotificationService.php +++ b/module/Formation/src/Formation/Service/Notification/NotificationService.php @@ -285,6 +285,7 @@ class NotificationService $superieurs = $this->getAgentValidateurService()->getAgentsValidateursByAgent($agent); foreach ($superieurs as $superieur) $copie[] = $superieur->getValidateur()->getEmail(); } + $copie = (empty($copie)) ? null : implode(",", $copie); if ($inscrit->getIndividu() !== null AND $inscrit->getIndividu()->getEmail() !== null) { $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::SESSION_CONVOCATION, $vars); -- GitLab