src/EventSubscriber/SubscriberChangedSubscriber.php line 43

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\EventSubscriber;
  4. use App\Enum\ActivityLogCategoryEnum;
  5. use App\Enum\OrganizationStatusEnum;
  6. use App\Events\SubscriptionChangedEvent;
  7. use App\Service\SubscriptionUtils;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Evo\Infrastructure\MappingORM\ActivityLog;
  10. use Evo\Infrastructure\MappingORM\User;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. class SubscriberChangedSubscriber implements EventSubscriberInterface
  13. {
  14.     public const EXCEPTED_STATUS = [
  15.         OrganizationStatusEnum::NEW,
  16.         OrganizationStatusEnum::DELETED,
  17.         OrganizationStatusEnum::CANCELLED,
  18.         OrganizationStatusEnum::LOST,
  19.     ];
  20.     private EntityManagerInterface $em;
  21.     private SubscriptionUtils $subscriptionUtils;
  22.     public function __construct(
  23.         EntityManagerInterface $em,
  24.         SubscriptionUtils $subscriptionUtils
  25.     ) {
  26.         $this->em $em;
  27.         $this->subscriptionUtils $subscriptionUtils;
  28.     }
  29.     public static function getSubscribedEvents(): array
  30.     {
  31.         return [
  32.             SubscriptionChangedEvent::NAME => 'onSubscriberChanged',
  33.         ];
  34.     }
  35.     public function onSubscriberChanged(SubscriptionChangedEvent $changedEvent): void
  36.     {
  37.         if (!$changedEvent->getOrganization()->getStatus() ||
  38.             \in_array($changedEvent->getOrganization()->getStatus(), self::EXCEPTED_STATUStrue)) {
  39.             return;
  40.         }
  41.         $entity $changedEvent->getSubscription();
  42.         $user $changedEvent->getUser();
  43.         $organization $changedEvent->getOrganization();
  44.         $agent $changedEvent->getAgent();
  45.         $emailAgent $agent instanceof User $agent->getEmail() : 'N/A';
  46.         $changeSet $changedEvent->getChangeSet();
  47.         $object $changedEvent->getObject();
  48.         $category = ('UPSELL' === $object) ? ActivityLogCategoryEnum::UPSELL ActivityLogCategoryEnum::DOWNSELL;
  49.         $activityLog = new ActivityLog();
  50.         $activityLog->setOrganization($entity->getOrganization());
  51.         $user instanceof User $activityLog->setUser($user) : $activityLog->setUser(null);
  52.         $activityLog->setObject($object);
  53.         $activityLog->setNote('-');
  54.         $activityLog->setMethod('CREATION');
  55.         $activityLog->setCategory($category);
  56.         $activityLog->setChangeSet([
  57.             'Ancien pack' => [$entity->getPreviousPack() => $this->subscriptionUtils->getSubscriptionPackInfo($entity)['packName']],
  58.             'Raison de changement' => ['-' => $organization->getReasonChange() ?: 'N/A'],
  59.             'Prix' => [null !== $entity->getStoredTotalPriceWithoutTax() ? $entity->getStoredTotalPriceWithoutTax().' €' '' => $entity->getTotalPriceWithoutTax() ? $entity->getTotalPriceWithoutTax().' €' '-'],
  60.             'Agent' => ['-' => $emailAgent],
  61.         ]);
  62.         $entity->setStoredTotalPriceWithoutTax($entity->getTotalPriceWithoutTax());
  63.         $this->em->persist($entity);
  64.         $this->em->persist($activityLog);
  65.         $this->em->flush();
  66.     }
  67. }