<?php
/**
* digitvision
*
* @category digitvision
* @package Shopware\Plugins\DvsnPseudoProduct
* @copyright (c) 2020 digitvision
*/
namespace Dvsn\PseudoProduct\Subscriber\Core\Checkout\Cart\Order;
use Dvsn\PseudoProduct\Service\LineItemFactoryServiceInterface;
use Shopware\Core\Checkout\Cart\LineItem\LineItem;
use Shopware\Core\Checkout\Cart\Order\CartConvertedEvent;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class OrderConverterSubscriber implements EventSubscriberInterface
{
private SystemConfigService $systemConfigService;
public function __construct(
SystemConfigService $systemConfigService
) {
$this->systemConfigService = $systemConfigService;
}
/**
* {@inheritDoc}
*/
public static function getSubscribedEvents(): array
{
return [
CartConvertedEvent::class => ['onCartConverted', 20]
];
}
/**
* ...
*
* @param CartConvertedEvent $event
*/
public function onCartConverted(CartConvertedEvent $event): void
{
if ((boolean) $this->systemConfigService->get('DvsnPseudoProduct.config.status', $event->getSalesChannelContext()->getSalesChannel()->getId()) === false) {
return;
}
$cart = $event->getConvertedCart();
foreach ($cart['lineItems'] as $index => $lineItem) {
if ($lineItem['type'] !== LineItemFactoryServiceInterface::PSEUDO_PRODUCT_LINE_ITEM_TYPE) {
continue;
}
$cart['lineItems'][$index]['stackable'] = true;
$cart['lineItems'][$index]['quantity'] = (int) $lineItem['payload']['dvsnPseudoProductQuantity'];
if ($lineItem['payload']['dvsnPseudoProductType'] === 'product') {
$cart['lineItems'][$index]['type'] = LineItem::PRODUCT_LINE_ITEM_TYPE;
$cart['lineItems'][$index]['productId'] = $lineItem['payload']['dvsnPseudoProductProductId'];
}
}
$event->setConvertedCart($cart);
}
}