<?php
namespace CioPromotionalOfficeApi\Subscriber;
use CioPromotionalOfficeApi\CioPromotionalOfficeApi;
use Shopware\Core\Checkout\Cart\Event\CheckoutOrderPlacedEvent;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class OrderSubscriber implements EventSubscriberInterface
{
private ContainerInterface $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public static function getSubscribedEvents(): array
{
return [
CheckoutOrderPlacedEvent::class => 'onCheckoutOrderPlaced'
];
}
public function onCheckoutOrderPlaced(CheckoutOrderPlacedEvent $event)
{
$order = $event->getOrder();
$customerCustomFields = $order->getOrderCustomer()->getCustomer()->getCustomFields();
$customerGroupCustomFields = $this->container->get('customer_group.repository')->search(new Criteria([$order->getOrderCustomer()->getCustomer()->getGroupId()]), $event->getContext())->first()->getCustomFields();
$orderCustomFields = $order->getCustomFields();
if (isset($customerCustomFields[CioPromotionalOfficeApi::FIELDNAME_CUSTOMER_DEBITOR])) {
$orderCustomFields[CioPromotionalOfficeApi::FIELDNAME_ORDER_DEBITOR] = $customerCustomFields[CioPromotionalOfficeApi::FIELDNAME_CUSTOMER_DEBITOR];
} else if (isset($customerGroupCustomFields[CioPromotionalOfficeApi::FIELDNAME_CUSTOMER_GROUP_DEBITOR])) {
$orderCustomFields[CioPromotionalOfficeApi::FIELDNAME_ORDER_DEBITOR] = $customerGroupCustomFields[CioPromotionalOfficeApi::FIELDNAME_CUSTOMER_GROUP_DEBITOR];
} else {
$orderCustomFields[CioPromotionalOfficeApi::FIELDNAME_ORDER_DEBITOR] = $this->container->get('Shopware\Core\System\SystemConfig\SystemConfigService')->get('CioPromotionalOfficeApi.config.defaultDebitorNumber', $event->getSalesChannelId());;
}
$this->container->get('order.repository')->update([
[
'id' => $order->getId(),
'customFields' => $orderCustomFields
]
], $event->getContext());
}
}