<?php declare(strict_types=1);
namespace Nxs\NxsDeliveryTimesDisplay\Subscriber;
use Shopware\Core\Checkout\Cart\Event\LineItemAddedEvent;
use Shopware\Core\Checkout\Cart\LineItem\LineItem;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class LineItemAddedSubscriber implements EventSubscriberInterface
{
/**
* @var EntityRepositoryInterface
*/
private $entityRepository;
public function __construct(EntityRepositoryInterface $entityRepository)
{
$this->entityRepository = $entityRepository;
}
public static function getSubscribedEvents()
{
return [
LineItemAddedEvent::class => 'onLineItemAdded'
];
}
/**
* @param LineItemAddedEvent $event
* @throws \Shopware\Core\Framework\DataAbstractionLayer\Exception\InconsistentCriteriaIdsException
*/
public function onLineItemAdded(LineItemAddedEvent $event)
{
/** @var LineItem $lineItem */
foreach ($event->getCart()->getLineItems()->getElements() as $lineItem){
if ($lineItem->getType() === 'product' && $lineItem->getId() === $event->getLineItem()->getId()){
$product = $this->entityRepository->search(new Criteria([$lineItem->getId()]), $event->getContext()->getContext())->first();
$nxsAdditionalDeliveryTime = isset($product->getCustomFields()['nxs_additional_delivery_time']) ? $product->getCustomFields()['nxs_additional_delivery_time'] : null;
if (!empty($nxsAdditionalDeliveryTime)){
$lineItem->assign(['nxs_additional_delivery_time' => $nxsAdditionalDeliveryTime]);
}
}
}
}
}