custom/plugins/NetiNextEasyCoupon/src/Subscriber/LineItemSubscriber.php line 115

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace NetInventors\NetiNextEasyCoupon\Subscriber;
  4. use NetInventors\NetiNextEasyCoupon\Core\Checkout\Cart\CartDataDefinition;
  5. use NetInventors\NetiNextEasyCoupon\Core\Content\EasyCoupon\EasyCouponEntity;
  6. use NetInventors\NetiNextEasyCoupon\Core\Content\Product\Cart\EasyCouponError;
  7. use NetInventors\NetiNextEasyCoupon\Service\PluginConfig;
  8. use NetInventors\NetiNextEasyCoupon\Service\VoucherRedemptionService;
  9. use Shopware\Core\Checkout\Cart\Event\AfterLineItemAddedEvent;
  10. use Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent;
  11. use Shopware\Core\Checkout\Cart\Event\BeforeLineItemRemovedEvent;
  12. use Shopware\Core\Checkout\Cart\SalesChannel\CartService;
  13. use Shopware\Core\Checkout\Promotion\Cart\PromotionItemBuilder;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use Symfony\Component\HttpFoundation\RequestStack;
  16. class LineItemSubscriber implements EventSubscriberInterface
  17. {
  18.     /**
  19.      * @var PluginConfig
  20.      */
  21.     private $pluginConfig;
  22.     /**
  23.      * @var VoucherRedemptionService
  24.      */
  25.     private $voucherRedemptionService;
  26.     /** @var RequestStack  */
  27.     private $requestStack;
  28.     /** @var CartService  */
  29.     private $cartService;
  30.     public function __construct(
  31.         VoucherRedemptionService $voucherRedemptionService,
  32.         PluginConfig $pluginConfig,
  33.         RequestStack $requestStack,
  34.         CartService $cartService
  35.     ) {
  36.         $this->voucherRedemptionService $voucherRedemptionService;
  37.         $this->pluginConfig             $pluginConfig;
  38.         $this->requestStack             $requestStack;
  39.         $this->cartService              $cartService;
  40.     }
  41.     public static function getSubscribedEvents(): array
  42.     {
  43.         return [
  44.             BeforeLineItemAddedEvent::class => [
  45.                 [ 'onLineItemAdded'5000 ],
  46.             ],
  47.             BeforeLineItemRemovedEvent::class => [
  48.                 [ 'onLineItemRemoved'5000 ],
  49.             ],
  50.             AfterLineItemAddedEvent::class => [
  51.                 [ 'onAfterLineItemAdded'5000 ],
  52.             ],
  53.         ];
  54.     }
  55.     /**
  56.      * @param AfterLineItemAddedEvent $event
  57.      */
  58.     public function onAfterLineItemAdded(AfterLineItemAddedEvent $event): void
  59.     {
  60.         if (!$this->pluginConfig->isActive()) {
  61.             return;
  62.         }
  63.         $cart           $event->getCart();
  64.         $vouchersInCart null;
  65.         /** @var CartDataDefinition $cartDataDefinition */
  66.         $cartDataDefinition $cart->getData()->get('easy-coupon-codes');
  67.         if (null !== $cartDataDefinition) {
  68.             $vouchersInCart $cartDataDefinition->getEasyCoupons();
  69.         }
  70.         $request $this->requestStack->getCurrentRequest();
  71.         if (null === $request) {
  72.             return;
  73.         }
  74.         $voucherCodes $request->getSession()->get('EasyCouponVoucherCodes');
  75.         if (null === $voucherCodes) {
  76.             return;
  77.         }
  78.         foreach ($voucherCodes as $code) {
  79.             if (isset($vouchersInCart[$code])) {
  80.                 continue;
  81.             }
  82.             $itemBuilder = new PromotionItemBuilder();
  83.             $lineItem $itemBuilder->buildPlaceholderItem($code);
  84.             $this->cartService->add($event->getCart(), $lineItem$event->getSalesChannelContext());
  85.         }
  86.     }
  87.     /**
  88.      * @param BeforeLineItemAddedEvent $event
  89.      *
  90.      * @throws EasyCouponError
  91.      */
  92.     public function onLineItemAdded(BeforeLineItemAddedEvent $event): void
  93.     {
  94.         if (!$this->pluginConfig->isActive()) {
  95.             return;
  96.         }
  97.         $this->voucherRedemptionService->addVoucherToCart($event);
  98.     }
  99.     public function onLineItemRemoved(BeforeLineItemRemovedEvent $event): void
  100.     {
  101.         if (!$this->pluginConfig->isActive()) {
  102.             return;
  103.         }
  104.         $this->voucherRedemptionService->removeVoucherFromCart($event->getCart(), $event->getLineItem());
  105.     }
  106. }