Commit 4aa18e7f authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Début de notification depuis la campagne

parent 6509be91
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -66,6 +66,16 @@ SELECT cp.id, d.code, d.lib, d.ordre
FROM d
JOIN unicaen_privilege_categorie cp ON cp.CODE = 'entretienpro';
delete from unicaen_privilege_privilege where code='entretienpro_ajouter';

-- Nouveaux templates
INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('RAPPEL_ATTENTE_VALIDATION_AGENT', null, 'mail', 'Entretien·s professionnel·s en attente de votre validation', e'<p>Bonjour VAR[AGENT#Denomination],</p>
<p>Vous êtes un·e agent de l\'Université de Caen Normandie et au moins un entretien professionnel de la campagne VAR[CAMPAGNE#annee] attend votre validation en tant qu\'Agent.<br />Veuillez vous connecter à l\'application EMC2 (VAR[URL#App]) afin de valider ceux-ci.</p>
<p>Bonne journée,<br />L\'équipe EMC2</p>', null, 'EntretienProfessionnel\Provider\Template');
INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('RAPPEL_ATTENTE_VALIDATION_AUTORITE', null, 'mail', 'Entretien·s professionnel·s en attente de votre validation', e'<p>Bonjour VAR[AGENT#Denomination],<br /><br />Vous êtes l\'autorité hiérarchique d\'au moins un·e agent de l\'Université de Caen Normandie dont l\'entretien professionnel de la campagne VAR[CAMPAGNE#annee] attend votre validation en tant qu\'Autorité hiérarchique.<br />Veuillez vous connecter à l\'application EMC2 (VAR[URL#App]) afin de valider ceux-ci.</p>
<p>Voici la liste des entretiens professionnels en attente :<br />###SERA REMPLACÉ###</p>
<p><br />Bonne journée,<br />L\'équipe EMC2</p>', null, 'EntretienProfessionnel\Provider\Template');
INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('RAPPEL_ATTENTE_VALIDATION_SUPERIEUR', null, 'mail', 'Entretien·s professionnel·s en attente de votre validation ', '<p><br /><br />Bonjour VAR[AGENT#Denomination],<br /><br />Vous êtes le supérieur·e hiérarchique direct·e d''au moins un·e agent de l''Université de Caen Normandie dont l''entretien professionnel de la campagne VAR[CAMPAGNE#annee] attend votre validation en tant que Supérieur·e hiérarchique direct·e.<br />Veuillez vous connecter à l''application EMC2 (VAR[URL#App]) afin de valider ceux-ci.<br /><br />Voici la liste des entretiens professionnels en attente :<br />###SERA REMPLACÉ###<br /><br /><br />Bonne journée,<br />L''équipe EMC2<br /><br /></p>', null, 'EntretienProfessionnel\Provider\Template');

