<?php
namespace App\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Doctrine\ORM\EntityManagerInterface;
use Twig\Extension\EscaperExtension;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;
use App\Utils\MailerService;
use App\Entity\Notification;
use App\Entity\DocumentControle;
use App\Event\WorkflowDossierEvent;
use App\Event\NotifyEvent;
class WorkflowDossierSubscriber implements EventSubscriberInterface
{
private $mailer;
private $parameters;
private $em;
private $dispatcher;
private $templating;
public function __construct(
EntityManagerInterface $em,
ParameterBagInterface $parameters,
MailerService $mailer,
EventDispatcherInterface $dispatcher,
\Twig\Environment $templating
) {
$this->mailer = $mailer;
$this->parameters = $parameters;
$this->em = $em;
$this->dispatcher = $dispatcher;
$this->templating = $templating;
}
public static function getSubscribedEvents(): array
{
return [
WorkflowDossierEvent::NAME => 'notify'
];
}
public function notify(WorkflowDossierEvent $event) {
$dossier = $event->getDossier();
$statut = $event->getStatut();
$controles = $dossier->getControles();
$motifs = [];
$motif_id = null;
/* iteration sur les points de controles enregistrés dans le champs controle du dossier */
foreach($controles as $motif_id => $val) {
if($val) { // si le point de controle est coché
$controle = $this->em->getRepository(DocumentControle::class)->find($motif_id);
$motif = $this->templating->createTemplate($controle->getRaison());
$variables = $dossier->getVars();
// Variables template de motifs liés à document non remplissable
$variables['date_effet_contrat'] = $dossier->getDateEffet()->format('d/m/Y');
if(array_key_exists($motif_id, $variables)) {
$variables = $variables[$motif_id];
}
$motifs[] = $motif->render($variables);
}
}
$vars = [
'motif_id' => $motif_id,
'offre' => $dossier->getOffre(),
'raison_sociale' => $dossier->getEntreprise(),
'motifs' => $motifs,
'dateEffet' => $dossier->getDateEffet()->format('d/m/Y'),
];
$object = [
'dossier' => $dossier,
'event' => 'workflow.dossier.' . $statut,
'vars' => $vars,
];
$this->dispatcher->dispatch(new NotifyEvent($object), NotifyEvent::NAME);
}
}