<?php
namespace K3nExtendVioRepresentativeLogin\Subscriber;
use Shopware\Core\Checkout\Cart\Event\CheckoutOrderPlacedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\Session;
use VioRepresentativeLogin\Core\Services\AgentService;
use VioRepresentativeLogin\Core\System\SalesChannel\Context\SalesChannelContextFactory;
use VioRepresentativeLogin\Entity\Agent\AgentEntity;
class OrderPlacedSubscriber implements EventSubscriberInterface
{
private RequestStack $requestStack;
private Session $session;
private SalesChannelContextFactory $salesChannelContextFactory;
private AgentService $agentService;
public function __construct(
RequestStack $requestStack,
Session $session,
SalesChannelContextFactory $salesChannelContextFactory,
AgentService $agentService
) {
$this->requestStack = $requestStack;
$this->session = $session;
$this->salesChannelContextFactory = $salesChannelContextFactory;
$this->agentService = $agentService;
}
public static function getSubscribedEvents(): array
{
return [
CheckoutOrderPlacedEvent::class => 'onOrderPlaced'
];
}
public function onOrderPlaced(CheckoutOrderPlacedEvent $event): void
{
$merchantInput = $this->requestStack->getCurrentRequest()->request->get('merchantInput');
$swContextToken = $this->session->get('sw-context-token');
if(!$swContextToken) {
$swContextToken = $this->requestStack->getCurrentRequest()->headers->get('sw-context-token');
}
$salesChannelId = $this->session->get('sw-sales-channel-id');
if(!$salesChannelId) {
$salesChannelId = $event->getOrder()->getSalesChannelId();
}
$salesChannelContext = $this->salesChannelContextFactory->create($swContextToken, $salesChannelId);
try {
$agent = $this->agentService->getAgentByContext($salesChannelContext);
} catch (\Throwable $th) {
$agent = false;
}
if ($agent instanceof AgentEntity) {
$mailRecipients = $event->getMailStruct()->getRecipients();
$mailRecipients[$agent->getEmail()] = $agent->getFirstName() . ' ' . $agent->getLastName();
$event->getMailStruct()->setRecipients($mailRecipients);
}
if ($merchantInput) {
$merchantInputData = explode(",", $merchantInput);
$firstName = ltrim($merchantInputData[0]);
$lastName = ltrim($merchantInputData[1]);
$email = ltrim($merchantInputData[2]);
$mailRecipients = $event->getMailStruct()->getRecipients();
$mailRecipients[$email] = $firstName . ' ' . $lastName;
$event->getMailStruct()->setRecipients($mailRecipients);
}
}
}