```

Evolution des librairies 
+56 −14
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ use Application\Service\Agent\AgentServiceAwareTrait;
use DateInterval;
use DateTime;
use EntretienProfessionnel\Entity\Db\Campagne;
use EntretienProfessionnel\Entity\Db\EntretienProfessionnel;
use EntretienProfessionnel\Form\Campagne\CampagneFormAwareTrait;
use EntretienProfessionnel\Provider\Etat\EntretienProfessionnelEtats;
use EntretienProfessionnel\Provider\Parametre\EntretienProfessionnelParametres;
@@ -173,16 +174,57 @@ class CampagneController extends AbstractActionController {

    /** Action de la page d'affichage d'une campagne ******************************************************************/

    public function demanderValidationSuperieurAction() : ViewModel
    {
        $campagne = $this->getCampagneService()->getRequestedCampagne($this);
        $enAttente =  $this->getCampagneService()->getEntretiensEnAttenteAutorite($campagne);

        $entretiens = []; $listes = [];
        foreach ($enAttente as $entretienListe) {
            /** @var EntretienProfessionnel $entretien */
            foreach ($entretienListe as $entretien) {
                $superieur = $entretien->getResponsable();
                $listes[$superieur->getId()] = $superieur;
                $entretiens[$superieur->getId()][] = $entretien;
            }
        }

        $count = 0;
        $texte  = "Liste des notifications :";
        $texte .= "<ul>";
        foreach ($listes as $superieur) {
            $mail = $this->getNotificationService()->triggerRappelValidationSuperieur($superieur, $campagne, $entretiens[$superieur->getId()]);
            $texte .= "<li> Notification faite vers ".$superieur->getDenomination(). " (".$superieur->getEmail().") mail#".$mail->getId(). "</li>";
            $count++;
        }
        $texte .= "</ul>";
        $texte .= $count . " notification·s <br/>";

        $vm = new ViewModel([
            'title' => "Rapport de notification",
            'reponse' => $texte,
        ]);
        $vm->setTemplate('default/reponse');
        return $vm;
    }

    public function demanderValidationAutoriteAction() : ViewModel
    {
        $campagne = $this->getCampagneService()->getRequestedCampagne($this);
        $enAttente =  $this->getCampagneService()->getEntretiensEnAttenteAutorite($campagne);

        $entretiens = []; $problemes = []; $listes = [];
        foreach ($enAttente as $entretien) {
        foreach ($enAttente as $entretienListe) {
            /** @var EntretienProfessionnel $entretien */
            foreach ($entretienListe as $entretien) {
                $agent = $entretien->getAgent();
            $autorites = array_map(function (AgentAutorite $aa) { return $aa->getAutorite(); }, $agent->getAutorites());
            $autorites = array_diff($autorites, [$entretien->getResponsable()]);
                $autorites_tmp = array_map(function (AgentAutorite $aa) {
                    return $aa->getAutorite();
                }, $agent->getAutorites());
                $autorites = [];
                foreach ($autorites_tmp as $autorite) {
                    if ($autorite !== $entretien->getResponsable()) $autorites[] = $autorite;
                }

                if (!empty($autorites)) {
                    foreach ($autorites as $autorite) {
@@ -193,14 +235,14 @@ class CampagneController extends AbstractActionController {
                    $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>";
            $mail = $this->getNotificationService()->triggerRappelValidationAutorite($autorite, $campagne, $entretiens[$autorite->getId()]);
            $texte .= "<li> Notification faite vers ".$autorite->getDenomination(). " (".$autorite->getEmail().") mail#".$mail->getId(). "</li>";
            $count++;
        }
        $texte .= "</ul>";
@@ -209,7 +251,7 @@ class CampagneController extends AbstractActionController {
        $texte .= "Liste des problèmes : ";
        $texte .= "<ul>";
        foreach ($problemes as $probleme) {

            $texte .= "<li> Entretien de ".$probleme->getAgent()->getDenomination() . "</li>";
        }
        $texte .= "</ul>";

+3 −3
Original line number Diff line number Diff line
@@ -21,8 +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';
    const RAPPEL_ATTENTE_VALIDATION_SUPERIEUR = 'RAPPEL_ATTENTE_VALIDATION_SUPERIEUR';
    const RAPPEL_ATTENTE_VALIDATION_AUTORITE  = 'RAPPEL_ATTENTE_VALIDATION_AUTORITE';
    const RAPPEL_ATTENTE_VALIDATION_AGENT     = 'RAPPEL_ATTENTE_VALIDATION_AGENT';

}
 No newline at end of file
+21 −9
Original line number Diff line number Diff line
@@ -285,23 +285,35 @@ class NotificationService {

    /** Notifications associées à la demande de validation (en retard) d'entretiens profesionnels *****/

    public function triggerRappelValidationSuperieur(?EntretienProfessionnel $entretien) : Mail
    public function triggerRappelValidationSuperieur(Agent $superieur, Campagne $campagne, array $entretiens) : Mail
    {
        $vars = ['campagne' => $entretien->getCampagne(), 'entretien' => $entretien, 'agent' => $entretien->getAgent(), 'UrlService' => $this->getUrlService()];
        $vars = ['campagne' => $campagne, 'agent' => $superieur, '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()]);

        $texte  = "<ul>";
        foreach ($entretiens as $entretien) $texte .= "<li>".$entretien->getAgent()->getDenomination()."</li>";
        $texte .= "</ul>";

        $corps = $rendu->getCorps(); $corps = str_replace('###SERA REMPLACÉ###', $texte, $corps);
        $mail = $this->getMailService()->sendMail($superieur->getEmail(), $rendu->getSujet(), $corps);
        $mail->setMotsClefs([$campagne->generateTag(), $rendu->getTemplate()->generateTag()]);
        $this->getMailService()->update($mail);

        return $mail;
    }

    public function triggerRappelValidationAutorite(?EntretienProfessionnel $entretien) : Mail
    public function triggerRappelValidationAutorite(Agent $autorite, Campagne $campagne, array $entretiens) : Mail
    {
        $vars = ['campagne' => $entretien->getCampagne(), 'entretien' => $entretien, 'agent' => $entretien->getAgent(), 'UrlService' => $this->getUrlService()];
        $vars = ['campagne' => $campagne, 'agent' => $autorite, '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()]);

        $texte  = "<ul>";
        foreach ($entretiens as $entretien) $texte .= "<li>".$entretien->getAgent()->getDenomination()."</li>";
        $texte .= "</ul>";

        $corps = $rendu->getCorps(); $corps = str_replace('###SERA REMPLACÉ###', $texte, $corps);
        $mail = $this->getMailService()->sendMail($autorite->getEmail(), $rendu->getSujet(), $corps);
        $mail->setMotsClefs([$campagne->generateTag(), $rendu->getTemplate()->generateTag()]);
        $this->getMailService()->update($mail);

        return $mail;
@@ -312,7 +324,7 @@ class NotificationService {
        $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()]);
        $mail->setMotsClefs([$entretien->getCampagne()->generateTag(), $entretien->generateTag(), $rendu->getTemplate()->generateTag()]);
        $this->getMailService()->update($mail);

        return $mail;
+31 −26
Original line number Diff line number Diff line
@@ -103,19 +103,19 @@ $condition = "Les agents titulaires ou contratuel en poste depuis XX mois doiven
                </dl>
            </div>
            <div class="col-md-4">
                <a href=""
                   class="btn btn-primary disabled"
               >
                    <span class="icon icon-csv"></span>
                    Extraire la liste des agents
                </a>
                <a href=""
                   class="btn btn-primary disabled"
                   title="Seules les structures dont des entretiens sont manquants seront notifiées"
                >
                    <span class="icon icon-notifier"></span>
                    Notifier responsable de structure
                </a>
<!--                <a href=""-->
<!--                   class="btn btn-primary disabled"-->
<!--               >-->
<!--                    <span class="icon icon-csv"></span>-->
<!--                    Extraire la liste des agents-->
<!--                </a>-->
<!--                <a href=""-->
<!--                   class="btn btn-primary disabled"-->
<!--                   title="Seules les structures dont des entretiens sont manquants seront notifiées"-->
<!--                >-->
<!--                    <span class="icon icon-notifier"></span>-->
<!--                    Notifier responsable de structure-->
<!--                </a>-->
            </div>
        </div>

@@ -135,26 +135,31 @@ $condition = "Les agents titulaires ou contratuel en poste depuis XX mois doiven
                </dl>
            </div>
            <div class="col-md-4">
                <a href=""
                   class="btn btn-primary disabled"
                >
                    <span class="icon icon-csv"></span>
                    Extraire les entretiens en attente
                </a>
                <a href=""
                   class="btn btn-primary disabled"
                   title="Seules les responsables ayant des entretiens non validées seront notifiés"
<!--                <a href=""-->
<!--                   class="btn btn-primary disabled"-->
<!--                >-->
<!--                    <span class="icon icon-csv"></span>-->
<!--                    Extraire les entretiens en attente-->
<!--                </a>-->
                <?php /** @see \EntretienProfessionnel\Controller\CampagneController::demanderValidationSuperieurAction();  */ ?>
                <a href="<?php echo $this->url('entretien-professionnel/campagne/demander-validation-superieur', ['campagne' => $campagne->getId()], [], true); ?>"
                   class="btn btn-primary ajax-modal <?php if (!$campagne->estEnCours()) echo " disabled "; ?>"
                   title="Rappel de la demande de validation aux responsables d'entretien pour lesquel·les l'entretien est en attente de leur validation"
                >
                    <span class="icon icon-notifier"></span>
                    Notifier les responsables d'entretien
                    Notifier les responsables
                </a>
                <a href=""
                   class="btn btn-primary disabled"
                   title="Seules les responsables ayant des entretiens non validées seront notifiés"
                <br/>
                <?php /** @see \EntretienProfessionnel\Controller\CampagneController::demanderValidationAutoriteAction();  */ ?>
                <a href="<?php echo $this->url('entretien-professionnel/campagne/demander-validation-autorite', ['campagne' => $campagne->getId()], [], true); ?>"
                   class="btn btn-primary ajax-modal <?php if (!$campagne->estEnCours()) echo " disabled "; ?>"
                   title="Rappel de la demande de validation aux autorités hiérarchiques pour lesquel·les l'entretien est en attente de leur validation"
                >
                    <span class="icon icon-notifier"></span>
                    Notifier les autorités
                </a>
                <br/>
                <?php /** @see \EntretienProfessionnel\Controller\CampagneController::demanderValidationAgentAction();  */ ?>
                <a href="<?php echo $this->url('entretien-professionnel/campagne/demander-validation-agent', ['campagne' => $campagne->getId()], [], true); ?>"
                   class="btn btn-primary ajax-modal <?php if (!$campagne->estEnCours()) echo " disabled "; ?>"
                   title="Rappel de la demande de validation aux agents pour lesquel·les l'entretien est en attente de leur validation"