<?php
namespace SeeliaApiPlugin\Subscriber;
use Shopware\Core\Checkout\Order\OrderEvents;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityWrittenEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class SubmitOrderSubscriber implements EventSubscriberInterface
{
protected RequestStack $request;
protected EntityRepository $orderRepository;
public function __construct(RequestStack $request, EntityRepository $orderRepository)
{
$this->request = $request;
$this->orderRepository = $orderRepository;
}
public static function getSubscribedEvents()
{
return [
OrderEvents::ORDER_WRITTEN_EVENT => 'dateWriteOnOrderSubmit',
];
}
public function dateWriteOnOrderSubmit(EntityWrittenEvent $event)
{
if ($event->getWriteResults()[0]->getOperation() === 'insert') {
$deliveryDate = $this->request->getCurrentRequest()->request->get('deliveryDate');
$configId = $this->request->getCurrentRequest()->request->get('config_id');
if ($deliveryDate && $configId) {
$writtenOrderId = $event->getWriteResults()[0]->getPayload()['id'];
$this->orderRepository->update([
[
'id' => $writtenOrderId,
'customFields' => [
'orderDeliveryDate' => $deliveryDate,
'config_id' => $configId,
],
]
], Context::createDefaultContext());
}elseif($configId){
$writtenOrderId = $event->getWriteResults()[0]->getPayload()['id'];
$this->orderRepository->update([
[
'id' => $writtenOrderId,
'customFields' => [
'config_id' => $configId,
],
]
], Context::createDefaultContext());
}elseif($deliveryDate){
$writtenOrderId = $event->getWriteResults()[0]->getPayload()['id'];
$this->orderRepository->update([
[
'id' => $writtenOrderId,
'customFields' => [
'orderDeliveryDate' => $deliveryDate,
],
]
], Context::createDefaultContext());
}
}
}
}