src/EventSubscriber/Product/ProductGlobalStockSubscriber.php line 36

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventSubscriber\Product;
  4. use App\Entity\Product\Product;
  5. use App\Handler\ProductVariant\GloballyStockedVariantHandler;
  6. use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. final class ProductGlobalStockSubscriber implements EventSubscriberInterface
  9. {
  10.     private GloballyStockedVariantHandler $variantHandler;
  11.     public function __construct(GloballyStockedVariantHandler $variantHandler)
  12.     {
  13.         $this->variantHandler $variantHandler;
  14.     }
  15.     public static function getSubscribedEvents(): array
  16.     {
  17.         return [
  18.          'sylius.product.pre_create' => 'updateVariantsStock',
  19.          'sylius.product.pre_update' => 'updateVariantsStock',
  20.         ];
  21.     }
  22.     public function updateVariantsStock(ResourceControllerEvent $controllerEvent): void
  23.     {
  24.         $product $controllerEvent->getSubject();
  25.         /**
  26.          * @var  Product $product
  27.          */
  28.         $variants $product->getVariants();
  29.         foreach ($variants as $variant)
  30.         {
  31.             $this->variantHandler->updateVariantStock($variant);
  32.         }
  33.         //boucle sur les variantes
  34.         //service 3
  35.     }
  36. }
  37. //subscriber qui va boucler dans les produits (en param il reçoit un produit)
  38. //service1 : retourne si une variante doit etre mise à jour ou pas (resolver) variant/globallyStockedVariantResolver  (à reflechir)
  39. //service2 : calcul le nombre de stock possible pour la variante en fonction du stock global passé en param et l'option (provider), variants/PossibleStockQuantityProvider
  40. //service3 : une variante en entrée, il appelle le service 1, si service 1 = non on sort, si egal oui on appelle le service 2 pour le stock (onhand)
  41. // et il defini le nouveau onhand et mettre en base  (handler) /variant/globallyStockedVariantHandler