Loading config/autoload/unicaen-app.global.php +2 −4 Changes for config/autoload/unicaen-app.global.php: 2 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -34,8 +34,8 @@ return [ 'app_infos' => [ 'nom' => "EMC2", 'desc' => "Emploi Mobilité Carrière Compétences", 'version' => "3.2.2", 'date' => "23/05/2023", 'version' => "3.2.3", 'date' => "26/05/2023", // 'liens' => [ // 'COMUE' => [ Loading @@ -45,8 +45,6 @@ return [ // ], ], /** * Période d'exécution de la requête de rafraîchissement de la session utilisateur, en millisecondes. */ Loading module/EntretienProfessionnel/config/merged/campagne.config.php +47 −0 Changes for module/EntretienProfessionnel/config/merged/campagne.config.php: 47 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -61,6 +61,17 @@ return [ CampagnePrivileges::CAMPAGNE_MODIFIER, ], ], [ 'controller' => CampagneController::class, 'action' => [ 'demander-validation-agent', 'demander-validation-superieur', 'demander-validation-autorite', ], 'privileges' => [ CampagnePrivileges::CAMPAGNE_MODIFIER, ], ], [ 'controller' => CampagneController::class, 'action' => [ Loading Loading @@ -160,6 +171,42 @@ return [ ], ], ], 'demander-validation-agent' => [ 'type' => Segment::class, 'may_terminate' => true, 'options' => [ 'route' => '/demander-validation-agent/:campagne', 'defaults' => [ /** @see CampagneController::demanderValidationAgentAction() */ 'controller' => CampagneController::class, 'action' => 'demander-validation-agent', ], ], ], 'demander-validation-superieur' => [ 'type' => Segment::class, 'may_terminate' => true, 'options' => [ 'route' => '/demander-validation-superieur/:campagne', 'defaults' => [ /** @see CampagneController::demanderValidationSuperieurAction() */ 'controller' => CampagneController::class, 'action' => 'demander-validation-superieur', ], ], ], 'demander-validation-autorite' => [ 'type' => Segment::class, 'may_terminate' => true, 'options' => [ 'route' => '/demander-validation-autorite/:campagne', 'defaults' => [ /** @see CampagneController::demanderValidationAutoriteAction() */ 'controller' => CampagneController::class, 'action' => 'demander-validation-autorite', ], ], ], 'historiser' => [ 'type' => Segment::class, 'may_terminate' => true, Loading module/EntretienProfessionnel/src/EntretienProfessionnel/Controller/CampagneController.php +78 −0 Changes for module/EntretienProfessionnel/src/EntretienProfessionnel/Controller/CampagneController.php: 78 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ namespace EntretienProfessionnel\Controller; use Application\Entity\Db\Agent; use Application\Entity\Db\AgentAutorite; use Application\Service\Agent\AgentServiceAwareTrait; use DateInterval; use DateTime; Loading Loading @@ -170,6 +171,83 @@ class CampagneController extends AbstractActionController { return $vm; } /** Action de la page d'affichage d'une campagne ******************************************************************/ public function demanderValidationAutoriteAction() : ViewModel { $campagne = $this->getCampagneService()->getRequestedCampagne($this); $enAttente = $this->getCampagneService()->getEntretiensEnAttenteAutorite($campagne); $entretiens = []; $problemes = []; $listes = []; foreach ($enAttente as $entretien) { $agent = $entretien->getAgent(); $autorites = array_map(function (AgentAutorite $aa) { return $aa->getAutorite(); }, $agent->getAutorites()); $autorites = array_diff($autorites, [$entretien->getResponsable()]); if (!empty($autorites)) { foreach ($autorites as $autorite) { $listes[$autorite->getId()] = $autorite; $entretiens[$autorite->getId()][] = $entretien; } } else { $problemes[] = $entretien; } } $count = 0; $texte = "Liste des notifications :"; $texte .= "<ul>"; foreach ($listes as $autorite) { $agent = $entretien->getAgent(); $mail = $this->getNotificationService()->triggerRappelValidationAutorite($autorite, $entretiens[$autorite->getId()]); $texte .= "<li> Notification faite vers ".$agent->getDenomination(). " (".$agent->getEmail().") mail#".$mail->getId(). "</li>"; $count++; } $texte .= "</ul>"; $texte .= $count . " notification·s <br/>"; $texte .= "Liste des problèmes : "; $texte .= "<ul>"; foreach ($problemes as $probleme) { } $texte .= "</ul>"; $vm = new ViewModel([ 'title' => "Rapport de notification", 'reponse' => $texte, ]); $vm->setTemplate('default/reponse'); return $vm; } public function demanderValidationAgentAction() : ViewModel { $campagne = $this->getCampagneService()->getRequestedCampagne($this); $enAttente = $this->getCampagneService()->getEntretiensEnAttenteAgent($campagne); $count = 0; $texte = "Liste des notifications :"; $texte .= "<ul>"; foreach ($enAttente as $entretien) { $agent = $entretien->getAgent(); $mail = $this->getNotificationService()->triggerRappelValidationAgent($entretien); $texte .= "<li> Notification faite vers ".$agent->getDenomination(). " (".$agent->getEmail().") mail#".$mail->getId(). "</li>"; $count++; } $texte .= "</ul>"; $texte .= $count . " notification·s"; $vm = new ViewModel([ 'title' => "Rapport de notification", 'reponse' => $texte, ]); $vm->setTemplate('default/reponse'); return $vm; } /** Page associée à la campagne dans l'écran des structures *******************************************************/ /** * Action affichant une campagne d'entretien professionnel pour une structure * Attention : les agents doivent être complétement hydratés sinon les calculs d'affectations, de grades et d'obligation seront erronés Loading module/EntretienProfessionnel/src/EntretienProfessionnel/Provider/Template/MailTemplates.php +4 −0 Changes for module/EntretienProfessionnel/src/EntretienProfessionnel/Provider/Template/MailTemplates.php: 4 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -21,4 +21,8 @@ class MailTemplates { const RAPPEL_CAMPAGNE_AVANCEMENT_SUPERIEUR = 'NOTIFICATION_RAPPEL_CAMPAGNE_SUPERIEUR'; const RAPPEL_ENTRETIEN_AGENT = 'NOTIFICATION_RAPPEL_ENTRETIEN'; const RAPPEL_ATTENTE_VALIDATION_SUPERIEUR = 'NOTIFICATION_RAPPEL_ATTENTE_VALIDATION_SUPERIEUR'; const RAPPEL_ATTENTE_VALIDATION_AUTORITE = 'NOTIFICATION_RAPPEL_ATTENTE_VALIDATION_AUTORITE'; const RAPPEL_ATTENTE_VALIDATION_AGENT = 'NOTIFICATION_RAPPEL_ATTENTE_VALIDATION_AGENT'; } No newline at end of file module/EntretienProfessionnel/src/EntretienProfessionnel/Service/Notification/NotificationService.php +34 −0 Changes for module/EntretienProfessionnel/src/EntretienProfessionnel/Service/Notification/NotificationService.php: 34 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -283,4 +283,38 @@ class NotificationService { return $mail; } /** Notifications associées à la demande de validation (en retard) d'entretiens profesionnels *****/ public function triggerRappelValidationSuperieur(?EntretienProfessionnel $entretien) : Mail { $vars = ['campagne' => $entretien->getCampagne(), 'entretien' => $entretien, 'agent' => $entretien->getAgent(), 'UrlService' => $this->getUrlService()]; $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::RAPPEL_ATTENTE_VALIDATION_SUPERIEUR, $vars); $mail = $this->getMailService()->sendMail($this->getEmailAgent($entretien), $rendu->getSujet(), $rendu->getCorps()); $mail->setMotsClefs([$entretien->generateTag(), $rendu->getTemplate()->generateTag()]); $this->getMailService()->update($mail); return $mail; } public function triggerRappelValidationAutorite(?EntretienProfessionnel $entretien) : Mail { $vars = ['campagne' => $entretien->getCampagne(), 'entretien' => $entretien, 'agent' => $entretien->getAgent(), 'UrlService' => $this->getUrlService()]; $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::RAPPEL_ATTENTE_VALIDATION_AUTORITE, $vars); $mail = $this->getMailService()->sendMail($this->getEmailAgent($entretien), $rendu->getSujet(), $rendu->getCorps()); $mail->setMotsClefs([$entretien->generateTag(), $rendu->getTemplate()->generateTag()]); $this->getMailService()->update($mail); return $mail; } public function triggerRappelValidationAgent(?EntretienProfessionnel $entretien) : Mail { $vars = ['campagne' => $entretien->getCampagne(), 'entretien' => $entretien, 'agent' => $entretien->getAgent(), 'UrlService' => $this->getUrlService()]; $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::RAPPEL_ATTENTE_VALIDATION_AGENT, $vars); $mail = $this->getMailService()->sendMail($this->getEmailAgent($entretien), $rendu->getSujet(), $rendu->getCorps()); $mail->setMotsClefs([$entretien->generateTag(), $rendu->getTemplate()->generateTag()]); $this->getMailService()->update($mail); return $mail; } } No newline at end of file Loading
config/autoload/unicaen-app.global.php +2 −4 Changes for config/autoload/unicaen-app.global.php: 2 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -34,8 +34,8 @@ return [ 'app_infos' => [ 'nom' => "EMC2", 'desc' => "Emploi Mobilité Carrière Compétences", 'version' => "3.2.2", 'date' => "23/05/2023", 'version' => "3.2.3", 'date' => "26/05/2023", // 'liens' => [ // 'COMUE' => [ Loading @@ -45,8 +45,6 @@ return [ // ], ], /** * Période d'exécution de la requête de rafraîchissement de la session utilisateur, en millisecondes. */ Loading
module/EntretienProfessionnel/config/merged/campagne.config.php +47 −0 Changes for module/EntretienProfessionnel/config/merged/campagne.config.php: 47 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -61,6 +61,17 @@ return [ CampagnePrivileges::CAMPAGNE_MODIFIER, ], ], [ 'controller' => CampagneController::class, 'action' => [ 'demander-validation-agent', 'demander-validation-superieur', 'demander-validation-autorite', ], 'privileges' => [ CampagnePrivileges::CAMPAGNE_MODIFIER, ], ], [ 'controller' => CampagneController::class, 'action' => [ Loading Loading @@ -160,6 +171,42 @@ return [ ], ], ], 'demander-validation-agent' => [ 'type' => Segment::class, 'may_terminate' => true, 'options' => [ 'route' => '/demander-validation-agent/:campagne', 'defaults' => [ /** @see CampagneController::demanderValidationAgentAction() */ 'controller' => CampagneController::class, 'action' => 'demander-validation-agent', ], ], ], 'demander-validation-superieur' => [ 'type' => Segment::class, 'may_terminate' => true, 'options' => [ 'route' => '/demander-validation-superieur/:campagne', 'defaults' => [ /** @see CampagneController::demanderValidationSuperieurAction() */ 'controller' => CampagneController::class, 'action' => 'demander-validation-superieur', ], ], ], 'demander-validation-autorite' => [ 'type' => Segment::class, 'may_terminate' => true, 'options' => [ 'route' => '/demander-validation-autorite/:campagne', 'defaults' => [ /** @see CampagneController::demanderValidationAutoriteAction() */ 'controller' => CampagneController::class, 'action' => 'demander-validation-autorite', ], ], ], 'historiser' => [ 'type' => Segment::class, 'may_terminate' => true, Loading
module/EntretienProfessionnel/src/EntretienProfessionnel/Controller/CampagneController.php +78 −0 Changes for module/EntretienProfessionnel/src/EntretienProfessionnel/Controller/CampagneController.php: 78 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ namespace EntretienProfessionnel\Controller; use Application\Entity\Db\Agent; use Application\Entity\Db\AgentAutorite; use Application\Service\Agent\AgentServiceAwareTrait; use DateInterval; use DateTime; Loading Loading @@ -170,6 +171,83 @@ class CampagneController extends AbstractActionController { return $vm; } /** Action de la page d'affichage d'une campagne ******************************************************************/ public function demanderValidationAutoriteAction() : ViewModel { $campagne = $this->getCampagneService()->getRequestedCampagne($this); $enAttente = $this->getCampagneService()->getEntretiensEnAttenteAutorite($campagne); $entretiens = []; $problemes = []; $listes = []; foreach ($enAttente as $entretien) { $agent = $entretien->getAgent(); $autorites = array_map(function (AgentAutorite $aa) { return $aa->getAutorite(); }, $agent->getAutorites()); $autorites = array_diff($autorites, [$entretien->getResponsable()]); if (!empty($autorites)) { foreach ($autorites as $autorite) { $listes[$autorite->getId()] = $autorite; $entretiens[$autorite->getId()][] = $entretien; } } else { $problemes[] = $entretien; } } $count = 0; $texte = "Liste des notifications :"; $texte .= "<ul>"; foreach ($listes as $autorite) { $agent = $entretien->getAgent(); $mail = $this->getNotificationService()->triggerRappelValidationAutorite($autorite, $entretiens[$autorite->getId()]); $texte .= "<li> Notification faite vers ".$agent->getDenomination(). " (".$agent->getEmail().") mail#".$mail->getId(). "</li>"; $count++; } $texte .= "</ul>"; $texte .= $count . " notification·s <br/>"; $texte .= "Liste des problèmes : "; $texte .= "<ul>"; foreach ($problemes as $probleme) { } $texte .= "</ul>"; $vm = new ViewModel([ 'title' => "Rapport de notification", 'reponse' => $texte, ]); $vm->setTemplate('default/reponse'); return $vm; } public function demanderValidationAgentAction() : ViewModel { $campagne = $this->getCampagneService()->getRequestedCampagne($this); $enAttente = $this->getCampagneService()->getEntretiensEnAttenteAgent($campagne); $count = 0; $texte = "Liste des notifications :"; $texte .= "<ul>"; foreach ($enAttente as $entretien) { $agent = $entretien->getAgent(); $mail = $this->getNotificationService()->triggerRappelValidationAgent($entretien); $texte .= "<li> Notification faite vers ".$agent->getDenomination(). " (".$agent->getEmail().") mail#".$mail->getId(). "</li>"; $count++; } $texte .= "</ul>"; $texte .= $count . " notification·s"; $vm = new ViewModel([ 'title' => "Rapport de notification", 'reponse' => $texte, ]); $vm->setTemplate('default/reponse'); return $vm; } /** Page associée à la campagne dans l'écran des structures *******************************************************/ /** * Action affichant une campagne d'entretien professionnel pour une structure * Attention : les agents doivent être complétement hydratés sinon les calculs d'affectations, de grades et d'obligation seront erronés Loading
module/EntretienProfessionnel/src/EntretienProfessionnel/Provider/Template/MailTemplates.php +4 −0 Changes for module/EntretienProfessionnel/src/EntretienProfessionnel/Provider/Template/MailTemplates.php: 4 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -21,4 +21,8 @@ class MailTemplates { const RAPPEL_CAMPAGNE_AVANCEMENT_SUPERIEUR = 'NOTIFICATION_RAPPEL_CAMPAGNE_SUPERIEUR'; const RAPPEL_ENTRETIEN_AGENT = 'NOTIFICATION_RAPPEL_ENTRETIEN'; const RAPPEL_ATTENTE_VALIDATION_SUPERIEUR = 'NOTIFICATION_RAPPEL_ATTENTE_VALIDATION_SUPERIEUR'; const RAPPEL_ATTENTE_VALIDATION_AUTORITE = 'NOTIFICATION_RAPPEL_ATTENTE_VALIDATION_AUTORITE'; const RAPPEL_ATTENTE_VALIDATION_AGENT = 'NOTIFICATION_RAPPEL_ATTENTE_VALIDATION_AGENT'; } No newline at end of file
module/EntretienProfessionnel/src/EntretienProfessionnel/Service/Notification/NotificationService.php +34 −0 Changes for module/EntretienProfessionnel/src/EntretienProfessionnel/Service/Notification/NotificationService.php: 34 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -283,4 +283,38 @@ class NotificationService { return $mail; } /** Notifications associées à la demande de validation (en retard) d'entretiens profesionnels *****/ public function triggerRappelValidationSuperieur(?EntretienProfessionnel $entretien) : Mail { $vars = ['campagne' => $entretien->getCampagne(), 'entretien' => $entretien, 'agent' => $entretien->getAgent(), 'UrlService' => $this->getUrlService()]; $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::RAPPEL_ATTENTE_VALIDATION_SUPERIEUR, $vars); $mail = $this->getMailService()->sendMail($this->getEmailAgent($entretien), $rendu->getSujet(), $rendu->getCorps()); $mail->setMotsClefs([$entretien->generateTag(), $rendu->getTemplate()->generateTag()]); $this->getMailService()->update($mail); return $mail; } public function triggerRappelValidationAutorite(?EntretienProfessionnel $entretien) : Mail { $vars = ['campagne' => $entretien->getCampagne(), 'entretien' => $entretien, 'agent' => $entretien->getAgent(), 'UrlService' => $this->getUrlService()]; $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::RAPPEL_ATTENTE_VALIDATION_AUTORITE, $vars); $mail = $this->getMailService()->sendMail($this->getEmailAgent($entretien), $rendu->getSujet(), $rendu->getCorps()); $mail->setMotsClefs([$entretien->generateTag(), $rendu->getTemplate()->generateTag()]); $this->getMailService()->update($mail); return $mail; } public function triggerRappelValidationAgent(?EntretienProfessionnel $entretien) : Mail { $vars = ['campagne' => $entretien->getCampagne(), 'entretien' => $entretien, 'agent' => $entretien->getAgent(), 'UrlService' => $this->getUrlService()]; $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::RAPPEL_ATTENTE_VALIDATION_AGENT, $vars); $mail = $this->getMailService()->sendMail($this->getEmailAgent($entretien), $rendu->getSujet(), $rendu->getCorps()); $mail->setMotsClefs([$entretien->generateTag(), $rendu->getTemplate()->generateTag()]); $this->getMailService()->update($mail); return $mail; } } No newline at end of file