<?php
namespace App\EventListener;
use App\Service\MailerService;
use ApiPlatform\Core\EventListener\EventPriorities;
use App\Entity\PreOrder;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use App\Service\TelegramApi;
use App\Service\TelegramSendByPhone;
class PreOrderCreatedListener implements EventSubscriberInterface
{
private $mailerService;
private $telegram;
private $telegram_send_by_phone;
private EntityManagerInterface $entityManager;
public function __construct(MailerService $mailerService, EntityManagerInterface $entityManager, TelegramApi $telegram, TelegramSendByPhone $telegram_send_by_phone)
{
$this->mailerService = $mailerService;
$this->entityManager = $entityManager;
$this->telegram = $telegram;
$this->telegram_send_by_phone = $telegram_send_by_phone;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::VIEW => ['sendPreOrderEmail', EventPriorities::POST_WRITE],
];
}
public function sendPreOrderEmail(ViewEvent $event)
{
$pre_order = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!$pre_order instanceof PreOrder || Request::METHOD_POST !== $method) {
return;
}
$phoneTelegram = false;
$newPreOrder = $this->entityManager->getRepository(PreOrder::class)->find($pre_order->getId());
if($newPreOrder->getManager() == null){
if($newPreOrder->getAccount()->getManager() == null){
$content = "Нове замовлення на сайті в якому не вказаний менеджер! <a href='https://admin-cabinet.kramar-shop.com/pre-orders/update/{$newPreOrder->getId()}'>Перейти</a>";
$this->telegram->sendMessage($content);
}else{
$newPreOrder->setManager( $newPreOrder->getAccount()->getManager() );
$phoneTelegram = $newPreOrder->getAccount()->getManager()->getPhone();
}
}else{
$phoneTelegram = $newPreOrder->getManager()->getPhone();
}
$this->entityManager->persist($newPreOrder);
$this->entityManager->flush();
if($phoneTelegram){
$content = "Нове замовлення від " .$newPreOrder->getClient()->getFirstName() . " " . $newPreOrder->getClient()->getLastName() . " https://admin-cabinet.kramar-shop.com/pre-orders/update/{$newPreOrder->getId()}";
if(!empty($phoneTelegram))
$this->telegram_send_by_phone->send($newPreOrder->getManager()->getPhone(), $content);
}
$userEmail = $newPreOrder->getClient()->getEmail(); // Отримати email з вашого об'єкта користувача
$subject = 'KRAMAR LTD замовлення #' . $pre_order->getId();
$body = 'Вітаємо, замовлення успішно оформлено. Чекайте відповідь менеджера!';
if(!empty($userEmail))
$this->mailerService->sendRegistrationEmail($userEmail, $subject, $body);
}
}