<?php
declare(strict_types=1);
namespace BitBag\OpenMarketplace\Component\RFQ\EventListener;
use BitBag\OpenMarketplace\Component\Organization\Entity\OrganizationInterface;
use BitBag\OpenMarketplace\Component\RFQ\Email\RFQEmailManagerInterface;
use BitBag\OpenMarketplace\Component\RFQ\Entity\RFQInterface;
use BitBag\OpenMarketplace\Component\RFQ\StateMachine\RFQStates;
use BitBag\OpenMarketplace\Component\RFQ\StateMachine\RFQTransitions;
use SM\Factory\FactoryInterface;
use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
final class RfqCreatedListener
{
public function __construct(
private FactoryInterface $rfqSMFactory,
private RFQEmailManagerInterface $rfqEmailManager,
) {
}
public function __invoke(ResourceControllerEvent $event): void
{
$rfq = $event->getSubject();
if (!$rfq instanceof RFQInterface || RFQStates::STATE_NEW !== $rfq->getState()) {
return;
}
$organization = $rfq->getBuyer();
if (!$organization instanceof OrganizationInterface || !$organization->hasBillingData()) {
return;
}
$rfqSM = $this->rfqSMFactory->get($rfq, RFQTransitions::GRAPH);
$rfqSM->apply(RFQTransitions::TRANSITION_OPEN);
$this->rfqEmailManager->sendRfqOpenEmail($rfq);
}
}