src/EventListener/OperationOrderWorkflowListener.php line 44

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\OperationOrder;
  4. use App\Entity\OperationOrderStepVersion;
  5. use App\Service\DataLogger;
  6. use App\Service\OperationOrderService;
  7. use App\Service\QuotaService;
  8. use App\Service\User as UserService;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\Workflow\Event\Event;
  12. class OperationOrderWorkflowListener implements EventSubscriberInterface
  13. {
  14.     private DataLogger $dataLogger;
  15.     private EntityManagerInterface $entityManager;
  16.     private OperationOrderService $operationOrderService;
  17.     private QuotaService $quotaService;
  18.     private UserService $userService;
  19.     public function __construct(EntityManagerInterface $entityManagerUserService $userServiceDataLogger $dataLoggerOperationOrderService $operationOrderServiceQuotaService $quotaService)
  20.     {
  21.         $this->entityManager $entityManager;
  22.         $this->dataLogger $dataLogger;
  23.         $this->operationOrderService $operationOrderService;
  24.         $this->quotaService $quotaService;
  25.         $this->userService $userService;
  26.     }
  27.     public function onEnter(Event $event): void
  28.     {
  29.     }
  30.     public function onTransition(Event $event): void
  31.     {
  32.     }
  33.     public function onEntered(Event $event): void
  34.     {
  35.     }
  36.     public function onCompleted(Event $event): void
  37.     {
  38.         $transitionName $event->getTransition()->getName();
  39.         $user $this->userService->getUser();
  40.         $wsResponse 'none';
  41.         /** @var OperationOrder $operationOrder */
  42.         $operationOrder $event->getSubject();
  43.         if ('toCanceled' === $transitionName) {
  44.             try {
  45.                 $oldPrice $operationOrder->getPrice();
  46.                 $operationOrder->setPrice(0.0);
  47.                 $updatedQuota $this->quotaService->updateQuota($operationOrder$oldPrice);
  48.             } catch (\Exception) {
  49.                 // echo 'Exception reçue : ',  $e->getMessage(), "\n";
  50.             }
  51.         }
  52.         if (null === $user) {
  53.             $user $operationOrder->getUser();
  54.         }
  55.         $this->entityManager->persist($operationOrder);
  56.         $operationOrderStepVersion = new OperationOrderStepVersion();
  57.         $operationOrderStepVersion->setDate(new \DateTime());
  58.         $operationOrderStepVersion->setStep(strtolower(substr((string) $transitionName2)));
  59.         $operationOrderStepVersion->setUser($user);
  60.         $operationOrderStepVersion->setOperationOrder($operationOrder);
  61.         $this->entityManager->persist($operationOrderStepVersion);
  62.         $this->entityManager->flush();
  63.         $this->dataLogger->add('WS from api for transision : ' $transitionName'operationOrderWorkflow'$event->getSubject(), 'info');
  64.         $this->operationOrderService->notifyAgency($operationOrder$transitionName);
  65.     }
  66.     public function onLeave(Event $event): void
  67.     {
  68.     }
  69.     public static function getSubscribedEvents(): array
  70.     {
  71.         return [
  72.             'workflow.operation_order_step.leave'     => 'onLeave',
  73.             'workflow.operation_order_step.enter'     => 'onEnter',
  74.             'workflow.operation_order_step.completed' => 'onCompleted',
  75.             'workflow.operation_order_step.entered'   => 'onEntered',
  76.         ];
  77.     }
  78. }