<?php
declare(strict_types=1);
namespace BitBag\OpenMarketplace\Component\RFQ\EventListener;
use BitBag\OpenMarketplace\Component\Customer\Model\CustomerInterface;
use BitBag\OpenMarketplace\Component\RFQ\Email\RFQEmailManagerInterface;
use BitBag\OpenMarketplace\Component\RFQ\Repository\RFQRepositoryInterface;
use BitBag\OpenMarketplace\Component\RFQ\StateMachine\RFQTransitions;
use Doctrine\ORM\EntityManagerInterface;
use SM\Factory\FactoryInterface;
use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
final class FinishRfqRegistrationListener
{
public function __construct(
private FactoryInterface $rfqSMFactory,
private RFQRepositoryInterface $rfqRepository,
private EntityManagerInterface $em,
private RFQEmailManagerInterface $rfqEmailManager,
) {
}
public function __invoke(ResourceControllerEvent $event): void
{
$customer = $event->getSubject();
if (!$customer instanceof CustomerInterface) {
return;
}
foreach ($this->rfqRepository->findNewByCustomer($customer) as $rfq) {
$rfqSM = $this->rfqSMFactory->get($rfq, RFQTransitions::GRAPH);
$rfqSM->apply(RFQTransitions::TRANSITION_OPEN);
$this->em->persist($rfq);
$this->rfqEmailManager->sendRfqOpenEmail($rfq);
}
$this->em->flush();
}
}