custom/plugins/TwigelBonusProgram/src/Subscriber/BeforeLineItemAddSubscrier.php line 35

Open in your IDE?
  1. <?php
  2. namespace Twigel\BonusProgram\Subscriber;
  3. use Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent;
  4. use Shopware\Core\Framework\Struct\Struct;
  5. use Shopware\Core\Framework\Struct\StructCollection;
  6. use Shopware\Core\Framework\Uuid\Uuid;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Symfony\Component\HttpFoundation\RequestStack;
  9. use Twigel\BonusProgram\Struct\TwigelExtension;
  10. class BeforeLineItemAddSubscrier implements EventSubscriberInterface
  11. {
  12.     /** @var RequestStack */
  13.     private $request;
  14.     public function __construct($request)
  15.     {
  16.         $this->request $request;
  17.     }
  18.     /**
  19.      * @inheritDoc
  20.      */
  21.     public static function getSubscribedEvents()
  22.     {
  23.         return [
  24.             BeforeLineItemAddedEvent::class => 'onAdd'
  25.         ];
  26.     }
  27.     public function onAdd(BeforeLineItemAddedEvent $event){
  28.         $lineItems $event->getCart()->getLineItems();
  29.         $currentLineItem $event->getLineItem();
  30.         if (!array_key_exists('productBonusSell'$this->request->getCurrentRequest()->request->all())){
  31.             if ($lineItems->get($currentLineItem->getReferencedId())){
  32.                 $cartLineItem $lineItems->get($currentLineItem->getReferencedId());
  33.                 if ($cartLineItem->getPriceDefinition() && $cartLineItem->getPriceDefinition()->getPrice() === 0.0){
  34.                     $id Uuid::randomHex();
  35.                     $cartLineItem->setQuantity($cartLineItem->getQuantity() - 1);
  36.                     $currentLineItem->setId($id);
  37.                     $lineItems->add($currentLineItem);
  38.                 }
  39.             }
  40.         }else{
  41.             $element = new TwigelExtension();
  42.             $element->assign(['value' => $this->request->getCurrentRequest()->request->all()['productBonusSell']]);
  43.             $currentLineItem->setExtensions(['productBonusSell' => $element]);
  44.             $id Uuid::randomHex();
  45.             $currentLineItem->setId($id);
  46.             if ($lineItems->get($currentLineItem->getReferencedId())){
  47.                 $cartLineItem $lineItems->get($currentLineItem->getReferencedId());
  48.                 if ($cartLineItem->getPriceDefinition() && $cartLineItem->getPriceDefinition()->getPrice() !== 0.0){
  49.                     $cartLineItem->setQuantity($cartLineItem->getQuantity() - 1);
  50.                     $lineItems->add($currentLineItem);
  51.                 }
  52.             }
  53.         }
  54.     }
  55. }