src/EventSubscriber/Expediting/ProofOfCollectionScheduler.php line 45

  1. <?php
  2. namespace App\EventSubscriber\Expediting;
  3. use App\Doctrine\Type\Expediting\ShipmentType;
  4. use App\Doctrine\Type\Scheduler\TaskStatus;
  5. use App\Event\Expediting\ShipmentStatusUpdateEvent;
  6. use App\Event\Sales\SignedPocUploadEvent;
  7. use App\Repository\Scheduler\TaskRepository;
  8. use DateTime;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. readonly class ProofOfCollectionScheduler 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.             SignedPocUploadEvent::IDENTIFIER => ['process'0],
  22.         ];
  23.     }
  24.     public function schedule(ShipmentStatusUpdateEvent $event): void
  25.     {
  26.         $segment $event->getShippingSegment();
  27.         $shippingPlan $segment->getShippingPlan();
  28.         $workOrder $shippingPlan->getWorkOrder();
  29.         if (null === $workOrder || !in_array(ShipmentType::PICKUP$segment->getTypes())) {
  30.             return;
  31.         }
  32.         $pocIssuanceTask $this->taskRepository->getPocIssuanceTask($workOrdercreateIfNulltrue);
  33.         $signedPocUploadTask $this->taskRepository->getSignedPocUploadTask($workOrdercreateIfNulltrue);
  34.         $this->entityManager->persist($pocIssuanceTask);
  35.         $this->entityManager->persist($signedPocUploadTask);
  36.         $this->entityManager->flush();
  37.     }
  38.     public function process(SignedPocUploadEvent $event): void
  39.     {
  40.         $workOrder $event->getWorkOrder();
  41.         // Mark upload task as complete
  42.         $signedPocUploadTask $this->taskRepository->getSignedPocUploadTask($workOrder);
  43.         $signedPocUploadTask->setStatus(TaskStatus::COMPLETED);
  44.         $signedPocUploadTask->setCompletedOn(new DateTime());
  45.         $this->entityManager->persist($signedPocUploadTask);
  46.         // Schedule uploaded file for email issuance
  47.         $signedPocIssuanceTask $this->taskRepository->getSignedPocIssuanceTask($workOrdercreateIfNulltrue);
  48.         $this->entityManager->persist($signedPocIssuanceTask);
  49.         $this->entityManager->flush();
  50.     }
  51. }