<?php
namespace App\EventSubscriber;
use App\Entity\OrderItem;
use App\Event\PaymentSuccessEvent;
use App\Service\Manager\OrderManager;
use App\Service\Manager\SiteManager;
use App\Service\Site\SiteValidDateResolver;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PaymentSuccessSubscriber implements EventSubscriberInterface
{
private $siteManager;
private $validDateResolver;
private $orderManager;
public function __construct(
SiteManager $siteManager,
SiteValidDateResolver $validDateResolver,
OrderManager $orderManager
) {
$this->siteManager = $siteManager;
$this->validDateResolver = $validDateResolver;
$this->orderManager = $orderManager;
}
public static function getSubscribedEvents()
{
return [
PaymentSuccessEvent::class => [
['onPaymentSuccessUpdateSite', 1],
['onPaymentSuccessOrderComplete', -2],
],
];
}
public function onPaymentSuccessUpdateSite(PaymentSuccessEvent $event)
{
$order = $event->getOrder();
foreach ($order->getItems() as $orderItem) {
/** @var OrderItem $orderItem */
$site = $orderItem->getSite();
$site->setSubscriptionType($orderItem->getSubscriptionType());
$site->setSubscriptionContract($orderItem->getSubscriptionContract());
$site->setPrice($orderItem->getAmount());
$site->setCurrency($order->getCurrency());
$site->setValidTo($this->validDateResolver->getBySiteSubscriptionContract($site));
$this->siteManager->save($site);
}
}
public function onPaymentSuccessOrderComplete(PaymentSuccessEvent $event)
{
$order = $event->getOrder();
$this->orderManager->completed($order);
}
}