src/EventSubscriber/ManufacturerSubscriber.php line 153

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Event;
  4. use App\Event\ManufacturerPubUpdateEvent;
  5. use App\Event\ManufacturerRegisterEvent;
  6. use App\Event\ManufacturerSendInquiryLinkEvent;
  7. use App\Repository\SubscriptionRepository;
  8. use App\Repository\UserRepository;
  9. use App\Service\Log\QuotationLogService;
  10. use App\Service\RabbitMQ\RabbitMQDispatcher;
  11. use App\Service\Subscription\SubscriptionService;
  12. use App\Service\UserLog;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  15. use Symfony\Component\Security\Core\Security;
  16. class ManufacturerSubscriber implements EventSubscriberInterface
  17. {
  18.     protected $security;
  19.     protected $userRepo;
  20.     protected $urlGenerator;
  21.     protected $subscriptionRepo;
  22.     protected $subscriptionService;
  23.     protected $rabbitMQDispatcher;
  24.     /**
  25.      * @var UserLog
  26.      */
  27.     private $userLog;
  28.     /**
  29.      * @var QuotationLogService
  30.      */
  31.     private $logService;
  32.     public function __construct(
  33.         Security               $security,
  34.         UserRepository         $userRepo,
  35.         UrlGeneratorInterface  $urlGenerator,
  36.         UserLog                $userLog,
  37.         QuotationLogService    $logService,
  38.         SubscriptionRepository $subscriptionRepo,
  39.         SubscriptionService    $subscriptionService,
  40.         RabbitMQDispatcher     $rabbitMQDispatcher
  41.     )
  42.     {
  43.         $this->rabbitMQDispatcher $rabbitMQDispatcher;
  44.         $this->subscriptionRepo $subscriptionRepo;
  45.         $this->subscriptionService $subscriptionService;
  46.         $this->security $security;
  47.         $this->userRepo $userRepo;
  48.         $this->urlGenerator $urlGenerator;
  49.         $this->userLog $userLog;
  50.         $this->logService $logService;
  51.     }
  52.     public static function getSubscribedEvents(): array
  53.     {
  54.         return [
  55.             ManufacturerSendInquiryLinkEvent::NAME => 'sendLinkNotification',
  56.             ManufacturerPubUpdateEvent::NAME => 'sendPublicUpdateNotification',
  57.             ManufacturerRegisterEvent::NAME => 'createSubscriptions',
  58.         ];
  59.     }
  60.     public function sendLinkNotification(ManufacturerSendInquiryLinkEvent $event)
  61.     {
  62.         $eventData $event->getAdditionalData();
  63.         $manager $this->security->getUser();
  64.         $manufacturer $event->getManufacturer();
  65.         $inquiry $event->getPriceInquiry();
  66.         $date_deadline null;
  67.         if ($inquiry->getDateDeadline() instanceof \DateTimeInterface) {
  68.             $date_deadline $inquiry->getDateDeadline()->format('d.m.Y');
  69.         }
  70.         $email_data['inquiry_number'] = '#' $inquiry->getFullInquiryNumber();
  71.         $email_data['date_deadline'] = $date_deadline;
  72.         $email_data['comment'] = $eventData['comment'];
  73.         $email_data['link'] = $eventData['link'];
  74.         $email_data['manager_name'] = $manager->getName();
  75.         $email_data['manager_email'] = $manager->getEmail();
  76.         $email_data['manager_phone'] = $manager->getPhone();
  77.         $bcc $manager->getEmail();
  78.         $this->rabbitMQDispatcher->dispatch([
  79.             'data' => [
  80.                 'uuid' => $manufacturer->getUuid(),
  81.                 'manager_id' => $manager->getId(),
  82.                 'inquiry_status' => $inquiry->getStatus(),
  83.                 'email_data' => $email_data,
  84.                 'bcc' => $bcc,
  85.             ],
  86.             'action_name' => 'manufacturerSendLinkNotification',
  87.             'consumer_name' => 'notification_consumer'
  88.         ]);
  89. //        $this->subscriptionService->proceedEvent(
  90. //            Event::MANUFACTURER_SEND_LINK,
  91. //            $manufacturer,
  92. //            [
  93. //                'data' => [
  94. //                    'uuid' => $manufacturer->getUuid(),
  95. //                    'manager_id' => $manager->getId(),
  96. //                    'email_data' => $email_data,
  97. //                    'bcc' => $bcc,
  98. //                ],
  99. //                'action_name' => 'manufacturerSendLinkNotification'
  100. //            ]);
  101.         $this->userLog->log(get_class(), 'inquiry.sent_offer_link'$inquiry->getId(), json_encode([
  102.             'targetEmail' => $manufacturer->getEmail()
  103.         ]));
  104.         $this->logService->logAction(
  105.             $inquiry->getQuotation(),
  106.             'log.inquiry.sent_offer_link',
  107.             $inquiry->getInquiryNumber(),
  108.             $manager
  109.         );
  110.     }
  111.     public function sendPublicUpdateNotification(ManufacturerPubUpdateEvent $event)
  112.     {
  113.         $manufacturer $event->getManufacturer();
  114.         $link $this->urlGenerator->generate('manufacturers.open', ['uuid' => $manufacturer->getUuid()], UrlGeneratorInterface::ABSOLUTE_URL);
  115.         $email_data $event->getAdditionalData();
  116.         $email_data['link'] = $link;
  117.         $email_data['manufacturer_code'] = $manufacturer->getCode();
  118.         $email_data['manufacturer_name'] = $manufacturer->getName();
  119.         $this->subscriptionService->proceedEvent(
  120.             Event::MANUFACTURER_PUB_UPDATE,
  121.             $manufacturer,
  122.             [
  123.                 'data' => [
  124.                     'email_data' => $email_data,
  125.                 ],
  126.                 'action_name' => 'manufacturerSendPublicUpdateNotification',
  127.             ]);
  128.     }
  129.     public function createSubscriptions(ManufacturerRegisterEvent $event)
  130.     {
  131.         $this->subscriptionService->generateSubscriptions($event->getManufacturer());
  132.     }
  133. }