src/EventSubscriber/WorkflowStepSubscriber.php line 235

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Workflow;
  4. use App\Entity\WorkflowStep;
  5. use App\Entity\Message;
  6. use App\Enum\Trigger;
  7. use App\Event\Workflow\Step\WorkflowStepDeletedEvent;
  8. use App\Event\Workflow\Step\WorkflowStepEditedEvent;
  9. use App\Event\Workflow\Step\WorkflowStepEnteredEvent;
  10. use App\Event\Workflow\Step\WorkflowStepExitedEvent;
  11. use App\Event\Workflow\Step\WorkflowStepRefusedEvent;
  12. use App\Event\Workflow\Step\WorkflowStepRelaunchedEvent;
  13. use App\Event\Workflow\Step\WorkflowStepReturnedEvent;
  14. use App\Event\Workflow\Step\WorkflowStepValidatedEvent;
  15. use App\Service\FrontAPIService;
  16. use App\Service\TriggerService;
  17. use App\Service\StepsService;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  20. use App\Enum\Origin;
  21. use Symfony\Component\Security\Core\Security;
  22. class WorkflowStepSubscriber implements EventSubscriberInterface
  23. {
  24.     public function __construct(
  25.         private TriggerService $triggerService,
  26.         private FrontAPIService $frontAPIService,
  27.         private StepsService $stepsService,
  28.         private EntityManagerInterface $entityManager,
  29.         private Security $security,
  30.     ){}
  31.     public static function getSubscribedEvents()
  32.     {
  33.         return [
  34.             WorkflowStepValidatedEvent::NAME => 'onStepValidated',
  35.             WorkflowStepRefusedEvent::NAME => 'onStepRefused',
  36.             WorkflowStepEnteredEvent::NAME => 'onStepEntered',
  37.             WorkflowStepReturnedEvent::NAME => 'onStepReturned',
  38.             WorkflowStepExitedEvent::NAME => 'onStepExited',
  39.             WorkflowStepRelaunchedEvent::NAME => 'onStepRelaunched',
  40.             WorkflowStepEditedEvent::NAME => 'onStepEdited',
  41.             WorkflowStepDeletedEvent::NAME => 'onStepDeleted',
  42.         ];
  43.     }
  44.     public function onStepValidated(WorkflowStepValidatedEvent $event)
  45.     {
  46.         $step $event->getStep();
  47.         if (!$step instanceof WorkflowStep) {
  48.             return;
  49.         }
  50.         
  51.         foreach ($step->getActions() as $action) {
  52.             foreach ($action->getTriggers() as $trigger) {
  53.             if ($trigger->getTriggerType() === Trigger::VALIDATION) {
  54.                 $this->triggerService->execute($trigger);
  55.                 }
  56.                 if ($trigger->getTriggerType() === Trigger::CONDITIONAL_OR) {
  57.                     foreach ($trigger->getChilds() as $child) {
  58.                         if ($child->getTriggerType() === Trigger::VALIDATION) {
  59.                             $this->triggerService->execute($child);
  60.                         }
  61.                     }
  62.                 }
  63.             }
  64.         }
  65.         
  66.     }
  67.     public function onStepRefused(WorkflowStepRefusedEvent $event)
  68.     {
  69.         $step $event->getStep();
  70.         if (!$step instanceof WorkflowStep) {
  71.             return;
  72.         }
  73.         foreach ($step->getActions() as $action) {
  74.             foreach ($action->getTriggers() as $trigger) {
  75.                 if ($trigger->getTriggerType() === Trigger::REFUSAL) {
  76.                     $this->triggerService->execute($trigger);
  77.                 }
  78.                 if ($trigger->getTriggerType() === Trigger::CONDITIONAL_OR) {
  79.                     foreach ($trigger->getChilds() as $child) {
  80.                         if ($child->getTriggerType() === Trigger::REFUSAL) {
  81.                             $this->triggerService->execute($child);
  82.                         }
  83.                     }
  84.                 }
  85.             }
  86.         }
  87.     }
  88.     public function onStepEntered(WorkflowStepEnteredEvent $event)
  89.     {
  90.         $step $event->getStep();
  91.         $mission $step->getWorkflow()->getMission();
  92.         $notAddMessageInTchat false;
  93.         if (!$step instanceof WorkflowStep) {
  94.             return;
  95.         }
  96.         foreach ($step->getActions() as $action) {
  97.             foreach ($action->getTriggers() as $trigger) {
  98.                 if ($trigger->getTriggerType() === Trigger::ENTER_STEP) {
  99.                     
  100.                     $this->triggerService->execute($trigger);
  101.                     $notAddMessageInTchat true;
  102.                 }
  103.                 if ($trigger->getTriggerType() === Trigger::CONDITIONAL_OR) {
  104.                     foreach ($trigger->getChilds() as $child) {
  105.                         if ($child->getTriggerType() === Trigger::ENTER_STEP) {
  106.                             $this->triggerService->execute($child);
  107.                             $notAddMessageInTchat true;
  108.                         }
  109.                     }
  110.                 }
  111.             }
  112.         }
  113.         if(!$notAddMessageInTchat && ($mission!=null && $mission->getProduct()->getName() !="Espace de discussion")){
  114.             $mission $step->getWorkflow()->getMission();
  115.             $message = new Message();
  116.             $content $this->stepsService->getTemplateStepUpdate($mission,  null$step);
  117.             $message->setOrigin(Origin::SYSTEM->value)
  118.                     ->setUser($this->security->getUser())
  119.                     ->setContent($content)
  120.                     ->setCampaign($mission->getCampaign())
  121.                     ->setMission($mission)
  122.                     ->setUserListWhoRead([$this->security->getUser()->getId()]);
  123.                 $this->entityManager->persist($message);
  124.            
  125.         }
  126.     }
  127.     public function onStepReturned(WorkflowStepReturnedEvent $event)
  128.     {
  129.         $step $event->getStep();
  130.         if (!$step instanceof WorkflowStep) {
  131.             return;
  132.         }
  133.         foreach ($step->getActions() as $action) {
  134.             foreach ($action->getTriggers() as $trigger) {
  135.                 if ($trigger->getTriggerType() === Trigger::RETURN_TO_STEP) {
  136.                     $this->triggerService->execute($trigger);
  137.                 }
  138.                 if ($trigger->getTriggerType() === Trigger::CONDITIONAL_OR) {
  139.                     foreach ($trigger->getChilds() as $child) {
  140.                         if ($child->getTriggerType() === Trigger::RETURN_TO_STEP) {
  141.                             $this->triggerService->execute($child);
  142.                         }
  143.                     }
  144.                 }
  145.             }
  146.         }
  147.     }
  148.     public function onStepExited(WorkflowStepExitedEvent $event)
  149.     {
  150.         $step $event->getStep();
  151.         if (!$step instanceof WorkflowStep) {
  152.             return;
  153.         }
  154.         foreach ($step->getActions() as $action) {
  155.             foreach ($action->getTriggers() as $trigger) {
  156.                 if ($trigger->getTriggerType() === Trigger::EXIT_STEP) {
  157.                     $this->triggerService->execute($trigger);
  158.                 }
  159.                 if ($trigger->getTriggerType() === Trigger::CONDITIONAL_OR) {
  160.                     foreach ($trigger->getChilds() as $child) {
  161.                         if ($child->getTriggerType() === Trigger::EXIT_STEP) {
  162.                             $this->triggerService->execute($child);
  163.                         }
  164.                     }
  165.                 }
  166.             }
  167.         }
  168.     }
  169.     public function onStepRelaunched(WorkflowStepRelaunchedEvent $event)
  170.     {
  171.         $step $event->getStep();
  172.         if (!$step instanceof WorkflowStep) {
  173.             return;
  174.         }
  175.         foreach ($step->getActions() as $action) {
  176.             foreach ($action->getTriggers() as $trigger) {
  177.                 if ($trigger->getTriggerType() === Trigger::RELAUNCH_CLIENT) {
  178.                     $this->triggerService->execute($trigger);
  179.                 }
  180.                 if ($trigger->getTriggerType() === Trigger::CONDITIONAL_OR) {
  181.                     foreach ($trigger->getChilds() as $child) {
  182.                         if ($child->getTriggerType() === Trigger::RELAUNCH_CLIENT) {
  183.                             $this->triggerService->execute($child);
  184.                         }
  185.                     }
  186.                 }
  187.             }
  188.         }
  189.     }
  190.     public function onStepEdited(WorkflowStepEditedEvent $event)
  191.     {
  192.         $step $event->getStep();
  193.         if (!$step instanceof WorkflowStep ||  $step->getWorkflow()->getProduct()==null) {
  194.             return;
  195.         }
  196.         $this->frontAPIService->editProductDeliveryTime(
  197.             product$step->getWorkflow()->getProduct(),
  198.             deliveryTime$step->getWorkflow()->getTotalCompletionTime(),
  199.         );
  200.     }
  201.     public function onStepDeleted(WorkflowStepDeletedEvent $event)
  202.     {
  203.         $workflow $event->getWorkflow();
  204.         if (!$workflow instanceof Workflow) {
  205.             return;
  206.         }
  207.         $this->frontAPIService->editProductDeliveryTime(
  208.             product$workflow->getProduct(),
  209.             deliveryTime$workflow->getTotalCompletionTime(),
  210.         );
  211.     }
  212. }