<?php
namespace Twigel\SportB2B\Subscriber;
use Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent;
use Shopware\Core\Checkout\Cart\LineItem\LineItem;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
class BeforeLineItemAdd implements EventSubscriberInterface
{
/** @var RequestStack */
private RequestStack $request;
public function __construct($request)
{
$this->request = $request;
}
public static function getSubscribedEvents(): array
{
return [
BeforeLineItemAddedEvent::class => 'lineItem'
];
}
public function lineItem(BeforeLineItemAddedEvent $event):void
{
$productPrice = $this->request->getCurrentRequest()->request->get('productPrice');
$productId = $this->request->getCurrentRequest()->request->get('productId');
if ($productPrice === null || $productId === null || !is_numeric($productPrice) || !is_string($productId)) {
return;
}
$cart = $event->getCart();
/** @var LineItem $item */
foreach ($cart->getLineItems() as $item) {
if ($item->getId() === $this->request->getCurrentRequest()->request->get('productId')) {
$item->setPayloadValue('price', $productPrice);
}
}
}
}