src/EventSubscriber/Expediting/ShippingPlanCreationSubscriber.php line 28

  1. <?php
  2. namespace App\EventSubscriber\Expediting;
  3. use App\Doctrine\Type\Scheduler\TaskStatus;
  4. use App\Entity\Expediting\ShippingPlan;
  5. use App\Entity\Sales\WorkOrder;
  6. use App\Event\Expediting\ShippingPlanCreationEvent;
  7. use App\Repository\Scheduler\TaskRepository;
  8. use DateTime;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. readonly class ShippingPlanCreationSubscriber implements EventSubscriberInterface
  12. {
  13.     public function __construct(
  14.         private EntityManagerInterface $entityManager,
  15.         private TaskRepository         $taskRepository,
  16.     ) {}
  17.     public static function getSubscribedEvents(): array
  18.     {
  19.         return [
  20.             ShippingPlanCreationEvent::IDENTIFIER => ['process'100],
  21.         ];
  22.     }
  23.     public function process(ShippingPlanCreationEvent $event): void
  24.     {
  25.         $shippingPlan $event->getShippingPlan();
  26.         // close work order planning task if any
  27.         $this->handleWorkOrderShipmentPlanningTask($shippingPlan);
  28.         $this->entityManager->flush();
  29.     }
  30.     private function handleWorkOrderShipmentPlanningTask(ShippingPlan $shippingPlan): void
  31.     {
  32.         $workOrder $shippingPlan->getWorkOrder();
  33.         if (!$workOrder instanceof WorkOrder) {
  34.             return;
  35.         }
  36.         $shipmentPlanningTask $this->taskRepository->getShipmentPlanningTask(workOrder$workOrdercreateIfNulltrue);
  37.         $shipmentPlanningTask->setStatus(TaskStatus::COMPLETED);
  38.         $shipmentPlanningTask->setCompletedOn(new DateTime());
  39.         $this->entityManager->persist($shipmentPlanningTask);
  40.     }
  41. }