src/Api/EventListener/DataHubFOSListener.php line 154

Open in your IDE?
  1. <?php
  2. namespace App\Api\EventListener;
  3. use App\Api\DataHub\CustomerPortalApiClient;
  4. use App\Entity\PrivateUser;
  5. use App\Entity\ProUser;
  6. use App\Event\UserEvents;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use FOS\UserBundle\Event\FilterUserResponseEvent;
  9. use FOS\UserBundle\Event\UserEvent;
  10. use FOS\UserBundle\FOSUserEvents;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. class DataHubFOSListener implements EventSubscriberInterface
  13. {
  14.     public function __construct(
  15.         private readonly CustomerPortalApiClient $cpaClient,
  16.         private readonly EntityManagerInterface $entityManager
  17.     ) {
  18.     }
  19.     public static function getSubscribedEvents(): array
  20.     {
  21.         return [
  22.             FOSUserEvents::REGISTRATION_COMPLETED => 'onUserRegistrationComplete',
  23.             FOSUserEvents::REGISTRATION_CONFIRMED => 'onUserRegistrationConfirmed',
  24.             UserEvents::EDIT_COMPLETED => 'onUserProfileEditComplete',
  25.             UserEvents::CONVERT_SOCIETY => 'onUserConversionSociety',
  26.             UserEvents::UPDATE_USER_BY_SALESFORCE => 'onUserUpdateBySalesforce',
  27.             UserEvents::ID_SEND_USER_BY_SALESFORCE => 'onUserSendIdBySalesforce',
  28.             UserEvents::ID_SEND_USER_BY_SALESFORCE_AFTER_BUS => 'onUserChangeIdSalesforceByOther',
  29.             UserEvents::UPDATE_ID_SALESFORCE => 'onUserChangeIdSalesforceByOther',
  30.         ];
  31.     }
  32.     /**
  33.      * FOSUser Event REGISTRATION_COMPLETED handling method.
  34.      *
  35.      * @param FilterUserResponseEvent $evt - The event
  36.      */
  37.     public function onUserRegistrationComplete(FilterUserResponseEvent $evt): bool
  38.     {
  39.         $user $evt->getUser();
  40.         if ($user instanceof PrivateUser) {
  41.             return false;
  42.         }
  43.         $result $this->cpaClient->findCompanyOrCreate($user);
  44.         if (isset($result['id'])) {
  45.             $this->cpaClient->updateContact($user$result['id'], true);
  46.             $this->cpaClient->uploadCompanyKbis($result['id']);
  47.             if (null !== $user->getAdditionalFile()) {
  48.                 $this->cpaClient->uploadCompanyDocument($result['id']);
  49.             }
  50.             $this->cpaClient->uploadContactDocument($user);
  51.             $user->setCompanyId($result['id']);
  52.             $this->entityManager->flush();
  53.         }
  54.         return true;
  55.     }
  56.     /**
  57.      * FOSUser Event REGISTRATION_CONFIRMED handling method.
  58.      *
  59.      * @param FilterUserResponseEvent $evt - The event
  60.      */
  61.     public function onUserRegistrationConfirmed(FilterUserResponseEvent $evt): bool
  62.     {
  63.         $user $evt->getUser();
  64.         if ($user instanceof PrivateUser) {
  65.             $result $this->cpaClient->createCustomer($user);
  66.             $user->setCustomerId($result['id']);
  67.             $user->setAdId($result['principalContact']);
  68.             $this->entityManager->flush();
  69.             $this->cpaClient->updateCustomerStatus($user->getCustomerId());
  70.             return true;
  71.         }
  72.         return false;
  73.     }
  74.     /**
  75.      * Custom event EDIT_COMPLETED handling method.
  76.      *
  77.      * @param UserEvent $evt - The event
  78.      */
  79.     public function onUserProfileEditComplete(UserEvent $evt): bool
  80.     {
  81.         $user $evt->getUser();
  82.         if (null === $user->getAdId()) {
  83.             return false;
  84.         }
  85.         if ($user instanceof PrivateUser) {
  86.             $this->cpaClient->updateCustomer($user);
  87.             return true;
  88.         }
  89.         $companyId $this->getCompanyId($user);
  90.         if (null === $companyId) {
  91.             return false;
  92.         }
  93.         $this->cpaClient->updateContact($user$companyId);
  94.         return true;
  95.     }
  96.     /**
  97.      * Custom event CONVERT_SOCIETY handling method.
  98.      *
  99.      * @param UserEvent $evt - The event
  100.      */
  101.     public function onUserConversionSociety(UserEvent $evt): bool
  102.     {
  103.         /* @var PrivateUser $user */
  104.         $user $evt->getUser();
  105.         if (!$user instanceof PrivateUser && $user->isSociety()) {
  106.             return false;
  107.         }
  108.         $this->cpaClient->deleteContact($user->getAdId());
  109.         $connection $this->entityManager->getConnection();
  110.         $companyId $connection->executeQuery('SELECT companyId FROM user WHERE id = :id', ['id' => $user->getId()])->fetchOne();
  111.         if (!empty($companyId)) {
  112.             $datas $this->cpaClient->getContactsByFilter(['$filter' => "assignedEntityId eq '".$companyId."'"]);
  113.             if (== $datas['count']) {
  114.                 $this->cpaClient->deleteCompany($companyId);
  115.             }
  116.         }
  117.         $connection->executeStatement('UPDATE user SET companyId = NULL, adId = NULL WHERE id = :id', ['id' => $user->getId()]);
  118.         return true;
  119.     }
  120.     /**
  121.      * Custom event UPDATE_USER_BY_SALESFORCE handling method.
  122.      *
  123.      * @param UserEvent $evt - The event
  124.      */
  125.     public function onUserUpdateBySalesforce(UserEvent $evt): bool
  126.     {
  127.         $user $evt->getUser();
  128.         if (!$user instanceof ProUser) {
  129.             return false;
  130.         }
  131.         $companyId $this->getCompanyId($user);
  132.         if (null === $companyId) {
  133.             return false;
  134.         }
  135.         $this->cpaClient->updateCompany($user$companyId);
  136.         $this->cpaClient->updateContact($user$companyId);
  137.         return true;
  138.     }
  139.     /**
  140.      * Custom event ID_SEND_USER_BY_SALESFORCE handling method.
  141.      *
  142.      * @param UserEvent $evt - The event
  143.      */
  144.     public function onUserSendIdBySalesforce(UserEvent $evt): bool
  145.     {
  146.         $user $evt->getUser();
  147.         if (!$user instanceof ProUser) {
  148.             return false;
  149.         }
  150.         $companyId $this->getCompanyId($user);
  151.         if (null === $companyId) {
  152.             return false;
  153.         }
  154.         $this->cpaClient->updateCompany($user$companyId);
  155.         $this->cpaClient->updateCompanyStatus($companyId);
  156.         $this->cpaClient->updateContactStatus($user->getAdId());
  157.         return true;
  158.     }
  159.     /**
  160.      * Custom event ID_SEND_USER_BY_SALESFORCE_AFTER_BUS handling method.
  161.      * Custom event UPDATE_ID_SALESFORCE handling method.
  162.      *
  163.      * @param UserEvent $evt - The event
  164.      */
  165.     public function onUserChangeIdSalesforceByOther(UserEvent $evt): bool
  166.     {
  167.         $user $evt->getUser();
  168.         if (!$user instanceof ProUser) {
  169.             return false;
  170.         }
  171.         $companyId $this->getCompanyId($user);
  172.         if (null === $companyId) {
  173.             return false;
  174.         }
  175.         $this->cpaClient->updateCompany($user$companyId);
  176.         return true;
  177.     }
  178.     private function getCompanyId(ProUser $user)
  179.     {
  180.         return $this->cpaClient->searchCompany($user);
  181.     }
  182. }