src/Api/EventListener/ImportListener.php line 24

Open in your IDE?
  1. <?php
  2. namespace App\Api\EventListener;
  3. use App\Api\Event\ImportEvent;
  4. use App\Entity\Sale;
  5. use App\Entity\SaleEvent;
  6. use App\Entity\Vehicle;
  7. use Doctrine\ORM\EntityManager;
  8. use Doctrine\ORM\Event\LifecycleEventArgs;
  9. use Doctrine\ORM\Events;
  10. use Symfony\Component\Process\PhpProcess;
  11. use Symfony\Component\Process\Process;
  12. class ImportListener
  13. {
  14.     public function __construct(private readonly string $projectDir, private readonly string $env, private readonly EntityManager $em)
  15.     {
  16.     }
  17.     /**
  18.      * Event call on push from etincelle.
  19.      */
  20.     public function onPushedData(ImportEvent $event): void
  21.     {
  22.         $this->processSale($event);
  23.     }
  24.     /**
  25.      * Event call when last vehicle has been managed.
  26.      */
  27.     public function onLastData(ImportEvent $event): void
  28.     {
  29.         $entity $event->getObject();
  30.         if ($entity instanceof Vehicle) {
  31.             $this->generateFlyers($entity->getSale());
  32.         }
  33.     }
  34.     /**
  35.      * Event call when a sale is imported.
  36.      */
  37.     public function onPersistedData(ImportEvent $event): void
  38.     {
  39.         $this->processVehicles($event);
  40.     }
  41.     /**
  42.      * General post-treatment.
  43.      */
  44.     public function onEnd(): void
  45.     {
  46.         $this->cleanEvents();
  47.     }
  48.     /**
  49.      * import sale.
  50.      */
  51.     protected function processSale(ImportEvent $event)
  52.     {
  53.         // launch sale import in a new process
  54.         $process Process::fromShellCommandline('nohup php '.$this->projectDir.'/bin/console vpauto:etincelle:import sale '.$event->getObject().' --env='.$this->env.' > /dev/null 2>&1 &');
  55.         $process->run();
  56.     }
  57.     /**
  58.      * Import vehicles.
  59.      */
  60.     protected function processVehicles(ImportEvent $event)
  61.     {
  62.         $entity $event->getObject();
  63.         if ($entity instanceof Sale) {
  64.             $process Process::fromShellCommandline('nohup php '.$this->projectDir.'/bin/console vpauto:etincelle:import vehicles '.$entity->getId().' --env='.$this->env.' > /dev/null 2>&1 &');
  65.             $process->run();
  66.         }
  67.     }
  68.     /**
  69.      * Generate flyers.
  70.      */
  71.     protected function generateFlyers(Sale $sale)
  72.     {
  73.         $process Process::fromShellCommandline('nohup php '.$this->projectDir.'/bin/console vpauto:generate:flyer '.$sale->getId().' --force --env='.$this->env.' > /dev/null 2>&1 &');
  74.         $process->run();
  75.     }
  76.     protected function cleanEvents()
  77.     {
  78.         $events $this->em->getRepository(SaleEvent::class)->findAllInFutureSales();
  79.         foreach ($events as $event) {
  80.             if ($event->isEmpty()) {
  81.                 foreach ($event->getVehicles() as $vehicle) {
  82.                     $this->em->remove($vehicle);
  83.                 }
  84.                 $this->em->flush();
  85.                 $this->em->remove($event);
  86.             }
  87.         }
  88.         $this->em->flush();
  89.     }
  90. }