src/EventSubscriber/Purchasing/OrderDatasheetImportSchedulingSubscriber.php line 51
<?php
namespace App\EventSubscriber\Purchasing;
use App\Event\Sales\WorkOrderCancelationEvent;
use App\Event\Sales\WorkOrderCreationEvent;
use App\Event\Sales\WorkOrderEventInterface;
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 OrderDatasheetImportSchedulingSubscriber implements EventSubscriberInterface
{
use TasksCancelerTrait;
public function __construct(
private EntityManagerInterface $entityManager,
private TaskRepository $taskRepository,
) {}
public static function getSubscribedEvents(): array
{
return [
WorkOrderCreationEvent::IDENTIFIER => ['handleScheduling', 70],
WorkOrderReopeningEvent::IDENTIFIER => ['handleScheduling', 70],
WorkOrderCancelationEvent::IDENTIFIER => ['handleCancelation', 70],
];
}
/** It is important to only execute this after work order is persisted and not after the purchase order is persisted */
public function handleScheduling(WorkOrderEventInterface $event): void
{
$workOrder = $event->getWorkOrder();
foreach ($workOrder->getFreights() as $freight) {
$order = $freight->getOrder();
$purchaseOrderDatasheetRequestTask = $this->taskRepository->getPurchaseOrderDatasheetRequestTask(order: $order, createIfNull: true);
$purchaseOrderDatasheetImportTask = $this->taskRepository->getPurchaseOrderDatasheetImportTask(order: $order, createIfNull: true);
$purchaseOrderDatasheetRequestTask->addWorkOrder($freight->getWorkOrder());
$purchaseOrderDatasheetImportTask->addWorkOrder($freight->getWorkOrder());
$this->entityManager->persist($purchaseOrderDatasheetRequestTask);
$this->entityManager->persist($purchaseOrderDatasheetImportTask);
}
$this->entityManager->flush();
}
public function handleCancelation(WorkOrderCancelationEvent $event): void
{
$workOrder = $event->getWorkOrder();
$tasks = [];
foreach ($workOrder->getFreights() as $freight) {
$tasks []= $this->taskRepository->getPurchaseOrderDatasheetRequestTask(order: $freight->getOrder());
$tasks []= $this->taskRepository->getPurchaseOrderDatasheetImportTask(order: $freight->getOrder());
}
$this->cancelTasks($tasks);
$this->entityManager->flush();
}
}