src/EventSubscriber/StockSubscriber.php line 41

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\ProductStock;
  4. use App\Event\Produit\StockMvtEvent;
  5. use App\Repository\ProductStockRepository;
  6. use App\Service\ProductHelper;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class StockSubscriber implements EventSubscriberInterface
  10. {
  11.     /**
  12.      * @var ProductStockRepository
  13.      */
  14.     private $productStockRepository;
  15.     /**
  16.      * @var EntityManagerInterface
  17.      */
  18.     private $entityManager;
  19.     /**
  20.      * @var ProductHelper
  21.      */
  22.     private $productHelper;
  23.     public function __construct(ProductStockRepository $productStockRepositoryEntityManagerInterface $entityManagerProductHelper $productHelper)
  24.     {
  25.         $this->productStockRepository $productStockRepository;
  26.         $this->entityManager $entityManager;
  27.         $this->productHelper $productHelper;
  28.     }
  29.     public static function getSubscribedEvents(): array
  30.     {
  31.         return [
  32.             StockMvtEvent::class => ['onStockUpdated'100],
  33.         ];
  34.     }
  35.     public function onStockUpdated(StockMvtEvent $event)
  36.     {
  37.         $mvt $event->getMvt();
  38.         // On ajoute le prix du produit
  39.         $product $mvt->getProduct();
  40.         $tarif $this->productHelper->getBestTarif($product);
  41.         if ($tarif) {
  42.             $mvt->setHt($tarif->getHt())
  43.                 ->setTtc($tarif->getTtc())
  44.                 ->setTaxe($tarif->getTva());
  45.         }
  46.         // Mise à jour du stock réel
  47.         $stock $this->productStockRepository->findOneBy(['product' => $mvt->getProduct(), 'structure' => $mvt->getStructure()]);
  48.         if (null === $stock) {
  49.             $stock = new ProductStock();
  50.             $stock->setStructure($mvt->getStructure())
  51.                     ->setProduct($mvt->getProduct())
  52.                     ->setSeuilCommande(0)
  53.                     ->setQuantite(0)
  54.                     ->setInclureCommandeAuto(true);
  55.         }
  56.         if ($mvt->getTypeMouvement() == 'in') {
  57.             $stock->setQuantite($stock->getQuantite() + $mvt->getQuantite());
  58.         } else {
  59.             $stock->setQuantite($stock->getQuantite() - $mvt->getQuantite());
  60.         }
  61.         $this->entityManager->persist($stock);
  62.         $this->entityManager->flush();
  63.     }
  64. }