<?php
declare(strict_types=1);
namespace App\Module\Checkout\Integration\Subscriber;
use App\Module\Account\Entity\User;
use App\Module\Cart\Business\Facade\CartPriceFacadeInterface;
use App\Module\Cart\Helper\SapRequestHelper;
use App\Module\MiddlewareConnector\Business\Facade\SapFacadeInterface;
use App\Module\ShortSimpleCheckout\Event\Cart\CartCreateOrderEvent;
use App\Module\ShortSimpleCheckout\Events;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
/**
* @package App\Module\Checkout\Integration\Subscriber
*/
class AddSapPricesToOrderSubscriber implements EventSubscriberInterface
{
private ?User $user;
private CartPriceFacadeInterface $cartPriceFacade;
/**
* @param User|null $user
* @param CartPriceFacadeInterface $cartPriceFacade
*/
public function __construct(
?User $user,
SapFacadeInterface $sapFacade,
CartPriceFacadeInterface $cartPriceFacade
) {
$this->user = $user;
$this->cartPriceFacade = $cartPriceFacade;
}
/**
* @return array
*/
public static function getSubscribedEvents(): array
{
return [Events::CART_CREATE_ORDER => 'onCreateOrder'];
}
/**
* @param CartCreateOrderEvent $event
*
* @return CartCreateOrderEvent
*/
public function onCreateOrder(CartCreateOrderEvent $event): CartCreateOrderEvent
{
$customerNumber = SapRequestHelper::getCorrectCustomerNumber($this->user, $event->getCart());
$cart = $this->cartPriceFacade->modifyCartWithSapPrices($event->getCart(), $customerNumber);
return $event->setCart($cart); // @phpstan-ignore-line
}
}