<?php
namespace Twigel\BonusProgram\Subscriber;
use Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent;
use Shopware\Core\Framework\Struct\Struct;
use Shopware\Core\Framework\Struct\StructCollection;
use Shopware\Core\Framework\Uuid\Uuid;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Twigel\BonusProgram\Struct\TwigelExtension;
class BeforeLineItemAddSubscrier implements EventSubscriberInterface
{
/** @var RequestStack */
private $request;
public function __construct($request)
{
$this->request = $request;
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
BeforeLineItemAddedEvent::class => 'onAdd'
];
}
public function onAdd(BeforeLineItemAddedEvent $event){
$lineItems = $event->getCart()->getLineItems();
$currentLineItem = $event->getLineItem();
if (!array_key_exists('productBonusSell', $this->request->getCurrentRequest()->request->all())){
if ($lineItems->get($currentLineItem->getReferencedId())){
$cartLineItem = $lineItems->get($currentLineItem->getReferencedId());
if ($cartLineItem->getPriceDefinition() && $cartLineItem->getPriceDefinition()->getPrice() === 0.0){
$id = Uuid::randomHex();
$cartLineItem->setQuantity($cartLineItem->getQuantity() - 1);
$currentLineItem->setId($id);
$lineItems->add($currentLineItem);
}
}
}else{
$element = new TwigelExtension();
$element->assign(['value' => $this->request->getCurrentRequest()->request->all()['productBonusSell']]);
$currentLineItem->setExtensions(['productBonusSell' => $element]);
$id = Uuid::randomHex();
$currentLineItem->setId($id);
if ($lineItems->get($currentLineItem->getReferencedId())){
$cartLineItem = $lineItems->get($currentLineItem->getReferencedId());
if ($cartLineItem->getPriceDefinition() && $cartLineItem->getPriceDefinition()->getPrice() !== 0.0){
$cartLineItem->setQuantity($cartLineItem->getQuantity() - 1);
$lineItems->add($currentLineItem);
}
}
}
}
}