<?php
namespace CioSalesRepresentative\Subscriber;
use CioMasterdata\Definition\Masterdata\MasterdataEntity;
use CioMasterdata\Service\MasterdataService;
use CioOrderConfirmation\Event\AuthorizedReleaserBeforeSendMailEvent;
use CioSalesRepresentative\DataResolver\SalesrepDataResolver;
use CioSalesRepresentative\Definition\SalesRepresentative\SalesRepresentativeEntity;
use Shopware\Core\Checkout\Customer\CustomerEntity;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearchResult;
use Shopware\Storefront\Event\StorefrontRenderEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Session\Session;
class OrderCreateSubscriber implements EventSubscriberInterface
{
private EntityRepositoryInterface $salesRepRepository;
private Session $session;
private MasterdataService $masterdataService;
public function __construct(EntityRepositoryInterface $salesRepRepository, Session $session, MasterdataService $masterdataService)
{
$this->salesRepRepository = $salesRepRepository;
$this->session = $session;
$this->masterdataService = $masterdataService;
}
public static function getSubscribedEvents(): array
{
return [
AuthorizedReleaserBeforeSendMailEvent::class => 'onAuthorizedReleaserBeforeSendMailEvent',
StorefrontRenderEvent::class => 'onStorefrontRenderEvent'
];
}
public function onAuthorizedReleaserBeforeSendMailEvent(AuthorizedReleaserBeforeSendMailEvent $event)
{
$order = $event->getOrder();
$customer = $event->getCustomer();
$salesRepId = null;
$masterdatas = $this->masterdataService->getMasterdatasForCustomer($customer);
/** @var MasterdataEntity|null $masterdata */
if ($masterdatas instanceof EntitySearchResult && ($masterdata = $masterdatas->first()) instanceof MasterdataEntity) {
$salesRepId = $masterdata->getVPartnerId();
}
if(!is_null($salesRepId)){
/** @var SalesRepresentativeEntity $salesRepResult */
$salesRepResult = $this->salesRepRepository->search(new Criteria([$salesRepId]), Context::createDefaultContext())->first();
$event->setAuthorizedReleaserEmail($salesRepResult->getEmail());
}
}
public function onStorefrontRenderEvent(StorefrontRenderEvent $event)
{
if ($event->getSalesChannelContext()->getCustomer() instanceof CustomerEntity && $this->session->has('cio_master_login') && $this->session->get('cio_master_login') != $event->getSalesChannelContext()->getCustomer()->getId()) {
$event->setParameter('cio_master_login_show_bar', true);
} else {
$event->setParameter('cio_master_login_show_bar', false);
}
}
}