src/Features/ProviderRequest/ProviderRequestWorkflowSubscriber.php line 50

Open in your IDE?
  1. <?php
  2. namespace App\Features\ProviderRequest;
  3. use App\Entity\ProviderRequest;
  4. use App\Features\Core\ILogger;
  5. use App\Features\ProviderRequest\Event\ProviderRequestApprovedEvent;
  6. use App\Features\ProviderRequest\Event\ProviderRequestIncompleteEvent;
  7. use App\Features\ProviderRequest\Event\ProviderRequestRejectedEvent;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\Security\Core\Security;
  12. use Symfony\Component\Workflow\Event\Event;
  13. class ProviderRequestWorkflowSubscriber implements EventSubscriberInterface
  14. {
  15.     public function __construct(
  16.         private EventDispatcherInterface $dispatcher,
  17.                                 private ILogger $logger,
  18.                                 private EntityManagerInterface $manager,private Security $security){}
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [
  22.             'workflow.provider_request.completed.approve_request' => 'onRequestApproved',
  23.             'workflow.provider_request.completed.reject_request' => 'onRequestRejected',
  24.             'workflow.provider_request.completed.incomplete_request' => 'onRequestMarkAsIncomplete',
  25.         ];
  26.     }
  27.     public function onRequestApproved(Event $event): void
  28.     {
  29.         $request $event->getSubject();
  30.         if($request instanceof ProviderRequest) {
  31.             $statusData$request->getStateDetail();
  32.             $statusData?->setApprovedAt(new \DateTime("now"));
  33.             $statusData?->setDetail($event->getContext()[ProviderRequestStateManager::ACTION_COMMENT_KEY]??null);
  34.             $request->setStateDetail($statusData);
  35.             $request->setApprovedBy($this->security->getUser());
  36.             $this->manager->flush();
  37.             $this->dispatcher->dispatch(new ProviderRequestApprovedEvent($request), ProviderRequestApprovedEvent::NAME);
  38.             $this->logger->log($request"Demande d'agrément approuvée""Vous avez approuvé la demande d'agrément {$request->getSocialReason()}");
  39.         }
  40.     }
  41.     public function onRequestMarkAsIncomplete(Event $event): void
  42.     {
  43.         $request $event->getSubject();
  44.         if($request instanceof ProviderRequest) {
  45.             $statusData$request->getStateDetail();
  46.             $statusData?->setMarkAsIncompleteAt(new \DateTime("now"));
  47.             $statusData?->setDetail($event->getContext()[ProviderRequestStateManager::ACTION_COMMENT_KEY]??null);
  48.             $request->setStateDetail($statusData);
  49.             $request->setMarkAsIncompleteBy($this->security->getUser());
  50.             $this->manager->flush();
  51.             $this->dispatcher->dispatch(new ProviderRequestIncompleteEvent($request), ProviderRequestIncompleteEvent::NAME);
  52.             $this->logger->log($request"Demande d'agrément incomplete""Vous avez marqué la demande d'agrément de {$request->getSocialReason()} comme incomplete");
  53.         }
  54.     }
  55.     public function onRequestRejected(Event $event): void
  56.     {
  57.         $request $event->getSubject();
  58.         if($request instanceof ProviderRequest) {
  59.             $statusData$request->getStateDetail();
  60.             $statusData?->setRejectedAt(new \DateTime("now"));
  61.             $statusData?->setDetail($event->getContext()[ProviderRequestStateManager::ACTION_COMMENT_KEY]??null);
  62.             $request->setStateDetail($statusData);
  63.             $request->setRejectedBy($this->security->getUser());
  64.             $this->manager->flush();
  65.             $this->dispatcher->dispatch(new ProviderRequestRejectedEvent($request), ProviderRequestRejectedEvent::NAME);
  66.             $this->logger->log($request"Demande d'agrément rejetée""Vous avez rejeté la demande d'agrément de {$request->getSocialReason()}");
  67.         }
  68.     }
  69. }