src/EventListener/OpeOrderRefrigeratorbinWorkflowListener.php line 38

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\OperationOrderRefrigeratorLine;
  4. use App\Entity\OperationOrderStepVersion;
  5. use App\Entity\PolymorphicOperationOrder\OperationOrderRefrigeratorBin;
  6. use App\Service\QuotaService;
  7. use App\Service\User as UserService;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\Workflow\Event\Event;
  11. use Symfony\Component\Workflow\Registry;
  12. class OpeOrderRefrigeratorbinWorkflowListener implements EventSubscriberInterface
  13. {
  14.     private EntityManagerInterface $entityManager;
  15.     private QuotaService $quotaService;
  16.     private UserService $userService;
  17.     private Registry $workflow;
  18.     public function __construct(EntityManagerInterface $entityManagerUserService $userServiceQuotaService $quotaServiceRegistry $wokflow)
  19.     {
  20.         $this->entityManager $entityManager;
  21.         $this->quotaService $quotaService;
  22.         $this->userService $userService;
  23.         $this->workflow $wokflow;
  24.     }
  25.     public function onEnter(Event $event): void
  26.     {
  27.     }
  28.     public function onTransition(Event $event): void
  29.     {
  30.     }
  31.     public function onEntered(Event $event): void
  32.     {
  33.     }
  34.     public function onCompleted(Event $event): void
  35.     {
  36.         $transitionName $event->getTransition()->getName();
  37.         $user $this->userService->getUser();
  38.         /** @var OperationOrderRefrigeratorBin $operationOrder */
  39.         $operationOrder $event->getSubject();
  40.         $operationOrder->setUpdatedAt(new \DateTime());
  41.         if (method_exists($this$transitionName)) {
  42.             $this->{$transitionName}($operationOrder$transitionName);
  43.         }
  44.         if (null === $user) {
  45.             $user $operationOrder->getUser();
  46.         }
  47.         $this->entityManager->persist($operationOrder);
  48.         $operationOrderStepVersion = new OperationOrderStepVersion();
  49.         $operationOrderStepVersion->setDate(new \DateTime());
  50.         $operationOrderStepVersion->setStep(strtolower(substr((string) $transitionName2)));
  51.         $operationOrderStepVersion->setUser($user);
  52.         $operationOrderStepVersion->setOperationOrder($operationOrder);
  53.         $this->entityManager->persist($operationOrderStepVersion);
  54.         $this->entityManager->flush();
  55.     }
  56.     public function toCanceled(OperationOrderRefrigeratorBin $operationOrderstring $transitionName): void
  57.     {
  58.         try {
  59.             $oldPrice $operationOrder->getPrice();
  60.             $operationOrder->setPrice(0.0);
  61.             $updatedQuota $this->quotaService->updateQuota($operationOrder$oldPrice);
  62.         } catch (\Exception) {
  63.             // echo 'Exception reçue : ',  $e->getMessage(), "\n";
  64.         }
  65.     }
  66.     public function toShipped(OperationOrderRefrigeratorBin $operationOrderstring $transitionName): void
  67.     {
  68.         $opeOrderRefrigeratorLines $operationOrder->getOpeOrderRefrigeratorLines()->toArray();
  69.         if (!empty($opeOrderRefrigeratorLines)) {
  70.             foreach ($opeOrderRefrigeratorLines as $opeOrderRefrigeratorLine) {
  71.                 if ($opeOrderRefrigeratorLine instanceof OperationOrderRefrigeratorLine) {
  72.                     $refrigeratorInstances $opeOrderRefrigeratorLine->getRefrigeratorInstances()->toArray();
  73.                     if (!empty($refrigeratorInstances)) {
  74.                         foreach ($refrigeratorInstances as $refrigeratorInstance) {
  75.                             $workflow $this->workflow->get($refrigeratorInstance'refrigerator_instance_step');
  76.                             if ($refrigeratorInstance->getStep() !== 'shipped' && $workflow->can($refrigeratorInstance$transitionName)) {
  77.                                 $workflow->apply($refrigeratorInstance$transitionName);
  78.                             }
  79.                         }
  80.                     }
  81.                 }
  82.             }
  83.         }
  84.     }
  85.     public function toDelivered(OperationOrderRefrigeratorBin $operationOrderstring $transitionName): void
  86.     {
  87.         $opeOrderRefrigeratorLines $operationOrder->getOpeOrderRefrigeratorLines()->toArray();
  88.         if (!empty($opeOrderRefrigeratorLines)) {
  89.             foreach ($opeOrderRefrigeratorLines as $opeOrderRefrigeratorLine) {
  90.                 if ($opeOrderRefrigeratorLine instanceof OperationOrderRefrigeratorLine) {
  91.                     $refrigeratorInstances $opeOrderRefrigeratorLine->getRefrigeratorInstances()->toArray();
  92.                     if (!empty($refrigeratorInstances)) {
  93.                         foreach ($refrigeratorInstances as $refrigeratorInstance) {
  94.                             $workflow $this->workflow->get($refrigeratorInstance'refrigerator_instance_step');
  95.                             if ($refrigeratorInstance->getStep() !== 'delivered' && $workflow->can($refrigeratorInstance$transitionName)) {
  96.                                 $workflow->apply($refrigeratorInstance$transitionName);
  97.                             }
  98.                         }
  99.                     }
  100.                 }
  101.             }
  102.         }
  103.     }
  104.     public function toAbandonnedTransmited(OperationOrderRefrigeratorBin $operationOrderstring $transitionName): void
  105.     {
  106.         $workflow $this->workflow->get($operationOrder'order_refrigeratorbin_step');
  107.         if ($workflow->can($operationOrder'toAbandonned')) {
  108.             $workflow->apply($operationOrder'toAbandonned');
  109.         }
  110.     }
  111.     public function toFinishedClosed(OperationOrderRefrigeratorBin $operationOrderstring $transitionName): void
  112.     {
  113.         $opeOrderRefrigeratorLines $operationOrder->getOpeOrderRefrigeratorLines()->toArray();
  114.         if (!empty($opeOrderRefrigeratorLines)) {
  115.             foreach ($opeOrderRefrigeratorLines as $opeOrderRefrigeratorLine) {
  116.                 if ($opeOrderRefrigeratorLine instanceof OperationOrderRefrigeratorLine) {
  117.                     $refrigeratorInstances $opeOrderRefrigeratorLine->getRefrigeratorInstances()->toArray();
  118.                     if (!empty($refrigeratorInstances)) {
  119.                         foreach ($refrigeratorInstances as $refrigeratorInstance) {
  120.                             $workflow $this->workflow->get($refrigeratorInstance'refrigerator_instance_step');
  121.                             if ($refrigeratorInstance->getStep() !== 'recovered' && $workflow->can($refrigeratorInstance'toRecovered')) {
  122.                                 $workflow->apply($refrigeratorInstance'toRecovered');
  123.                             }
  124.                         }
  125.                     }
  126.                 }
  127.             }
  128.         }
  129.     }
  130.     public function onLeave(Event $event): void
  131.     {
  132.     }
  133.     public static function getSubscribedEvents(): array
  134.     {
  135.         return [
  136.             'workflow.order_refrigeratorbin_step.leave'     => 'onLeave',
  137.             'workflow.order_refrigeratorbin_step.enter'     => 'onEnter',
  138.             'workflow.order_refrigeratorbin_step.completed' => 'onCompleted',
  139.             'workflow.order_refrigeratorbin_step.entered'   => 'onEntered',
  140.         ];
  141.     }
  142. }