src/EventSubscriber/Delete/PackagesImportSubscriber.php line 33

  1. <?php
  2. namespace App\EventSubscriber\Delete;
  3. use ApiPlatform\Validator\ValidatorInterface;
  4. use App\Entity\Sales\WorkOrder;
  5. use App\Event\Expediting\FreightDatasheetImportEvent;
  6. use App\Event\Purchasing\OrderDatasheetImportEvent;
  7. use App\Repository\Scheduler\TaskRepository;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Symfony\Component\HttpKernel\KernelInterface;
  11. readonly class PackagesImportSubscriber implements EventSubscriberInterface
  12. {
  13.     use BoxMoverTrait;
  14.     public function __construct(
  15.         private KernelInterface $kernel,
  16.         private EntityManagerInterface $entityManager,
  17.         private TaskRepository $taskRepository,
  18.         private ValidatorInterface $validator,
  19.     ) {}
  20.     public static function getSubscribedEvents(): array
  21.     {
  22.         return [
  23.             FreightDatasheetImportEvent::IDENTIFIER => ['handleRFC', -100],
  24.             OrderDatasheetImportEvent::IDENTIFIER => ['handleBW', -100],
  25.         ];
  26.     }
  27.     public function handleRFC(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.         // If boxes are not attached to work order delete and recreate all - otherwise just update prices and descriptions
  35.         if ($this->deleteOldBoxes($workOrder)) {
  36.             $this->createBoxes($datasheet$workOrder);
  37.         } else {
  38.             dd('here');
  39.         }
  40.     }
  41.     public function handleBW(OrderDatasheetImportEvent $event): void
  42.     {
  43.         $workOrders = [];
  44.         foreach ($event->getOrder()->getFreights() as $freight) {
  45.             $workOrder $freight->getWorkOrder();
  46.             $workOrders[$workOrder->getId()] = $workOrder;
  47.         }
  48.         if (empty($workOrders)) {
  49.             return;
  50.         }
  51.         foreach ($workOrders as $workOrder) {
  52.             $this->updateBoxesByWorkOrder($workOrder);
  53.         }
  54.         $this->entityManager->flush();
  55.     }
  56. }