src/PortoContainers/IMP/EventSubscriber/ShippingCourierSettingsSubscriber.php line 40

  1. <?php
  2. namespace App\PortoContainers\IMP\EventSubscriber;
  3. use App\Entity\Shipping\ShippingCourier;
  4. use App\Event\ShippingCourierSettingsPersistedEvent;
  5. use App\PortoContainers\IMP\Actions\SyncClientsOfficesAction;
  6. use App\PortoContainers\IMP\Entities\CourierImpClientOffice;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. class ShippingCourierSettingsSubscriber implements EventSubscriberInterface
  10. {
  11.     /**
  12.      * @param SyncClientsOfficesAction $syncClientsOfficesAction
  13.      * @param EntityManagerInterface $em
  14.      */
  15.     public function __construct(
  16.         private readonly SyncClientsOfficesAction $syncClientsOfficesAction,
  17.         private readonly EntityManagerInterface   $em
  18.     )
  19.     {
  20.     }
  21.     /**
  22.      * @return array
  23.      */
  24.     public static function getSubscribedEvents(): array
  25.     {
  26.         return [
  27.             ShippingCourierSettingsPersistedEvent::class => ['shippingCourierSettingsPersistAction'101],
  28.         ];
  29.     }
  30.     /**
  31.      * @param ShippingCourierSettingsPersistedEvent $event
  32.      * @return void
  33.      * @throws \Exception
  34.      */
  35.     public function shippingCourierSettingsPersistAction(ShippingCourierSettingsPersistedEvent $event): void
  36.     {
  37.         $entity $event->getEntity();
  38.         if ($entity->getCourier()->getType() !== ShippingCourier::COURIER_TYPE_IMP) {
  39.             return;
  40.         }
  41.         if (!$entity->getLogin() || !$entity->getPassword()) {
  42.             return;
  43.         }
  44.         if ($this->em->getRepository(CourierImpClientOffice::class)->findOneBy(['shop' => $entity->getShop()])) {
  45.             return;
  46.         }
  47.         $this->syncClientsOfficesAction->run(
  48.             shippingCourierSettings$entity
  49.         );
  50.     }
  51. }