src/EventSubscriber/Expediting/TransitDocumentUploadScheduler.php line 47

  1. <?php
  2. namespace App\EventSubscriber\Expediting;
  3. use App\Doctrine\Type\Scheduler\TaskStatus;
  4. use App\Entity\Expediting\Shipment;
  5. use App\Event\Expediting\ShipmentStatusUpdateEvent;
  6. use App\Event\Sales\TransitDocumentUploadEvent;
  7. use App\Repository\Scheduler\TaskRepository;
  8. use DateTime;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. readonly class TransitDocumentUploadScheduler 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.             ShipmentStatusUpdateEvent::IDENTIFIER => ['schedule'0],
  21.             TransitDocumentUploadEvent::IDENTIFIER => ['process'0],
  22.         ];
  23.     }
  24.     public function schedule(ShipmentStatusUpdateEvent $event): void
  25.     {
  26.         $segment $event->getShippingSegment();
  27.         $shippingPlan $segment->getShippingPlan();
  28.         $shipment $shippingPlan->getShipment();
  29.         // Todo : update this to detect when a transit document is required
  30.         if (!$shipment instanceof Shipment) {
  31.             return;
  32.         }
  33.         foreach ($shipment->getWorkOrders() as $workOrder) {
  34.             $transitDocumentUploadTask $this->taskRepository->getTransitDocumentUploadTask($workOrdercreateIfNulltrue);
  35.             $this->entityManager->persist($transitDocumentUploadTask);
  36.         }
  37.         $this->entityManager->flush();
  38.     }
  39.     public function process(TransitDocumentUploadEvent $event): void
  40.     {
  41.         $workOrder $event->getWorkOrder();
  42.         // Mark upload task as complete
  43.         $transitDocumentUploadTask $this->taskRepository->getTransitDocumentUploadTask($workOrdercreateIfNulltrue);
  44.         $transitDocumentUploadTask->setStatus(TaskStatus::COMPLETED);
  45.         $transitDocumentUploadTask->setCompletedOn(new DateTime());
  46.         $this->entityManager->persist($transitDocumentUploadTask);
  47.         $this->entityManager->flush();
  48.     }
  49. }