<?php
namespace App\EventSubscriber;
use App\Entity\ResNotification;
use App\Entity\ResRoleConfig;
use App\Entity\Vacation;
use App\Utils\Consts;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Workflow\Event\Event;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
class WorkflowNotificationSubscriber implements EventSubscriberInterface
{
private $entityManager;
private $router;
public function __construct(EntityManagerInterface $entityManager, UrlGeneratorInterface $router)
{
$this->entityManager = $entityManager;
$this->router = $router;
}
public static function getSubscribedEvents(): array
{
return [
'workflow.vacation_validation.leave' => 'onLeave',
];
}
public function onLeave(Event $event)
{
$vacation = $event->getSubject();
if ($vacation instanceof Vacation) {
$transitionName = $event->getTransition()->getName();
$notificationHiearchie = new ResNotification();
$notificationHiearchie->setTypeNotification(Consts::NOTIFICATION_DEMANDE_VALIDATION_VACATION);
$notificationHiearchie->setDateNotification(new \DateTime());
$notificationHiearchie->setDestination($vacation->getPoste()->getResponsable()->getPartner()->getUserAccount());
$vacationDemandeShowPath = $this->router->generate('app_vacation_show', [
'id' => $vacation->getId(),
]);
$notificationHiearchie->setActionName($vacationDemandeShowPath);
if ($transitionName == Consts::TRANSIION_to_accepted) {
$notificationHiearchie->setMessage(
sprintf(Consts::NOTIFICATION_VACATION_MESSAGE['accepted'])
);
$this->entityManager->persist($notificationHiearchie);
$this->entityManager->persist($vacation);
$this->entityManager->flush();
} elseif ($transitionName == Consts::TRANSIION_to_rejected) {
$notificationHiearchie->setMessage(
sprintf(Consts::NOTIFICATION_VACATION_MESSAGE['rejected'])
);
$this->entityManager->persist($notificationHiearchie);
$this->entityManager->persist($vacation);
$this->entityManager->flush();
}
}
}
}