src/EventListener/FurnitureStockWorkflowListener.php line 77

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\Entity\FurnitureStock;
  4. use App\Entity\FurnitureStockStepVersion;
  5. use App\Service\FurnitureStockService;
  6. use App\Service\User as UserService;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use Symfony\Component\Workflow\Event\Event;
  10. class FurnitureStockWorkflowListener implements EventSubscriberInterface
  11. {
  12.     private EntityManagerInterface $entityManager;
  13.     private FurnitureStockService $furnitureStockService;
  14.     private UserService $userService;
  15.     public function __construct(EntityManagerInterface $entityManagerFurnitureStockService $furnitureStockServiceUserService $userService)
  16.     {
  17.         $this->entityManager $entityManager;
  18.         $this->furnitureStockService $furnitureStockService;
  19.         $this->userService $userService;
  20.     }
  21.     public function onEnter(Event $event): void
  22.     {
  23.     }
  24.     public function onTransition(Event $event): void
  25.     {
  26.     }
  27.     public function onEntered(Event $event): void
  28.     {
  29.     }
  30.     public function onCompleted(Event $event): void
  31.     {
  32.         $transitionName $event->getTransition()->getName();
  33.         $user $this->userService->getUser();
  34.         /** @var FurnitureStock $furnitureStock */
  35.         $furnitureStock $event->getSubject();
  36.         if (method_exists($this$transitionName)) {
  37.             $this->{$transitionName}($furnitureStock$transitionName);
  38.         }
  39.         $furnitureStockStepVersion = new FurnitureStockStepVersion();
  40.         $furnitureStockStepVersion->setDate(new \DateTime());
  41.         $furnitureStockStepVersion->setStep(strtolower(substr((string) $transitionName2)));
  42.         $furnitureStockStepVersion->setUser($user);
  43.         $furnitureStockStepVersion->setFurnitureStock($furnitureStock);
  44.         $currentFurnitureInstance $furnitureStock->getCurrentFurnitureInstance();
  45.         $furnitureStockStepVersion->setFurnitureInstance($currentFurnitureInstance);
  46.         $this->entityManager->persist($furnitureStockStepVersion);
  47.     }
  48.     public function toHs(furnitureStock $furnitureStockstring $transitionName): void
  49.     {
  50.         $this->furnitureStockService->reatributeFutureOrders($furnitureStock, new \DateTime());
  51.         $this->entityManager->persist($furnitureStock);
  52.     }
  53.     public function toMaintenance(furnitureStock $furnitureStockstring $transitionName): void
  54.     {
  55.         $furnitureStock->setCurrentFurnitureInstance(null);
  56.         $this->entityManager->persist($furnitureStock);
  57.     }
  58.     public function toFree(furnitureStock $furnitureStockstring $transitionName): void
  59.     {
  60.         $furnitureStock->setCurrentFurnitureInstance(null);
  61.         $this->entityManager->persist($furnitureStock);
  62.     }
  63.     public function onLeave(Event $event): void
  64.     {
  65.     }
  66.     public static function getSubscribedEvents(): array
  67.     {
  68.         return [
  69.             'workflow.furniture_stock_step.leave'         => 'onLeave',
  70.             'workflow.furniture_stock_step.transition'    => 'onTransition',
  71.             'workflow.furniture_stock_step.enter'         => 'onEnter',
  72.             'workflow.furniture_stock_step.entered'       => 'onEntered',
  73.             'workflow.furniture_stock_step.completed'     => 'onCompleted',
  74.         ];
  75.     }
  76. }