src/EventSubscriber/Delete/PackagesImportSubscriber.php line 33
<?php
namespace App\EventSubscriber\Delete;
use ApiPlatform\Validator\ValidatorInterface;
use App\Entity\Sales\WorkOrder;
use App\Event\Expediting\FreightDatasheetImportEvent;
use App\Event\Purchasing\OrderDatasheetImportEvent;
use App\Repository\Scheduler\TaskRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelInterface;
readonly class PackagesImportSubscriber implements EventSubscriberInterface
{
use BoxMoverTrait;
public function __construct(
private KernelInterface $kernel,
private EntityManagerInterface $entityManager,
private TaskRepository $taskRepository,
private ValidatorInterface $validator,
) {}
public static function getSubscribedEvents(): array
{
return [
FreightDatasheetImportEvent::IDENTIFIER => ['handleRFC', -100],
OrderDatasheetImportEvent::IDENTIFIER => ['handleBW', -100],
];
}
public function handleRFC(FreightDatasheetImportEvent $event): void
{
$datasheet = $event->getDatasheet();
/** @var WorkOrder $workOrder */
$workOrder = $this->entityManager->getRepository(WorkOrder::class)->findOneBy([
'reference' => $datasheet->workOrderReference,
]);
// If boxes are not attached to work order delete and recreate all - otherwise just update prices and descriptions
if ($this->deleteOldBoxes($workOrder)) {
$this->createBoxes($datasheet, $workOrder);
} else {
dd('here');
}
}
public function handleBW(OrderDatasheetImportEvent $event): void
{
$workOrders = [];
foreach ($event->getOrder()->getFreights() as $freight) {
$workOrder = $freight->getWorkOrder();
$workOrders[$workOrder->getId()] = $workOrder;
}
if (empty($workOrders)) {
return;
}
foreach ($workOrders as $workOrder) {
$this->updateBoxesByWorkOrder($workOrder);
}
$this->entityManager->flush();
}
}