From af963075a8125a9d6441c06aaedd143871bbe9f0 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Metivier <jean-philippe.metivier@unicaen.fr> Date: Mon, 10 Mar 2025 10:59:46 +0100 Subject: [PATCH] =?UTF-8?q?D=C3=A9but=20refonte=20des=20page=20de=20gestio?= =?UTF-8?q?n=20des=20DE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/DemandeExterneController.php | 30 +++ .../DemandeExterne/DemandeExterneService.php | 2 +- .../partial/demande-externe-array.phtml | 86 +++++--- .../demande-externe/parapheur.phtml | 200 ++++++++++++++---- .../Controller/PlanDeFormationController.php | 2 +- .../PlanDeFormationImportationForm.php | 17 +- .../Notification/NotificationService.php | 1 + 7 files changed, 242 insertions(+), 96 deletions(-) diff --git a/module/DemandeExterne/src/Controller/DemandeExterneController.php b/module/DemandeExterne/src/Controller/DemandeExterneController.php index 5ddcb6f7..c225b807 100644 --- a/module/DemandeExterne/src/Controller/DemandeExterneController.php +++ b/module/DemandeExterne/src/Controller/DemandeExterneController.php @@ -84,6 +84,7 @@ class DemandeExterneController extends AbstractActionController } } else { $params['etats'] = DemandeExterneEtats::ETATS_OUVERTS; + $params['historise'] = 0; } $demandes = $this->getDemandeExterneService()->getDemandesExternesWithFiltre($params); @@ -697,12 +698,41 @@ class DemandeExterneController extends AbstractActionController $plafond1 = $this->getParametreService()->getValeurForParametre(DemandeExterneParametres::TYPE, DemandeExterneParametres::PLAFOND_DRH); $plafond2 = $this->getParametreService()->getValeurForParametre(DemandeExterneParametres::TYPE, DemandeExterneParametres::PLAFOND_DGS); + $fromQueries = $this->params()->fromQuery(); + $params = [ + 'agent' => $this->getAgentService()->getAgent($fromQueries['agent-filtre']['id'] ?? null), + 'organisme' => $fromQueries['organisme']['id'] ?? null, + 'etat' => $this->getEtatTypeService()->getEtatType((isset($fromQueries['etat']) && trim($fromQueries['etat']) !== '') ? trim($fromQueries['etat']) : null), + 'historise' => $fromQueries['historise'] ?? null, + 'annee' => $fromQueries['annee'] ?? null, + ]; + $liste = $this->getRequest()->getUri()->getQuery(); + if ($liste and $liste !== '') { + $liste = explode('&', $liste); + foreach ($liste as $item) { + [$key, $value] = explode('=', $item); + if ($key === "gestionnaires" or $key === "etats") { + $params[$key][] = $value; + } + } + } else { + $params['etats'] = DemandeExterneEtats::ETATS_OUVERTS; + $params['historise'] = 0; + } + $demandes = $this->getDemandeExterneService()->getDemandesExternesParapheurs((new DateTime())->format('Y')); + $etats = $this->getEtatTypeService()->getEtatsTypesByCategorieCode(DemandeExterneEtats::TYPE); + $gestionnaires = $this->getUserService()->getUtilisateursByRoleIdAsOptions(FormationRoles::GESTIONNAIRE_FORMATION); return new ViewModel([ 'plafond1' => $plafond1, 'plafond2' => $plafond2, 'demandes' => $demandes, + + + 'etats' => $etats, + 'params' => $params, + 'gestionnaires' => $gestionnaires, ]); } diff --git a/module/DemandeExterne/src/Service/DemandeExterne/DemandeExterneService.php b/module/DemandeExterne/src/Service/DemandeExterne/DemandeExterneService.php index 40675f44..ab54ade3 100644 --- a/module/DemandeExterne/src/Service/DemandeExterne/DemandeExterneService.php +++ b/module/DemandeExterne/src/Service/DemandeExterne/DemandeExterneService.php @@ -595,7 +595,7 @@ class DemandeExterneService public function getDemandesExternesParapheurs(?int $annee = null, bool $withHisto = false): array { - $types = [ DemandeExterneEtats::ETAT_REJETEE, DemandeExterneEtats::ETAT_TERMINEE, + $types = [ /** DemandeExterneEtats::ETAT_REJETEE, DemandeExterneEtats::ETAT_TERMINEE, **/ DemandeExterneEtats::ETAT_VALIDATION_GESTIONNAIRE, DemandeExterneEtats::ETAT_VALIDATION_RESPONSABLE, DemandeExterneEtats::ETAT_VALIDATION_DRH, DemandeExterneEtats::ETAT_VALIDATION_DGS ]; diff --git a/module/DemandeExterne/src/View/Helper/partial/demande-externe-array.phtml b/module/DemandeExterne/src/View/Helper/partial/demande-externe-array.phtml index 66321c18..650f631e 100644 --- a/module/DemandeExterne/src/View/Helper/partial/demande-externe-array.phtml +++ b/module/DemandeExterne/src/View/Helper/partial/demande-externe-array.phtml @@ -9,9 +9,9 @@ use Random\RandomException; try { $random = random_int(1, 10000000); } catch (RandomException $e) { - throw new RuntimeException("Problème de génération de l'identifiant du tableau",0,$e); + throw new RuntimeException("Problème de génération de l'identifiant du tableau", 0, $e); } -$table_id='demandes_'.$random; +$table_id = 'demandes_' . $random; /** @@ -43,26 +43,33 @@ if (!$displayGestionnaire) $sizeDevis += 2; <table class="table table-condensed table-hover" id="<?php echo $table_id; ?>"> <thead> <tr> - <th class="col-md-2"> Agent</th> - <?php if ($displayGestionnaire) : ?> - <th class="col-md-2"> Gestionnaires</th> - <?php endif; ?> - <th class="col-md-2" data-type="num"> Formation</th> - <th class="col-md-1"> Organisme</th> - <th class="col-md-<?php echo $sizeDevis; ?>"> Devis</th> - <th class="col-md-1"> État</th> - <th class="col-md-2"> Action</th> + <th> Agent</th> + <th> Structure·s d'affectation</th> + <th> Date de la demande</th> + <th> Intitulé de la formation</th> + <th data-type="num"> Période de formation</th> + <th> Organisme</th> + <th> Devis</th> + <th> État</th> + <th style="width:8rem;"> Action</th> </tr> </thead> <tbody> <?php foreach ($demandes as $demande) : ?> + <?php + $agent = $demande->getAgent(); + $affectations = $agent->getAffectationsActifs(); + ?> <tr class=" <?php if ($demande->estHistorise()) echo " historise "; ?> "> - <td> <?php echo $demande->getAgent()->getDenomination(); ?> </td> - <?php if ($displayGestionnaire) : ?> - <td class="gestionnaire"> + <td> + <?php echo $agent->getDenomination(); ?> + <?php if ($displayGestionnaire) : ?> + <small> + <br> <?php if (empty($demande->getGestionnaires())) : ?> Aucun·e gestionnaire <br> <?php else : ?> + Gestionnaire·s : <ul> <?php foreach ($demande->getGestionnaires() as $gestionnaire) : ?> <li> <?php echo $gestionnaire->getDisplayName(); ?> </li> @@ -77,29 +84,40 @@ if (!$displayGestionnaire) $sizeDevis += 2; Renseigner les gestionnaires </a> <?php endif; ?> - </td> - <?php endif; ?> + </small> + <?php endif; ?> + </td> + <td> + <?php foreach ($affectations as $affectation) : ?> + <?php + $structure = $affectation->getStructure(); + $niv2 = $structure->getNiv2(); + ?> + <?php if ($niv2 AND $niv2 !== $structure) : ?> + <?php echo $niv2->getLibelleCourt(); ?> <br> + <?php endif; ?> + <?php echo $structure->getLibelleCourt(); ?> + <?php endforeach; ?> + </td> + <td> <?php echo $demande->getHistoCreation()->format('d/m/Y'); ?> </td> + + <td> <?php echo $demande->getLibelle(); ?> </td> <td data-order="<?php echo $demande->getDebut()?->getTimestamp(); ?>"> - <?php echo $demande->getLibelle(); ?><br> - <?php echo $demande->getPeriode(); ?> <br> - <small> - Demande créée le - <?php echo $demande->getHistoCreation()->format('d/m/Y'); ?> - </small> + <?php echo $demande->getPeriode(); ?> </td> <td> <?php echo $demande->getOrganisme(); ?> </td> <td class="action devis"> Frais pédagogique : <?php echo $demande->getFraisPedagogique(); ?> <br> Frais annexe : <?php echo $demande->getFraisAnnexe(); ?> <br> - <?php if (isset($plafond1) AND $demande->getFraisPedagogique() >= $plafond1) : ?> + <?php if (isset($plafond1) and $demande->getFraisPedagogique() >= $plafond1) : ?> <span class="text-warning"> <span class="icon icon-attention" title="Plafond dépassé ! Nécessite validation de la DRH."></span> DRH </span> <?php endif; ?> - <?php if (isset($plafond2) AND $demande->getFraisPedagogique() >= $plafond2) : ?> + <?php if (isset($plafond2) and $demande->getFraisPedagogique() >= $plafond2) : ?> <span class="text-warning"> <span class="icon icon-attention" title="Plafond dépassé ! Nécessite validation de la DGS."></span> @@ -180,7 +198,7 @@ if (!$displayGestionnaire) $sizeDevis += 2; </td> <td> - <?php echo $this->etatinstance($demande->getEtatActif(), ['display-categorie' => false]); ?> + <?php echo $this->etatinstance($demande->getEtatActif(), ['display-libelle' => true, 'display-categorie' => false]); ?> </td> <td class="action"> <?php if ($canAfficher) : ?> @@ -242,11 +260,11 @@ if (!$displayGestionnaire) $sizeDevis += 2; Transformer </a> <?php else : ?> - <?php /** @see \Formation\Controller\SessionController::afficherAction() */ ?> - <a href="<?php echo $this->url('session/afficher',['session' => $demande->getInscription()->getSession()->getId()],['fragment' => 'inscriptions'], true); ?>"> - <span class="icon icon-voir"></span> - Voir l'inscription - </a> + <?php /** @see \Formation\Controller\SessionController::afficherAction() */ ?> + <a href="<?php echo $this->url('session/afficher', ['session' => $demande->getInscription()->getSession()->getId()], ['fragment' => 'inscriptions'], true); ?>"> + <span class="icon icon-voir"></span> + Voir l'inscription + </a> <?php endif; ?> <?php endif; ?> <?php endif; ?> @@ -292,10 +310,10 @@ if (!$displayGestionnaire) $sizeDevis += 2; paging: false, autoWidth: false, // order: [[1, 'asc']], - // columnDefs: [{ - // "targets": 5, - // "orderable": false - // }], + columnDefs: [{ + "targets": 8, + "orderable": false + }], "language": { "url": "/js/datatables_fr.json", } diff --git a/module/DemandeExterne/view/demande-externe/demande-externe/parapheur.phtml b/module/DemandeExterne/view/demande-externe/demande-externe/parapheur.phtml index 01b4c0aa..cb597b21 100644 --- a/module/DemandeExterne/view/demande-externe/demande-externe/parapheur.phtml +++ b/module/DemandeExterne/view/demande-externe/demande-externe/parapheur.phtml @@ -3,10 +3,12 @@ use DemandeExterne\Entity\Db\DemandeExterne; use DemandeExterne\Provider\Etat\DemandeExterneEtats; use DemandeExterne\Provider\Privilege\DemandeexternePrivileges; +use Fichier\Entity\Db\Fichier; /** * @see DemandeExterneController::parapheurAction() * @var DemandeExterne[] $demandes + * @var array $params */ $this->headTitle("Parapheur des formations en attentes"); @@ -20,8 +22,9 @@ $canValiderResponsable = $this->isAllowed(DemandeexternePrivileges::getResourceI $canValiderDrh = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DRH)); $canValiderDgs = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_VALIDER_DGS)); -$canRenseignerGestionnaire = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_GERER)); - +$canGerer = $this->isAllowed(DemandeexternePrivileges::getResourceId(DemandeexternePrivileges::DEMANDEEXTERNE_GERER)); +$canTelechargerDevis = $canGerer; +$canTeleverserDevis = $canGerer; ?> <h1 class="page-header"> @@ -32,60 +35,170 @@ $canRenseignerGestionnaire = $this->isAllowed(DemandeexternePrivileges::getResou Demandes de formation externe </h2> +<?php //echo $this->partial('partial/filtre', ['etats' => $etats, 'params' => $params, 'gestionnaires' => $gestionnaires], [], true); ?> + <table class="table table-condensed table-hover" id="demandes"> <thead> <tr> - <th class="col-md-3"> Agent</th> - <th class="col-md-3" type="num"> Formation</th> - <th class="col-md-2"> Organisme</th> - <?php if ($canRenseignerGestionnaire) : ?> - <th class="col-md-2"> Gestionnaires</th> - <?php endif; ?> - <th class="col-md-1"> État</th> - <th class="col-md-"> Action</th> + <tr> + <th> Agent</th> + <th> Structure·s d'affectation</th> + <th> Date de la demande</th> + <th> Intitulé de la formation</th> + <th data-type="num"> Période de formation</th> + <th> Organisme</th> + <th> Devis</th> + <th> État</th> + <th style="width:8rem;"> Action</th> </tr> </thead> <tbody> <?php foreach ($demandes as $demande) : ?> <tr class=" <?php if ($demande->estHistorise()) echo " historise "; ?> "> - <td> <?php echo $demande->getAgent()->getDenomination(); ?> </td> - <td data-order="<?php echo $demande->getDebut()->getTimestamp(); ?>"> - <?php echo $demande->getLibelle(); ?> <br> - <?php echo $demande->getPeriode(); ?> <br> - <small> - Demande créée le <?php echo $demande->getHistoCreation()->format('d/m/Y'); ?> - </small> + <?php + $agent = $demande->getAgent(); + $affectations = $agent->getAffectationsActifs(); + ?> + <tr class=" <?php if ($demande->estHistorise()) echo " historise "; ?> "> + <td> + <?php echo $agent->getDenomination(); ?> + <?php if ($canGerer) : ?> + <small> + <br> + <?php if (empty($demande->getGestionnaires())) : ?> + Aucun·e gestionnaire <br> + <?php else : ?> + Gestionnaire·s : + <ul> + <?php foreach ($demande->getGestionnaires() as $gestionnaire) : ?> + <li> <?php echo $gestionnaire->getDisplayName(); ?> </li> + <?php endforeach; ?> + </ul> + <?php endif; ?> + <?php if ($canGerer) : ?> + <?php /** @see DemandeExterneController::selectionnerGestionnairesAction() */ ?> + <a href="<?php echo $this->url('demande-externe/selectionner-gestionnaires', ['demande-externe' => $demande->getId()], [], true); ?>" + class="action primary ajax-modal" data-event="modification" style="font-size:small;"> + <span class="icon icon-gerer"></span> + Renseigner les gestionnaires + </a> + <?php endif; ?> + </small> + <?php endif; ?> </td> - <td> <?php echo $demande->getOrganisme(); ?> </td> - <?php if ($canRenseignerGestionnaire) : ?> <td> - <?php $gestionnaires = $demande->getGestionnaires(); ?> - <?php if (empty($gestionnaires)) : ?> - <span style="color:Sienna;"> - <span class="icon icon-attention"></span> - Aucun·e gestionnaire + <?php foreach ($affectations as $affectation) : ?> + <?php + $structure = $affectation->getStructure(); + $niv2 = $structure->getNiv2(); + ?> + <?php if ($niv2 AND $niv2 !== $structure) : ?> + <?php echo $niv2->getLibelleCourt(); ?> <br> + <?php endif; ?> + <?php echo $structure->getLibelleCourt(); ?> + <?php endforeach; ?> + </td> + <td> <?php echo $demande->getHistoCreation()->format('d/m/Y'); ?> </td> + + <td> <?php echo $demande->getLibelle(); ?> </td> + <td data-order="<?php echo $demande->getDebut()?->getTimestamp(); ?>"> + <?php echo $demande->getPeriode(); ?> + </td> + <td> <?php echo $demande->getOrganisme(); ?> </td> + + <td class="action devis"> + Frais pédagogique : <?php echo $demande->getFraisPedagogique(); ?> <br> + Frais annexe : <?php echo $demande->getFraisAnnexe(); ?> <br> + <?php if (isset($plafond1) and $demande->getFraisPedagogique() >= $plafond1) : ?> + <span class="text-warning"> + <span class="icon icon-attention" + title="Plafond dépassé ! Nécessite validation de la DRH."></span> + DRH </span> + <?php endif; ?> + <?php if (isset($plafond2) and $demande->getFraisPedagogique() >= $plafond2) : ?> + <span class="text-warning"> + <span class="icon icon-attention" + title="Plafond dépassé ! Nécessite validation de la DGS."></span> + </span> DGS + <?php endif; ?> + <br> + <?php if (empty($demande->getDevis())) : ?> + <span class="text-danger"> + <span class="icon icon-attention"></span> + Aucun devis + </span> <br> + <?php else : ?> + <?php /** @var Fichier $devis */ ?> + <?php foreach ($demande->getDevis() as $devis) : ?> + <strong> Devis </strong> + <?php if ($canTelechargerDevis) : ?> + <?php /** @see \Fichier\Controller\FichierController::downloadAction() */ ?> + <a href="<?php echo $this->url('download-fichier', ['fichier' => $devis->getId()], [], true); ?>"> + <?php echo $devis->getNomOriginal(); ?> + </a> + <?php else : ?> + <?php echo $devis->getNomOriginal(); ?> + <?php endif; ?> + <?php if ($canTeleverserDevis && $demande->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS)) : ?> + <?php /** @see DemandeExterneController::retirerJustificatifAction() */ ?> + <a href="<?php echo $this->url('demande-externe/retirer-justificatif', ['justificatif' => $devis->getId()], ['query' => ['retour' => $this->url()]], true); ?>"> + <span class="text-danger"> + <span class="icon icon-unchecked"></span> + + </span> + </a> + <?php endif; ?> <br> - <?php else : ?> - Gestionnaires associé·es : - <ul> - <?php foreach ($gestionnaires as $gestionnaire) : ?> - <li> <?php echo $gestionnaire->getDisplayName(); ?> </li> - <?php endforeach; ?> - </ul> - <?php endif; ?> - <?php /** @see DemandeExterneController::selectionnerGestionnairesAction() */ ?> - <a href="<?php echo $this->url('demande-externe/selectionner-gestionnaires', ['demande-externe' => $demande->getId()], [], true); ?>" - class="action primary ajax-modal" data-event="modification" style="font-size:small;"> - <span class="icon icon-gerer"></span> - Renseigner les gestionnaires - </a> + <?php endforeach; ?> + <?php endif; ?> + <?php if ($canTeleverserDevis && $demande->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS)) : ?> + <?php /** @see DemandeExterneController::ajouterDevisAction() */ ?> + <a href="<?php echo $this->url('demande-externe/ajouter-devis', ['demande-externe' => $demande->getId()], ['query' => ['retour' => $this->url(null, [], [], true)]], true); ?>" + class="ajax-modal action primary" data-event="modification"> + <span class="icon icon-televerser"></span>Ajouter un devis</a> + <?php endif; ?> + <br> + <?php if (empty($demande->getProgrammes())) : ?> + <span class="text-danger"> + <span class="icon icon-attention"></span> + Aucun programme + </span> <br> + <?php else : ?> + <?php /** @var Fichier $devis */ ?> + <?php foreach ($demande->getProgrammes() as $devis) : ?> + <strong> Programme </strong> + <?php if ($canTelechargerDevis) : ?> + <?php /** @see \Fichier\Controller\FichierController::downloadAction() */ ?> + <a href="<?php echo $this->url('download-fichier', ['fichier' => $devis->getId()], [], true); ?>"> + <?php echo $devis->getNomOriginal(); ?> + </a> + <?php else : ?> + <?php echo $devis->getNomOriginal(); ?> + <?php endif; ?> + <?php if ($canTeleverserDevis && $demande->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS)) : ?> + <?php /** @see DemandeExterneController::retirerJustificatifAction() */ ?> + <a href="<?php echo $this->url('demande-externe/retirer-justificatif', ['justificatif' => $devis->getId()], ['query' => ['retour' => $this->url()]], true); ?>"> + <span class="text-danger"> + <span class="icon icon-unchecked"></span> + + </span> + </a> + <?php endif; ?> + <br> + <?php endforeach; ?> + <?php endif; ?> + <?php if ($canTelechargerDevis && $demande->isEtatActif(DemandeExterneEtats::ETAT_CREATION_EN_COURS)) : ?> + <?php /** @see DemandeExterneController::ajouterProgrammeAction() */ ?> + <a href="<?php echo $this->url('demande-externe/ajouter-programme', ['demande-externe' => $demande->getId()], ['query' => ['retour' => $this->url(null, [], [], true)]], true); ?>" + class="ajax-modal action primary" data-event="modification"> + <span class="icon icon-televerser"></span>Ajouter un programme</a> + <?php endif; ?> + </td> - <?php endif; ?> <td> - <?php - echo $this->etatinstance($demande->getEtatActif(), ['display-categorie' => false]); - ?> </td> + <?php echo $this->etatinstance($demande->getEtatActif(), ['display-libelle' => true, 'display-categorie' => false]); ?> + </td> <td class="action"> <?php if ($canAfficher) : ?> <?php /** @see DemandeExterneController::afficherAction() */ ?> @@ -196,9 +309,8 @@ $canRenseignerGestionnaire = $this->isAllowed(DemandeexternePrivileges::getResou $('table#demandes').DataTable({ paging: false, autoWidth: false, - order: [[1, 'asc']], columnDefs: [{ - "targets": 5, + "targets": 8, "orderable": false }], "language": { diff --git a/module/Formation/src/Formation/Controller/PlanDeFormationController.php b/module/Formation/src/Formation/Controller/PlanDeFormationController.php index 0fa96fd6..6bb14dd7 100644 --- a/module/Formation/src/Formation/Controller/PlanDeFormationController.php +++ b/module/Formation/src/Formation/Controller/PlanDeFormationController.php @@ -357,7 +357,7 @@ class PlanDeFormationController extends AbstractActionController } $header = $array[0]; - //TODO detecter column + $axeColumn = array_search("Axe", $header); $formationColumn = array_search("Action", $header); $domaineColumn = array_search("Domaine", $header); diff --git a/module/Formation/src/Formation/Form/PlanDeFormationImportation/PlanDeFormationImportationForm.php b/module/Formation/src/Formation/Form/PlanDeFormationImportation/PlanDeFormationImportationForm.php index 1d21fdbc..22d2a2a5 100644 --- a/module/Formation/src/Formation/Form/PlanDeFormationImportation/PlanDeFormationImportationForm.php +++ b/module/Formation/src/Formation/Form/PlanDeFormationImportation/PlanDeFormationImportationForm.php @@ -4,6 +4,7 @@ namespace Formation\Form\PlanDeFormationImportation; use Formation\Service\PlanDeFormation\PlanDeFormationServiceAwareTrait; use Laminas\Form\Element\Button; +use Laminas\Form\Element\Checkbox; use Laminas\Form\Element\File; use Laminas\Form\Element\Select; use Laminas\Form\Form; @@ -54,22 +55,6 @@ class PlanDeFormationImportationForm extends Form { 'id' => 'mode', ], ]); - //annee -// $this->add([ -// 'type' => Select::class, -// 'name' => 'annee', -// 'options' => [ -// 'label' => 'Année asscocié <span class="icon icon-asterisque" title="Champ obligatoire"></span> :', -// 'label_options' => [ 'disable_html_escape' => true, ], -// 'value_options' => [ -// '' => "Prévisualisation", -// 'import' => "Importation", -// ] -// ], -// 'attributes' => [ -// 'id' => 'annee', -// ], -// ]); //Submit $this->add([ diff --git a/module/Formation/src/Formation/Service/Notification/NotificationService.php b/module/Formation/src/Formation/Service/Notification/NotificationService.php index e5d92002..07ef2739 100644 --- a/module/Formation/src/Formation/Service/Notification/NotificationService.php +++ b/module/Formation/src/Formation/Service/Notification/NotificationService.php @@ -443,6 +443,7 @@ class NotificationService $vars = [ 'session' => $session, 'UrlService' => $this->getUrlService(), + 'MacroService' => $this->getMacroService(), ]; $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::FORMATION_RAPPEL_AVANT_FORMATION, $vars); -- GitLab