src/EventSubscriber/AdminSubscriber.php line 49

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Mission;
  4. use App\Entity\SystemEmail;
  5. use App\Enum\Role;
  6. use App\Event\Admin\MissionInitialTimeAfterValidationUpdatedEvent;
  7. use App\Event\Admin\MissionNotificationActivatedEvent;
  8. use App\Event\Admin\MissionNotificationSubContractorNotActivatedEvent;
  9. use App\Event\AdminNotifiedMissionParticipantEvent;
  10. use App\Repository\SystemEmailRepository;
  11. use App\Repository\UserRepository;
  12. use App\Service\NotificationService;
  13. use App\Event\AdminNotifiedEvent;
  14. use App\Event\AdminNotifiedSubContractorCompletedEvent;
  15. use App\Event\AdminNotifiedSubContractorNoResponseEvent;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. use App\Enum\AdminMail;
  18. use App\Event\AdminCommandErrorEvent;
  19. use App\Event\SubcontractorActivateOrThereIsABotEvent;
  20. use Symfony\Component\Mime\Address;
  21. use App\Service\DynamicHostService;
  22. class AdminSubscriber implements EventSubscriberInterface
  23. {
  24.     public function __construct(
  25.         private UserRepository $userRepository,
  26.         private SystemEmailRepository $systemEmailRepository,
  27.         private NotificationService $notificationService,
  28.         private DynamicHostService $dynamicHostService
  29.     ){}
  30.     public static function getSubscribedEvents()
  31.     {
  32.         return [
  33.             MissionNotificationActivatedEvent::NAME => 'onMissionNotificationActivated',
  34.             MissionNotificationSubContractorNotActivatedEvent::NAME => 'onMissionNotificationSubContractorNotActivated',
  35.             AdminNotifiedEvent::NAME => 'onAdminNotified',
  36.             AdminNotifiedSubContractorCompletedEvent::NAME => 'onSubContractorProfilComplete',
  37.             AdminNotifiedSubContractorNoResponseEvent::NAME => 'onSubContractorNoResponse48H',
  38.             MissionInitialTimeAfterValidationUpdatedEvent::NAME => 'onMissionInitialTimeAfterValidationUpdated',
  39.             AdminCommandErrorEvent::NAME => 'onCommandPassedError',
  40.             SubcontractorActivateOrThereIsABotEvent::NAME => 'onSubcontractorActivateOrThereIsABot',
  41.             AdminNotifiedMissionParticipantEvent::NAME => 'onAdminNotifiedMissionParticipant'
  42.         ];
  43.     }
  44.     public function onAdminNotifiedMissionParticipant(AdminNotifiedMissionParticipantEvent $event){
  45.             $campaign $event->getCampaign(); 
  46.             $admins $this->dynamicHostService->getMailAdmin();
  47.             $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_MANQUE_PARTICIPANT_POUR_VALIDATION],[],$campaign->getOrderedBy());
  48.             if (null !== $email) {
  49.                 foreach ($admins as $admin) {
  50.                     $this->notificationService->create(email$email,user:  $admin->value,emailUser :  $campaign->getOrderedBy(),emailCompany$campaign->getOrderedBy()->getCompany(),emailStep:nullemailCampaign:$campaign);
  51.                 }
  52.             }
  53.     }
  54.     public function onMissionNotificationActivated(MissionNotificationActivatedEvent $event)
  55.     {
  56.         $mission $event->getMission();
  57.         if (!$mission instanceof Mission) {
  58.             return;
  59.         }
  60.         
  61.         $admins $this->dynamicHostService->getMailAdmin();
  62.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_SOUS_TRAITANT_TOUS_ACTIVER],[],$mission->getCampaign()->getOrderedBy());
  63.         if (null !== $email) {
  64.             foreach ($admins as $admin) {
  65.                 $this->notificationService->create(email$email,user:  $admin->value,emailUser :  $mission->getCampaign()->getOrderedBy(),emailCompany$mission->getCampaign()->getOrderedBy()->getCompany(),emailStep:nullemailCampaign:$mission->getCampaign());
  66.             }
  67.         }
  68.     }
  69.     public function onMissionNotificationSubContractorNotActivated(MissionNotificationSubContractorNotActivatedEvent $event)
  70.     {
  71.         $mission $event->getMission();
  72.         if (!$mission instanceof Mission) {
  73.             return;
  74.         }
  75.         $admins $this->dynamicHostService->getMailAdmin();
  76.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_SOUS_TRAITANT_PAS_ACTIVER_24H],[],$mission->getCampaign()->getOrderedBy());
  77.         if (null !== $email && $event->canSendToAdmin()) {
  78.             foreach ($admins as $admin) {
  79.                 $this->notificationService->create($email$admin->value$mission->getCampaign()->getOrderedBy(), $mission->getCampaign()->getOrderedBy()->getCompany(),null,null,null,false,false,null,null,$mission);
  80.             }
  81.         }
  82.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_RELANCE_ACTIVATION_SOUS_TRAITANT]);
  83.         
  84.         if (null !== $email) {
  85.             $this->notificationService->create($email$event->getUser(), $mission->getCampaign()->getOrderedBy(), $mission->getCampaign()->getOrderedBy()->getCompany(),null,null,null,false,false,null,null,$mission);
  86.         }
  87.     }
  88.     public function onSubContractorProfilComplete(AdminNotifiedSubContractorCompletedEvent $event)
  89.     {
  90.         $emailSystem null;
  91.         if ($event->getSubcontractor()) {
  92.             $emailSystem $this->systemEmailRepository->findOneBy(['code' => SystemEmail::SOUS_TRAITANT_PROFIL_COMPLETE]);
  93.         }
  94.         $role Role::ROLE_ADMIN->value;
  95.          $admins $this->dynamicHostService->getMailAdmin();
  96.          $company $this->dynamicHostService->getCompany();
  97.         if ($emailSystem !== null) {
  98.             foreach ($admins as $admin) {
  99.                 $this->notificationService->create($emailSystem$admin->valuenull$companynullnullnulltrue);
  100.             }
  101.         }
  102.     }
  103.     public function onSubContractorNoResponse48H(AdminNotifiedSubContractorNoResponseEvent $event)
  104.     {
  105.         $emailSystem null;
  106.         if ($event->getSubcontractor()) {
  107.             $emailSystem $this->systemEmailRepository->findOneBy(['code' => SystemEmail::SOUS_TRAITANT_NO_REPONSE_48H], [],$event->getSubcontractor());
  108.         }
  109.         $role Role::ROLE_ADMIN->value;
  110.          $admins $this->dynamicHostService->getMailAdmin();
  111.         if ($emailSystem !== null) {
  112.             foreach ($admins as $admin) {
  113.                 $this->notificationService->create($emailSystem$admin->value$event->getSubcontractor(), nullnullnullnulltruetrue);
  114.             }
  115.         }
  116.     }
  117.     public function onAdminNotified(AdminNotifiedEvent $event)
  118.     {
  119.         $emailSystem null;
  120.         if ($event->getSubcontractor()) {
  121.             $emailSystem $this->systemEmailRepository->findOneBy(['code' => SystemEmail::NOTIFICATION_ADMIN]);
  122.         }
  123.         $role Role::ROLE_ADMIN->value;
  124.          $admins $this->dynamicHostService->getMailAdmin();
  125.         if ($emailSystem !== null) {
  126.             foreach ($admins as $admin) {
  127.                 $this->notificationService->create($emailSystem$admin->value);
  128.             }
  129.         }
  130.     }
  131.     public function onMissionInitialTimeAfterValidationUpdated(MissionInitialTimeAfterValidationUpdatedEvent $event)
  132.     {
  133.         $emailSystem null;
  134.         if ($event->getMission() != null) {
  135.             $emailSystem $this->systemEmailRepository->findOneBy(['code' => SystemEmail::SOUS_TRAITANT_FORFAIT_INITIAL_TIME_UPDATED_AFTER_VALIDATION]);
  136.         }
  137.          $admins $this->dynamicHostService->getMailAdmin();
  138.         if ($emailSystem !== null) {
  139.             foreach ($admins as $admin) {
  140.                 $this->notificationService->create($emailSystem$admin->value);
  141.             }
  142.         }
  143.     }
  144.     public function onCommandPassedError (AdminCommandErrorEvent $adminCommandErrorEvent ){
  145.         $emailSystem null;
  146.         if ($adminCommandErrorEvent->getCampaign () != null) {
  147.             $emailSystem $this->systemEmailRepository->findOneBy(['code' => SystemEmail::ERREUR_LORS_DE_LA_COMMANDE]);
  148.         }
  149.          $admins $this->dynamicHostService->getMailAdmin();
  150.         if ($emailSystem !== null) {
  151.             foreach ($admins as $admin) {
  152.                 $this->notificationService->create(email:$emailSystem,user$admin->valueemailCompanynullemailStep:nullemailCampaign:$adminCommandErrorEvent->getCampaign());
  153.             }
  154.         }
  155.     }
  156.     public function onSubcontractorActivateOrThereIsABot(SubcontractorActivateOrThereIsABotEvent $subcontractorActivateOrThereIsABotEvent){
  157.         $mission $subcontractorActivateOrThereIsABotEvent->getMission ();
  158.         
  159.          $admins $this->dynamicHostService->getMailAdmin();
  160.         foreach ($admins as $admin) {
  161.             $form = new Address('caroline.b@my-flow.fr','myFlow');
  162.             $to =new Address($admin->value);
  163.             $subject ="Presence de sous-traitant bot/manque de sous-traitant";
  164.             $content="<p>Bonjour<p>
  165.                      <p>Un sous-traitant vient d'activĂ© sa mission or on a besoin de votre intervention pour poursuivre le processus : 
  166.                         <p>Supprimez (modifiez) le(s) sous-traitant(s) bot(s) et/ou ajoutez un workflow et/ou ajoutez le(s) sous-traitant(s) manquant(s)</p>
  167.                     </p>
  168.                      ref mission: {$mission->getReference()}
  169.                      ";
  170.             $this->notificationService->sendEmail($form,$to,$subject,$content);
  171.         }
  172.         
  173.     }
  174. }