<?php
namespace App\V4\EventSubscriber;
use App\DataPersister\AbstractDataPersister;
use App\V4\Builder\CustomerEventServices\CustomerEventServicesBuilder;
use App\V4\Event\PostPersistEvent;
use App\V4\Model\ChildrenAwareInterface;
use App\V4\Model\Quote\Quote;
use App\V4\Service\Quote\QuoteExternalCalculation;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/* @see: https://sfimultimedia.atlassian.net/browse/PV-1203 Dette Technique */
class CustomerEventServiceEventSubscriber extends AbstractSubscriber implements EventSubscriberInterface
{
/**
* @var CustomerEventServicesBuilder
*/
private $customerEventServicesBuilder;
/**
* @var QuoteExternalCalculation
*/
private $quoteExternalCalculation;
public function __construct(
CustomerEventServicesBuilder $customerEventServicesBuilder,
QuoteExternalCalculation $quoteExternalCalculation
) {
$this->customerEventServicesBuilder = $customerEventServicesBuilder;
$this->quoteExternalCalculation = $quoteExternalCalculation;
}
public static function getSubscribedEvents(): array
{
return [
PostPersistEvent::NAME => 'onPostPersist',
];
}
public function supports($entity): bool
{
return $entity instanceof ChildrenAwareInterface
&& method_exists($entity, 'getId')
&& null !== $entity->getId()
&& $this->customerEventServicesBuilder->hasCustomerEventServices()
;
}
public function onPostPersist(PostPersistEvent $event): void
{
/** @var Quote $objPersisted */
$objPersisted = $event->getAfter();
$context = $event->getContext();
if (!$this->supports($objPersisted) || $this->isIdAlreadyManaged($objPersisted->getId(), get_class($this))) {
return;
}
if (empty($context[AbstractDataPersister::CONTEXT_ORIGIN]) || QuoteExternalCalculation::class !== $context[AbstractDataPersister::CONTEXT_ORIGIN]) {
$this->quoteExternalCalculation->process($objPersisted);
}
}
}