<?php
declare(strict_types=1);
namespace VioB2BLogin\Storefront\Subscriber;
use Exception;
use Shopware\Core\Checkout\Customer\Aggregate\CustomerAddress\CustomerAddressEntity;
use Shopware\Storefront\Page\Address\Listing\AddressListingCriteriaEvent;
use Shopware\Storefront\Page\Address\Listing\AddressListingPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use VioB2BLogin\Core\Services\EmployeeService;
use VioB2BLogin\Entity\Employee\EmployeeEntity;
use VioB2BLogin\Entity\EmployeeAddress\EmployeeAddressEntity;
class AddressSubscriber implements EventSubscriberInterface
{
private EmployeeService $employeeService;
public function __construct(EmployeeService $employeeService)
{
$this->employeeService = $employeeService;
}
public static function getSubscribedEvents(): array
{
return [
AddressListingCriteriaEvent::class => 'onAddressCriteria',
AddressListingPageLoadedEvent::class => 'onPageLoaded'
];
}
public function onAddressCriteria(AddressListingCriteriaEvent $event): void
{
try {
$employee = $this->employeeService->getEmployeeByContext($event->getSalesChannelContext());
if ($employee instanceof EmployeeEntity && $employee->getAddresses() && $employee->getAddresses()->count() > 0) {
$ids = $employee->getAddresses()->getIds();
$event->getCriteria()->setIds($ids);
}
} catch (Exception $ex) {
}
}
public function onPageLoaded(AddressListingPageLoadedEvent $event): void
{
try {
$employee = $this->employeeService->getEmployeeByContext($event->getSalesChannelContext());
if ($employee instanceof EmployeeEntity && $employee->getAddresses() && $employee->getAddresses()->count() > 0) {
foreach ($event->getPage()->getAddresses() as $address) {
$employeeAddress = $employee->getAddresses()->get($address->getId());
if ($employeeAddress instanceof CustomerAddressEntity) {
$relation = $employeeAddress->getExtensionOfType('relationData', EmployeeAddressEntity::class);
if ($relation instanceof EmployeeAddressEntity) {
$address->addExtension('relationData', $relation);
}
}
}
}
} catch (Exception $ex) {
}
}
}