<?php declare(strict_types=1);
namespace Okeonline\KejeDeliveryDatePicker\Storefront\Subscriber;
use Okeonline\KejeDeliveryDatePicker\Core\Checkout\Cart\DeliveryDateCartProcessor;
use Okeonline\KejeDeliveryDatePicker\OkeonlineKejeDeliveryDatePicker;
use Shopware\Core\Checkout\Cart\Order\CartConvertedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class CartConvertedEventSubscriber implements EventSubscriberInterface
{
/**
* @var RequestStack
*/
private $request;
public function __construct(
RequestStack $request
)
{
$this->request = $request;
}
public static function getSubscribedEvents(): array
{
return [
CartConvertedEvent::class => 'multipleHandlers'
];
}
public function multipleHandlers(CartConvertedEvent $event)
{
$this->addDeliveryDateToCustomFields($event);
$this->addExtraDataToCustomFields($event);
}
public function addDeliveryDateToCustomFields(CartConvertedEvent $event)
{
$convertedCart = $event->getConvertedCart();
$selectedDeliveryDate = "";
$deliveryDateLineItem = $event->getCart()->getLineItems()->get(DeliveryDateCartProcessor::UNIQUE_ID);
if($deliveryDateLineItem)
{
if(array_key_exists(DeliveryDateCartProcessor::TYPE, $deliveryDateLineItem->getPayload())) {
$selectedDeliveryDate = $deliveryDateLineItem->getPayload()[DeliveryDateCartProcessor::TYPE];
}
}
$currentCustomFields = $convertedCart['customFields'] ?? [];
$customFields = array_merge($currentCustomFields, [OkeonlineKejeDeliveryDatePicker::CUSTOM_FIELD_TECH_NAME => $selectedDeliveryDate]);
$event->setConvertedCart(array_merge($convertedCart, ['customFields' => $customFields]));
}
public function addExtraDataToCustomFields(CartConvertedEvent $event)
{
$extraData = null;
if(!$this->request->getCurrentRequest()->request->has('oo_checkout_extra_data_'))
{
return;
}
$extraDataFromRequest = $this->request->getCurrentRequest()->request->get('oo_checkout_extra_data_');
foreach ($extraDataFromRequest as $key => $value)
{
$extraData['oo_checkout_extra_data_'.$key] = $value;
}
$convertedCart = $event->getConvertedCart();
$currentCustomFields = $convertedCart['customFields'] ?? [];
$customFields = array_merge($currentCustomFields, $extraData);
$event->setConvertedCart(array_merge($convertedCart, ['customFields' => $customFields]));
}
}