<?php declare(strict_types=1);
namespace Ew\GrecoAdministration\Subscriber;
use Shopware\Core\Checkout\Cart\Event\CheckoutOrderPlacedEvent;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
class OrderSubscriber implements EventSubscriberInterface
{
private EntityRepository $orderRepository;
private RequestStack $requestStack;
public function __construct(
EntityRepository $orderRepository,
RequestStack $requestStack
)
{
$this->orderRepository = $orderRepository;
$this->requestStack = $requestStack;
}
public static function getSubscribedEvents(): array
{
return [
CheckoutOrderPlacedEvent::class => 'onOrderPlaced'
];
}
public function onOrderPlaced(CheckoutOrderPlacedEvent $event): void
{
try {
$session = $this->requestStack->getSession();
$dcCode = $session->get('dc-code', null);
$customer = $event->getOrder()->getOrderCustomer();
if ($customer) {
if ($customer->getCustomer()->dcCode) {
$dcCode = $customer->getCustomer()->dcCode;
}
}
$this->orderRepository->update(
[['id' => $event->getOrderId(), 'customFields' => ['dc_code' => $dcCode]]], $event->getContext()
);
} catch (\Exception $exception) {
error_log(print_r(array('Order subscriber error: ', $exception->getMessage()), true) . "\n", 3, '../error.log');
}
}
}