src/EventSubscriber/Expediting/PackagesLabelsScheduler.php line 55

  1. <?php
  2. namespace App\EventSubscriber\Expediting;
  3. use App\Doctrine\Type\Scheduler\TaskStatus;
  4. use App\Entity\Sales\WorkOrder;
  5. use App\Event\Expediting\FreightDatasheetImportEvent;
  6. use App\Event\Sales\WorkOrderCancelationEvent;
  7. use App\Event\Sales\WorkOrderReopeningEvent;
  8. use App\EventSubscriber\TasksCancelerTrait;
  9. use App\Repository\Scheduler\TaskRepository;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. readonly class PackagesLabelsScheduler implements EventSubscriberInterface
  13. {
  14.     use TasksCancelerTrait;
  15.     public function __construct(
  16.         private EntityManagerInterface $entityManager,
  17.         private TaskRepository         $taskRepository,
  18.     ) {}
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [
  22.             FreightDatasheetImportEvent::IDENTIFIER => ['handleDatasheet'0],
  23.             WorkOrderCancelationEvent::IDENTIFIER => ['handleCancelation'0],
  24.             WorkOrderReopeningEvent::IDENTIFIER => ['handleReopening'0],
  25.         ];
  26.     }
  27.     public function handleDatasheet(FreightDatasheetImportEvent $event): void
  28.     {
  29.         $datasheet $event->getDatasheet();
  30.         /** @var WorkOrder $workOrder */
  31.         $workOrder $this->entityManager->getRepository(WorkOrder::class)->findOneBy([
  32.             'reference' => $datasheet->workOrderReference,
  33.         ]);
  34.         $shippingLabelsIssuanceTask $this->taskRepository->getShippingLabelsIssuanceTask($workOrdercreateIfNulltrue);
  35.         $this->entityManager->persist($shippingLabelsIssuanceTask);
  36.         $this->entityManager->flush();
  37.     }
  38.     public function handleCancelation(WorkOrderCancelationEvent $event): void
  39.     {
  40.         $workOrder $event->getWorkOrder();
  41.         $shippingLabelsIssuanceTask $this->taskRepository->getShippingLabelsIssuanceTask($workOrder);
  42.         $this->cancelTasks([$shippingLabelsIssuanceTask]);
  43.         $this->entityManager->flush();
  44.     }
  45.     public function handleReopening(WorkOrderReopeningEvent $event): void
  46.     {
  47.         $workOrder $event->getWorkOrder();
  48.         $freightDatasheetImportTask $this->taskRepository->getFreightDatasheetImportTask($workOrder);
  49.         if (TaskStatus::COMPLETED !== $freightDatasheetImportTask->getStatus()) {
  50.             return;
  51.         }
  52.         $shippingLabelsIssuanceTask $this->taskRepository->getShippingLabelsIssuanceTask($workOrdercreateIfNulltrue);
  53.         $this->entityManager->persist($shippingLabelsIssuanceTask);
  54.         $this->entityManager->flush();
  55.     }
  56. }