Commit 1819631c authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Nouveau template et Notification SOUTENANCE_CONVOCATION_DOCTORANT

parent b51440c6
Loading
Loading
Loading
Loading
+12 −1
Changes for doc/release-notes/v6.0.7.md: 12 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -30,7 +30,10 @@ INSERT INTO unicaen_renderer_macro (code, description, variable_name, methode_na
('Role#getLibelle', null, 'role', 'getLibelle'),
('Individu#getDenomination', null, 'individu', 'getNomComplet'),
('Soutenance#Date', '<p>Retourne la date de soutenance inscrite dans la proposition</p>', 'soutenance', 'toStringDateSoutenance'),
('Soutenance#Lieu', '<p>Retourne le lieu inscrit dans la proposition</p>', 'soutenance', 'toStringLieu')
('Soutenance#Lieu', '<p>Retourne le lieu inscrit dans la proposition</p>', 'soutenance', 'toStringLieu'),
('Soutenance#ModeSoutenance', '<p>Précise le caractère public ou huis clos</p>', 'soutenance', 'toStringPublicOuHuisClos'),
('Url#ConvocationMembre', null, 'Url', 'getSoutenanceConvocationMembre'),
('Url#ConvocationDoctorant', null, 'Url', 'getSoutenanceConvocationDoctorant')
;

-- Nouveaux templates
@@ -141,6 +144,14 @@ INSERT INTO unicaen_renderer_template (code, description, document_type, documen
</ul>
</li>
</ul>', null, 'Soutenance\Provider\Template');
INSERT INTO unicaen_renderer_template (code, description, document_type, document_sujet, document_corps, document_css, namespace) VALUES ('SOUTENANCE_CONVOCATION_DOCTORANT', null, 'mail', 'Convocation pour la soutenance de thèse de VAR[Doctorant#Denomination]', e'<p>Bonjour,</p>
<p>Par décision en date du VAR[Validation#Date], vous avez été autorisé·e à présenter en soutenance vos travaux en vue de l\'obtention du diplôme : Doctorat en VAR[These#Discipline].<br /><br />La soutenance aura lieu le VAR[Soutenance#Date] à l\'adresse suivante : <br />VAR[Soutenance#Adresse]<br /><br />La soutenance VAR[Soutenance#ModeSoutenance].<br /><br />Vous pouvez accéder aux pré-rapports de soutenance sur la page de la proposition de soutenance : VAR[Url#SoutenanceProposition]<br /><br />Nous vous prions d\'agréer, l\'expression de nos salutations distinguées.<br /><br /><span style="text-decoration: underline;">P.S.:</span> Vous pouvez obtenir une version imprimable de cette convocation à l\'adresse suivante : VAR[Url#ConvocationDoctorant]<br /><br /></p>
<p><em>-- Justification -------------------------------------------------------------------------------</em></p>
<p>Vous avez reçu ce mail car :</p>
<ul>
<li>votre proposition de soutenance a été validé par la maison du doctorat; </li>
<li>vous êtes le doctorant associé à la proposition de soutenance. </li>
</ul>', null, 'Soutenance\Provider\Template');



+19 −1
Changes for module/Soutenance/src/Soutenance/Entity/Proposition.php: 19 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ namespace Soutenance\Entity;
use Doctrine\Common\Collections\Collection;
use Horodatage\Entity\Interfaces\HasHorodatagesInterface;
use Horodatage\Entity\Traits\HasHorodatagesTrait;
use JetBrains\PhpStorm\Pure;
use These\Entity\Db\These;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
@@ -403,10 +404,27 @@ class Proposition implements HistoriqueAwareInterface, HasHorodatagesInterface {
    }

    /** @noinspection  PhpUnused */
    public function toStringLieu() : string
    #[Pure] public function toStringLieu() : string
    {
        $lieu = $this->getLieu();
        if ($lieu) return $lieu;
        return "<span style='color:darkorange;'>Aucun lieu de précisé</span>";
    }

    /** @noinspection  PhpUnused */
    #[Pure] public function toStringAdresse() : string
    {
        $lieu = $this->getAdresse();
        if ($lieu) return $lieu;
        return "<span style='color:darkorange;'>Aucune adresse de précisée</span>";
    }

    /** @noinspection  PhpUnused */
    #[Pure] public function toStringPublicOuHuisClos() : string
    {
        $mode = $this->isHuitClos();
        if ($mode === false) return " sera publique ";
        if ($mode === true) return " se déroulera en huis clos";
        return "<span style='color:darkorange;'>Aucun mode de déclaré</span>";
    }
}
 No newline at end of file
+1 −0
Changes for module/Soutenance/src/Soutenance/Provider/Template/MailTemplates.php: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -31,4 +31,5 @@ class MailTemplates
    const SOUTENANCE_AVIS_DEFAVORABLE                   = 'SOUTENANCE_AVIS_DEFAVORABLE';
    const SOUTENANCE_FEU_VERT                           = 'SOUTENANCE_FEU_VERT';
    const SOUTENANCE_STOP_DEMARCHE                      = 'SOUTENANCE_STOP_DEMARCHE';
    const SOUTENANCE_CONVOCATION_DOCTORANT              = 'SOUTENANCE_CONVOCATION_DOCTORANT';
}
 No newline at end of file
+18 −25
Changes for module/Soutenance/src/Soutenance/Service/Notification/SoutenanceNotificationFactory.php: 18 added lines, 25 removed lines.
Original line number Diff line number Diff line
@@ -3,10 +3,12 @@
namespace Soutenance\Service\Notification;

use Application\Entity\Db\Role;
use Application\Entity\Db\TypeValidation;
use Application\Entity\Db\Validation;
use Application\Service\Email\EmailTheseServiceAwareTrait;
use Application\Service\Role\RoleServiceAwareTrait;
use Application\Service\Utilisateur\UtilisateurServiceAwareTrait;
use Application\Service\Validation\ValidationServiceAwareTrait;
use DateTime;
use Doctorant\Entity\Db\Doctorant;
use Individu\Entity\Db\Individu;
@@ -19,6 +21,7 @@ use Soutenance\Entity\Proposition;
use Soutenance\Provider\Template\MailTemplates;
use Soutenance\Service\Membre\MembreServiceAwareTrait;
use Soutenance\Service\Url\UrlServiceAwareTrait;
use Soutenance\Service\Validation\ValidatationServiceAwareTrait;
use These\Entity\Db\These;
use These\Service\Acteur\ActeurServiceAwareTrait;
use These\Service\These\TheseServiceAwareTrait;
@@ -45,6 +48,7 @@ class SoutenanceNotificationFactory extends NotificationFactory
    use UtilisateurServiceAwareTrait;
    use RenduServiceAwareTrait;
    use UrlServiceAwareTrait;
    use ValidationServiceAwareTrait;

    public function createNotificationDevalidationProposition(These $these, Validation $validation): Notification
    {
@@ -532,39 +536,28 @@ class SoutenanceNotificationFactory extends NotificationFactory

    /** Mails de fin de procédure *************************************************************************************/


    /**
     * TODO
     */
    public function createNotificationEnvoiConvocationDoctorant(Doctorant $doctorant, Proposition $proposition, DateTime $date, string $email, string $url, array $avisArray): Notification
    {
        $these = $proposition->getThese();
        $pdcData = $this->getTheseService()->fetchInformationsPageDeCouverture($these);

        if ($email === null or $email === '') {
            throw new RuntimeException("Aucune adresse électronique pour le doctorant [" . $doctorant->getIndividu()->getNomComplet() . "]");
        $email = $doctorant->getIndividu()->getEmailUtilisateur();
        if ($email === null) {
            throw new RuntimeException("Aucun mail pour la notification [".MailTemplates::SOUTENANCE_CONVOCATION_DOCTORANT."]");
        }
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            throw new RuntimeException("L'adresse électronique est mal formée pour le doctorant [" . $doctorant->getIndividu()->getNomComplet() . "]");
        $validation = $this->getValidationService()->getRepository()->findValidationByCodeAndThese(TypeValidation::CODE_VALIDATION_PROPOSITION_BDD, $proposition->getThese());
        if (empty($validation)) {
            throw new RuntimeException("Aucune validation de trouvée");
        }

        $vars = ['soutenance' => $proposition, 'these' => $proposition->getThese(), 'doctorant' => $doctorant, 'validation' => $validation[0]];
        $url = $this->getUrlService()->setVariables($vars);
        $vars['Url'] = $url;

        $rendu = $this->getRenduService()->generateRenduByTemplateCode(MailTemplates::SOUTENANCE_CONVOCATION_DOCTORANT, $vars);

        $notif = new Notification();
        $notif
            ->setSubject("Convocation pour la soutenance de thèse de  " . $doctorant->getNomComplet())
            ->setSubject($rendu->getSujet())
            ->setTo($email)
            ->setTemplatePath('soutenance/notification/convocation-doctorant')
            ->setTemplateVariables([
                'these' => $proposition->getThese(),
                'proposition' => $proposition,
                'doctorant' => $doctorant,
                'date' => $date,
                'url' => $url,
                'informations' => $pdcData,

                'avisArray' => $avisArray,

            ]);

            ->setBody($rendu->getCorps());
        return $notif;
    }

+4 −0
Changes for module/Soutenance/src/Soutenance/Service/Notification/SoutenanceNotificationFactoryFactory.php: 4 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Soutenance\Service\Membre\MembreService;
use Soutenance\Service\Url\UrlService;
use Application\Service\Validation\ValidationService;
use These\Service\Acteur\ActeurService;
use These\Service\These\TheseService;
use UnicaenRenderer\Service\Rendu\RenduService;
@@ -43,18 +44,21 @@ class SoutenanceNotificationFactoryFactory extends NotificationFactoryFactory
         * @var VariableService $variableService
         * @var TheseService $theseService
         * @var UtilisateurService $utilisateurService
         * @var ValidationService $validationService
         */
        $acteurService = $container->get(ActeurService::class);
        $emailTheseService = $container->get(EmailTheseService::class);
        $membreService = $container->get(MembreService::class);
        $roleService = $container->get('RoleService');
        $theseService = $container->get('TheseService');
        $validationService = $container->get(ValidationService::class);

        $factory->setActeurService($acteurService);
        $factory->setEmailTheseService($emailTheseService);
        $factory->setMembreService($membreService);
        $factory->setRoleService($roleService);
        $factory->setTheseService($theseService);
        $factory->setValidationService($validationService);

        /** @var RenduService $renduService */
        $renduService = $container->get(RenduService::class);
Loading