src/EventSubscriber/Expediting/PackagesLabelsScheduler.php line 55
<?php
namespace App\EventSubscriber\Expediting;
use App\Doctrine\Type\Scheduler\TaskStatus;
use App\Entity\Sales\WorkOrder;
use App\Event\Expediting\FreightDatasheetImportEvent;
use App\Event\Sales\WorkOrderCancelationEvent;
use App\Event\Sales\WorkOrderReopeningEvent;
use App\EventSubscriber\TasksCancelerTrait;
use App\Repository\Scheduler\TaskRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
readonly class PackagesLabelsScheduler implements EventSubscriberInterface
{
use TasksCancelerTrait;
public function __construct(
private EntityManagerInterface $entityManager,
private TaskRepository $taskRepository,
) {}
public static function getSubscribedEvents(): array
{
return [
FreightDatasheetImportEvent::IDENTIFIER => ['handleDatasheet', 0],
WorkOrderCancelationEvent::IDENTIFIER => ['handleCancelation', 0],
WorkOrderReopeningEvent::IDENTIFIER => ['handleReopening', 0],
];
}
public function handleDatasheet(FreightDatasheetImportEvent $event): void
{
$datasheet = $event->getDatasheet();
/** @var WorkOrder $workOrder */
$workOrder = $this->entityManager->getRepository(WorkOrder::class)->findOneBy([
'reference' => $datasheet->workOrderReference,
]);
$shippingLabelsIssuanceTask = $this->taskRepository->getShippingLabelsIssuanceTask($workOrder, createIfNull: true);
$this->entityManager->persist($shippingLabelsIssuanceTask);
$this->entityManager->flush();
}
public function handleCancelation(WorkOrderCancelationEvent $event): void
{
$workOrder = $event->getWorkOrder();
$shippingLabelsIssuanceTask = $this->taskRepository->getShippingLabelsIssuanceTask($workOrder);
$this->cancelTasks([$shippingLabelsIssuanceTask]);
$this->entityManager->flush();
}
public function handleReopening(WorkOrderReopeningEvent $event): void
{
$workOrder = $event->getWorkOrder();
$freightDatasheetImportTask = $this->taskRepository->getFreightDatasheetImportTask($workOrder);
if (TaskStatus::COMPLETED !== $freightDatasheetImportTask->getStatus()) {
return;
}
$shippingLabelsIssuanceTask = $this->taskRepository->getShippingLabelsIssuanceTask($workOrder, createIfNull: true);
$this->entityManager->persist($shippingLabelsIssuanceTask);
$this->entityManager->flush();
}
}