src/EventSubscriber/CampaignSubscriber.php line 960

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Campaign;
  4. use App\Entity\ChatNotification;
  5. use App\Event\Campaign\CampaignNoWorkflowEvent;
  6. use App\EventSubscriber\Mission as MissionEvent;
  7. use App\Entity\Message;
  8. use App\Entity\Product;
  9. use App\Entity\Workflow;
  10. use App\Entity\Mission;
  11. use App\Entity\MissionParticipant;
  12. use App\Entity\NotificationToSend;
  13. use App\Entity\SystemEmail;
  14. use App\Entity\User;
  15. use App\Enum\FreqNotification;
  16. use App\Enum\Manager;
  17. use App\Enum\Notification;
  18. use App\Enum\NotificationType;
  19. use App\Enum\Role;
  20. use App\Event\Campaign\CampaignCancelledEvent;
  21. use App\Event\Campaign\CampaignCreatedEvent;
  22. use App\Event\User\UserRelaunchedEvent;
  23. use App\Event\User\UserMissionAddedEvent;
  24. use App\Event\Campaign\CampaignEvaluationEvent;
  25. use App\Event\Campaign\CampaignModifiedEvent;
  26. use App\Event\Campaign\CampaignValidatedEvent;
  27. use App\Event\Campaign\CampaignDeletedEvent;
  28. use App\Event\Campaign\CampaignWaitingEvent;
  29. use App\Event\Campaign\CampaignResumeEvent;
  30. use App\Event\Campaign\CampaignDeclineEvent;
  31. use App\Event\Campaign\CampaignWaitingNotResentEvent;
  32. use App\Event\Chat\MessageSentEvent;
  33. use App\Repository\ChatNotificationRepository;
  34. use App\Repository\MessageRepository;
  35. use App\Repository\NotificationToSendRepository;
  36. use App\Repository\SystemEmailRepository;
  37. use App\Repository\UserRepository;
  38. use App\Service\NotificationService;
  39. use Doctrine\ORM\EntityManagerInterface;
  40. use Symfony\Bridge\Twig\Mime\NotificationEmail;
  41. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  42. use Symfony\Component\Mailer\MailerInterface;
  43. use Symfony\Component\Mime\Address;
  44. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  45. use Symfony\Component\Routing\RouterInterface;
  46. use App\Enum\AdminMail;
  47. use App\Enum\ProductType;
  48. use App\Event\Campaign\CampaignNotFinishedEvent;
  49. use App\Event\Campaign\CampaignNotifyThatDeliveryDateChangeEvent;
  50. use App\Event\Campaign\CampaignRecurrentEvent;
  51. use App\Event\Campaign\DevisCreatedNotFinished;
  52. use App\Event\Client\PremiumPackageEvent;
  53. use App\Event\DevisCreatedWithNewClientEvent
  54. use App\Event\Campaign\CampaignResendEvent;
  55. use App\Event\Campaign\CampaignValidationCancelledEvent;
  56. use App\Event\Campaign\CampaignValidatedPerActivationEvent;
  57. use App\Event\Campaign\CampaignWaitingValidationEvent;
  58. use App\Event\Client\NoticeOfInsufficientBudgetEvent;
  59. use App\Event\Confidentiality\ConfidentialityRequestEvent;
  60. use App\Event\Confidentiality\ConfidentialityRequestButInfoCompanyNotCompletEvent;
  61. use App\Event\SubContractor\SubContractorMissionAddedEvent;
  62. use App\Repository\MissionParticipantRepository;
  63. use App\Service\RelanceService;
  64. use App\Service\WorkflowStepService;
  65. use Doctrine\Common\Collections\Collection;
  66. use Symfony\Component\Security\Core\Security;
  67. use App\Service\SendNotificationService;
  68. use App\Service\CampaignService;
  69. use App\Service\ConfidentialityService;
  70. use App\Service\FirebaseCloudeMessagingService;
  71. use App\Service\PriceService;
  72. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  73. use App\Service\DynamicHostService;
  74. use App\Service\MissionService;
  75. use App\Service\ChatService
  76. class CampaignSubscriber implements EventSubscriberInterface
  77. {
  78.     public function __construct(
  79.         private RouterInterface $router,
  80.         private MailerInterface $mailer,
  81.         private ChatNotificationRepository $notificationRepository,
  82.         private EntityManagerInterface $entityManager,
  83.         private SystemEmailRepository $systemEmailRepository,
  84.         private UserRepository $userRepository,
  85.         private NotificationService $notificationService,
  86.         private NotificationToSendRepository $notificationToSendRepository,
  87.         private Security $security,
  88.         private WorkflowStepService $workflowStepService,
  89.         private RelanceService $relanceService,
  90.         private SendNotificationService $sendNotificationService,
  91.         private CampaignService $campaignService,
  92.         private ConfidentialityService $confidentialityService,
  93.         private EventDispatcherInterface $dispatcher
  94.         private PriceService $priceService,
  95.         private MissionParticipantRepository $missionParticipantRepository
  96.         private FirebaseCloudeMessagingService $firebaseCloudeMessagingService
  97.         private DynamicHostService $dynamicHostService
  98.         private MissionService $missionService
  99.         private MessageRepository $messageRepository
  100.         private ChatService $chatService
  101.     ) {
  102.     }
  103.     public static function getSubscribedEvents()
  104.     {
  105.         return [
  106.             CampaignValidatedEvent::NAME => 'onCampaignValidated',
  107.             CampaignCancelledEvent::NAME => 'onCampaignCancelled',
  108.             CampaignCreatedEvent::NAME => 'onCampaignCreated',
  109.             CampaignModifiedEvent::NAME => 'onCampaignModified',
  110.             CampaignWaitingEvent::NAME => 'onCampaignWaiting',
  111.             CampaignResumeEvent::NAME => 'onCampaignResume',
  112.             UserRelaunchedEvent::NAME => 'onUserRelaunched',
  113.             CampaignDeclineEvent::NAME => 'onCampaignDecline',
  114.             CampaignWaitingNotResentEvent::NAME => 'onCampaignWaitingNotResent',
  115.             CampaignEvaluationEvent::NAME => 'onCampaignEvaluation',
  116.             MessageSentEvent::NAME => 'onMessageSent',
  117.             CampaignNotFinishedEvent::NAME => 'onCampaignNotFinished',
  118.             DevisCreatedNotFinished::NAME => 'onDevisCreatedNotFinished',
  119.             PremiumPackageEvent::NAME => 'onClientGetPremiumPackage',
  120.             CampaignResendEvent::NAME => 'onCampaignResend',
  121.             CampaignNotifyThatDeliveryDateChangeEvent::NAME => "onDeliveryDateChange",
  122.             CampaignDeletedEvent::NAME => "onCampaignDeletedEvent",
  123.             CampaignRecurrentEvent::NAME => "onCampaignRecurrent",
  124.             CampaignValidationCancelledEvent::NAME => 'oncampaignValidationCancelled',
  125.             CampaignWaitingValidationEvent::NAME => 'onCampaignWaitingValidation',
  126.             CampaignValidatedPerActivationEvent::NAME => 'onCampaignValidatedPerActivation',
  127.             DevisCreatedWithNewClientEvent::NAME=>'onDevisCreatedWithNewClientEvent',
  128.             CampaignNoWorkflowEvent::NAME=>'onCampaignNoWorkflowEvent'
  129.         ];
  130.     }
  131.     
  132.     public function onCampaignNoWorkflowEvent(CampaignNoWorkflowEvent $event){
  133.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_NO_WORKFLOW]);
  134.         $admins $this->dynamicHostService->getMailAdmin();
  135.         $missions $event->getMissions(); 
  136.         // desactivate permanantly
  137.         // foreach ($admins as $admin) {
  138.         //     foreach ($missions as $key => $mission) {
  139.         //         $this->notificationService->create( $email,  $admin->value, null,  null,  null,  $mission->getCampaign(),  null,  false,  false,  null,  null, $mission,  null,  null,  null,  null,  null,  null,  null);
  140.         //     }
  141.         // }
  142.     }
  143.     public function onDevisCreatedWithNewClientEvent(DevisCreatedWithNewClientEvent $event){
  144.         $admins $this->dynamicHostService->getMailAdmin();
  145.         $campaign $event->getCampaign(); 
  146.         $filelinksUrl =  $event->getFileLinks(); 
  147.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DEVIS_CREATED_WITH_NEW_CLIENT]);
  148.        
  149.         foreach ($admins as $key => $admin) {
  150.             $this->notificationService->create($email$admin->value,null$campaign->getOrderedBy()->getCompany(), null$campaignnullfalsefalsenullnullnullnullnullnullnullnullnull$filelinksUrl);
  151.         }
  152.     }
  153.     public function onCampaignValidatedPerActivation(CampaignValidatedPerActivationEvent $event){
  154.           $this->sendMailAddCampaign($event->getCampaign());
  155.          
  156.     }
  157.     public function oncampaignValidationCancelled(CampaignValidationCancelledEvent $event){
  158.          $admins $this->dynamicHostService->getMailAdmin();
  159.         $campaign $event->getCampaign();
  160.         $user$event->getUser();
  161.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::VALIDATION_CANCELLED]);
  162.         foreach ($admins as $key => $admin) {
  163.             $this->notificationService->create($email$admin->value,$user$campaign->getOrderedBy()->getCompany(), null$campaign);
  164.         }
  165.     }
  166.     public function onCampaignWaitingValidation(CampaignWaitingValidationEvent $event){
  167.         $campaign $event->getCampaign();
  168.         $userAlreadSendEmail = [];
  169.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CAMPAIGN_WAITING_VALIDATION]);
  170.         foreach ($campaign->getMissions() as $mission) {
  171.             foreach ($mission->getParticipants() as $participant) {
  172.         
  173.                 if(!in_array($participant->getUser()->getId(), $userAlreadSendEmail) && ($participant->getRole() == ROLE::ROLE_VALIDATOR || in_array('ROLE_CLIENT'$participant->getUser()->getRoles()))){
  174.                     $this->notificationService->create($email$participant->getUser(), $participant->getUser(), $campaign->getOrderedBy()->getCompany(), null$campaign);
  175.                     $userAlreadSendEmail=[...$userAlreadSendEmail,$participant->getUser()->getId() ];
  176.                 }
  177.             }
  178.         }
  179.     }
  180.     public function onCampaignRecurrent(CampaignRecurrentEvent $event)
  181.     {
  182.         $campaign $event->getCampaign();
  183.         $contcontactProjectIsOK $event->contactProjectIsOK();
  184.         $isNewRecurrent $event->isNew();
  185.         if (!$contcontactProjectIsOK) {
  186.             $product = new Product();
  187.             $product->setName("Espace de discussion");
  188.             $product->setFrontId(0);
  189.             $product->setType(ProductType::AU_TEMPS_PASSE);
  190.             $this->entityManager->persist($product);
  191.             $today = new \DateTime();
  192.             $mission  = new Mission();
  193.         
  194.           
  195.             $workflow $this->entityManager->getRepository(Workflow::class)->findOneBy(['template'=>1,'name'=>'Discussion']);
  196.             $newWorkflow = clone($workflow);
  197.             $reference  $campaign->getMissions()->first()!= null $campaign->getMissions()->first()->getReference($campaign->getOrderedBy()) : $this->missionService->generateReference();
  198.             $mission->setProduct($product)
  199.                     ->setQuantity(1)
  200.                     ->setDesiredDelivery($today->add(new \DateInterval('P1Y')))
  201.                     ->setState('provisional')
  202.                     ->setWorkflow($newWorkflow)
  203.                     ->setCampaign($campaign)
  204.                     ->setReference($reference);
  205.                     ;
  206.             $campaign->addMission($mission); 
  207.             $this->entityManager->persist($campaign);
  208.             $this->entityManager->flush();
  209.             $this->missionService->addHistorique($mission$campaign->getOrderedBy(), 'campaign_initiate_by_recurrent');
  210.             $contactProject array_column($this->userRepository->getContactProjectByCompany($campaign->getCompany()),'id');
  211.             $contactProject array_unique($contactProject);
  212.             // foreach ($contactProject as $contact) {
  213.             //     $userContact = $this->userRepository->find($contact);
  214.             //     $missionParticipantContactProject = (new MissionParticipant())
  215.             //                             ->setUser($userContact)
  216.             //                             ->setMission($mission)
  217.             //                             ->setRole(Role::PROJECT_CONTACT);
  218.             //     $mission->addParticipant($missionParticipantContactProject);
  219.                
  220.             // }
  221.             foreach ($campaign->getMissions() as $mission) {
  222.                 //ajouter contact projet (commande via back)
  223.                 $contactProject array_unique($contactProject);
  224.                 foreach ($contactProject as $contact) {
  225.                     $userContact $this->userRepository->find($contact);
  226.                     $missionParticipantContactProject = (new MissionParticipant())
  227.                                             ->setUser($userContact)
  228.                                             ->setMission($mission)
  229.                                             ->setRole(Role::PROJECT_CONTACT);
  230.                     $mission->addParticipant($missionParticipantContactProject);
  231.                 }
  232.                 if (empty($contactProject)) {
  233.                     $company $this->dynamicHostService->getCompany();
  234.                         $admins $this->userRepository->getAllAdmin();
  235.                   
  236.                     if (!is_null($company)) {//if company is not null so it is agency
  237.                         $admins $this->userRepository->getAdminAgencyByCompany($company);
  238.                        
  239.                     }
  240.                     foreach ($admins as $key => $admin) {
  241.                             $missionParticipantContactProject = (new MissionParticipant())
  242.                                             ->setUser($admin)
  243.                                             ->setMission($mission)
  244.                                             ->setRole(Role::PROJECT_CONTACT);
  245.                             $mission->addParticipant($missionParticipantContactProject);
  246.                     }
  247.                 }
  248.             }
  249.             if (empty($contactProject)) {
  250.                     $company $this->dynamicHostService->getCompany($campaign?->getOrderedBy());
  251.                     $admins $this->userRepository->getAllAdmin();
  252.                     if (!is_null($company)) {//if company is not null so it is agency
  253.                         $admins $this->userRepository->getAdminAgencyByCompany($company);
  254.                     }
  255.                     foreach ($admins as $key => $admin) {
  256.                             $missionParticipantContactProject = (new MissionParticipant())
  257.                                             ->setUser($admin)
  258.                                             ->setMission($mission)
  259.                                             ->setRole(Role::PROJECT_CONTACT);
  260.                             $mission->addParticipant($missionParticipantContactProject);
  261.                     }
  262.                 }
  263.             //$campaign->addMission($mission); 
  264.             $this->entityManager->persist($mission);
  265.             $this->entityManager->persist($campaign);
  266.             $this->entityManager->flush();
  267.             
  268.             $this->campaignService->addDefaultClient($mission);
  269.         }
  270.        
  271.         
  272.    
  273.         if($campaign->getRecurringState() == 'waiting_validation'){
  274.             $userAlreadSendEmail=[];
  275.             $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::VALIDATION_RECURRENT_CAMPAING]);
  276.             foreach ($campaign->getMissions() as $mission) {
  277.                 foreach ($mission->getParticipants() as $participant) {
  278.             
  279.                     if(!in_array($participant->getUser()->getId(), $userAlreadSendEmail) && ($participant->getRole() == ROLE::ROLE_VALIDATOR || in_array('ROLE_CLIENT'$participant->getUser()->getRoles()))){
  280.                         $this->notificationService->create($email$participant->getUser(), $participant->getUser(), $campaign->getOrderedBy()->getCompany(), null$campaign);
  281.                         $userAlreadSendEmail=[...$userAlreadSendEmail,$participant->getUser()->getId() ];
  282.                     }
  283.                 }
  284.             }
  285.         }else{
  286.             if ($isNewRecurrent) {
  287.                 $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::NEW_COMMAND_RECURRENT]);
  288.             } else {
  289.                 $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::COMMAND_RECURRENT]);
  290.             }
  291.             
  292.              $this->notificationService->create($email$campaign->getOrderedBy(), $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null$campaign);
  293.         }
  294.         
  295.     }
  296.     public function onCampaignDeletedEvent(CampaignDeletedEvent $event)
  297.     {
  298.         $campaign $event->getCampaign();
  299.         $user $event->getUser();
  300.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CAMPAING_DELETE]);
  301.          $admins $this->dynamicHostService->getMailAdmin();
  302.         foreach ($admins as $admin) {
  303.             $this->notificationService->create($email$admin->value$user$user->getCompany(), null$campaign);
  304.         }
  305.         return;
  306.     }
  307.     public function onClientGetPremiumPackage(PremiumPackageEvent $event)
  308.     {
  309.         $client $event->getClient();
  310.          $admins $this->dynamicHostService->getMailAdmin();
  311.         $otherEmail $event->getEmailOther();
  312.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MODIFICATION_INTERVENANT]);
  313.         foreach ($admins as $admin) {
  314.             $this->notificationService->create($email$admin->value$client$client->getCompany(), nullnullnullfalsefalse$otherEmail);
  315.         }
  316.         return;
  317.     }
  318.     public function onDevisCreatedNotFinished(DevisCreatedNotFinished $event)
  319.     {
  320.         $campaign $event->getCampaign();
  321.         $user $event->getUser();
  322.          $admins $this->dynamicHostService->getMailAdmin();
  323.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DEMANDE_NON_TERMINER_CLIENT_DEVIS]);
  324.         foreach ($admins as $admin) {
  325.             $this->notificationService->create($email$admin->value$user$user->getCompany(), null$campaign);
  326.         }
  327.         return;
  328.     }
  329.     public function onCampaignNotFinished(CampaignNotFinishedEvent $event)
  330.     {
  331.         $campaign $event->getCampaign();
  332.         $mission $event->getMission();
  333.         $user $event->getUser();
  334.         $admins $this->dynamicHostService->getMailAdmin();
  335.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DEMANDE_NON_TERMINER_CLIENT]);
  336.         foreach ($admins as $admin) {
  337.             $this->notificationService->create($email$admin->value$user$user->getCompany(), null$campaign);
  338.         }
  339.         return;
  340.     }
  341.     public function onCampaignCreated(CampaignCreatedEvent $event)
  342.     {
  343.        
  344.         $allEmail=[];
  345.         $campaign $event->getCampaign();
  346.         $type $event->getType();
  347.         $contactProject $event->getContactProject();
  348.         $createdInBack $event->getCreatedInBack();
  349.         $alreadyClone $event->alreadyClone();
  350.         $allUserInMission $event->getListUser();
  351.         $isNewClientAdded $event->isNewClientAdded();
  352.         $campaignTypeInitiation '';
  353.         $launchJustOne true;
  354.         if (!$campaign instanceof Campaign) {
  355.             return;
  356.         }
  357.        
  358.         //if contactProject is empty search default contact projet in company
  359.         if (empty($contactProject) and !is_null($campaign?->getCompany()) /*and !$createdInBack*/) {
  360.        
  361.             $contactProject array_column($this->userRepository->getContactProjectByCompany($campaign->getCompany()),'id');
  362.         }
  363.       
  364.         $admins $this->dynamicHostService->getMailAdmin();
  365.     
  366.         $alreadySent = [];
  367.     
  368.         if ($campaign->getMissions()->count() === 0) {
  369.          
  370.             if ($type == 'CREATION_DEVIS'){
  371.             
  372.                 $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CREATION_DEVIS], [], $campaign->getOrderedBy());
  373.           
  374.            
  375.             }elseif($type =='CREATION_DEVIS_PUBLIC'){
  376.                 $campaignTypeInitiation 'devis_public';
  377.                 if($isNewClientAdded){
  378.                     $filelinksUrl =  $event->getLinkAttachments(); 
  379.                     $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DEVIS_CREATED_WITH_NEW_CLIENT],[], $campaign->getOrderedBy());
  380.     
  381.                     foreach ($admins as $key => $admin) {
  382.                         $this->notificationService->create($email$admin->value,null$campaign->getOrderedBy()->getCompany(), null$campaignnullfalsefalsenullnullnullnullnullnullnullnullnull$filelinksUrl);
  383.                     }
  384.     
  385.                     $email null
  386.                 }else{
  387.                     $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CREATION_DEVIS],[], $campaign->getOrderedBy());
  388.                 }
  389.                
  390.             }
  391.             else{
  392.                
  393.                 $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DEMANDE_DEVIS_NOTIF_ADMIN],[], $campaign->getOrderedBy());
  394.             }
  395.         } else {
  396.             
  397.             $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CREATION_CAMPAGNE],[], $campaign->getOrderedBy());
  398.            
  399.         }
  400.         if($type == 'CREATION_DEVIS'){
  401.             $campaignTypeInitiation 'campaign_initiate_by_tunnel_devis';
  402.         }
  403.         elseif($type == 'CREATION_DEVIS_PUBLIC'){
  404.             $campaignTypeInitiation 'devis_public';
  405.         }
  406.         elseif($type == 'CREER_PAR_ADMIN'){
  407.             $campaignTypeInitiation 'campaign_initiate_by_admin';
  408.         }
  409.         elseif($type == 'TUNNEL_MAIL'){
  410.             $campaignTypeInitiation 'campaign_initiate_by_mail';
  411.         }
  412.         elseif($type == 'TUNNEL_COMMANDE'){
  413.             $campaignTypeInitiation 'campaign_initiate_by_tunnel_client';
  414.         }else{
  415.             $campaignTypeInitiation 'campaign_initiate_by_tunnel_client';
  416.         }
  417.         if (null !== $email) {
  418.             $files = (false !== $campaign->getMissions()->first()) ? $campaign->getMissions()->first()->getFileMissions() : null;
  419.          
  420.              $allEmail[] = $email;
  421.             foreach ($admins as $admin) {
  422.                 $this->notificationService->create($email$admin->value$campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null$campaign$files);
  423.             }
  424.           
  425.         }
  426.      
  427.         foreach ($campaign->getMissions() as $mission) {
  428.       
  429.             //ajouter contact projet (commande via back)
  430.             $contactProject array_unique($contactProject);
  431.             if (!$alreadyClone) {
  432.                
  433.                 foreach ($contactProject as $contact) {
  434.                     $userContact $this->userRepository->find($contact);
  435.                     $missionParticipantContactProject = (new MissionParticipant())
  436.                                             ->setUser($userContact)
  437.                                             ->setMission($mission)
  438.                                             ->setRole(Role::PROJECT_CONTACT);
  439.                     $mission->addParticipant($missionParticipantContactProject);
  440.                 }
  441.                 if (empty($contactProject)) {
  442.                
  443.                     $company $this->dynamicHostService->getCompany();
  444.                         $admins $this->userRepository->getAllAdmin();
  445.                   
  446.                     if (!is_null($company)) {//if company is not null so it is agency
  447.                         $admins $this->userRepository->getAdminAgencyByCompany($company);
  448.                        
  449.                     }
  450.                    
  451.                     foreach ($admins as $key => $admin) {
  452.                             $missionParticipantContactProject = (new MissionParticipant())
  453.                                             ->setUser($admin)
  454.                                             ->setMission($mission)
  455.                                             ->setRole(Role::PROJECT_CONTACT);
  456.                             $mission->addParticipant($missionParticipantContactProject);
  457.                     }
  458.                 }
  459.             }
  460.         
  461.             $count 0;
  462.             foreach ($mission->getParticipants() as $participant) {
  463.             
  464.                 if (in_array('ROLE_BOT'$participant->getUser()->getRoles())) {
  465.                     $admins $this->dynamicHostService->getMailAdmin();
  466.                     $emailForBot $this->systemEmailRepository->findOneBy(['code' => SystemEmail::PRESTATAIRE_ASSOCIE],[], $campaign->getOrderedBy());
  467.                     $allEmail[] = $emailForBot;
  468.                     foreach ($admins as $admin) {
  469.                         $this->notificationService->create($emailForBot$admin->value$participant->getUser(), $mission->getCampaign()->getOrderedBy()->getCompany(), null$campaign);
  470.                          
  471.                     }
  472.                    
  473.                 } else {
  474.                     if ($participant->getRole() === Role::ROLE_SUBCONTRACTOR) {
  475.                         $count++;
  476.                         if (!in_array($participant->getUser()->getEmail(), $alreadySent)) {
  477.                             $event = new SubContractorMissionAddedEvent($participant->getUser(), $mission);
  478.                             $this->dispatcher->dispatch($eventSubContractorMissionAddedEvent::NAME);   
  479.                             $alreadySent[]=$participant->getUser()->getEmail();
  480.                         }
  481.                     }
  482.                     
  483.                     $participant->getUser()->setAutorizationDateAt(new \DateTimeImmutable());
  484.                     $this->entityManager->flush();
  485.                 }
  486.             }
  487.            
  488.             if ($count === && true === $launchJustOne) {
  489.                 $launchJustOne false;
  490.                 $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_SANS_PARTENAIRE],[], $campaign->getOrderedBy());
  491.                 $allEmail[] = $email;
  492.                 if (null !== $email) {
  493.                      $admins $this->dynamicHostService->getMailAdmin();
  494.                     foreach ($admins as $admin) {
  495.                         $this->notificationService->create($email$admin->value$campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null$campaign);
  496.                     }
  497.                     if (null !== $email->getSmsContent()) {
  498.                          $admins $this->dynamicHostService->getMailAdmin();
  499.                         foreach ($admins as $admin) {
  500.                             $this->notificationService->create($email$admin->value$campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null$campaignnulltrue);
  501.                         }
  502.                     }
  503.                 }
  504.             }
  505.           
  506.             $this->campaignService->addHistoriqueMission(mission$missionuser$campaign->getOrderedBy(), action"new_project");
  507.             
  508.             $validators =  $this->campaignService->getValidatorMissionList(mission$mission);
  509.             if (sizeof($validators)) {
  510.                 $this->campaignService->addHistoriqueMission(mission$missionuser$campaign->getOrderedBy(), action"add_validator_list"option$validators);
  511.             }
  512.         }
  513.        
  514.         if ($campaign->getMissions()->count() === 0) {
  515.             $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DEMANDE_DEVIS_NOTIF_CLIENT],[], $campaign->getOrderedBy());
  516.         } elseif ($mission->getProduct()->getType() == ProductType::A_EVALUER) {
  517.             $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CLIENT_CAMPAGNE_A_EVALUER_CREEE],[], $campaign->getOrderedBy());
  518.         } elseif( $type != 'CREATION_DEVIS_PUBLIC') {
  519.             $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CLIENT_CAMPAGNE_CREEE],[], $campaign->getOrderedBy());
  520.         }
  521.         if (null !== $email  && !in_array($campaign->getOrderedBy()->getRoles()[0], ['ROLE_ADMIN''ROLE_ADMIN_AGENCY''ROLE_MANAGER'])) {
  522.             $this->notificationService->create($email$campaign->getOrderedBy(), $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null$campaign);
  523.         }
  524.       
  525.         try {
  526.             $creditHistory $campaign->getCreditHistory(); 
  527.             $currentBlance $creditHistory->getCurrentBalance();
  528.             $totalPrice $this->priceService->totalPriceCampaign($campaignfalse);
  529.     
  530.             if($currentBlance $totalPrice 0) {
  531.                 $event = new  NoticeOfInsufficientBudgetEvent($campaign->getCompany(), $campaign);
  532.                 $this->dispatcher->dispatch($eventNoticeOfInsufficientBudgetEvent::NAME);
  533.             }
  534.         } catch (\Throwable $th) {
  535.            
  536.         }
  537.     
  538.         if (!$alreadyClone) {
  539.            
  540.             $product = new Product();
  541.             $product->setName("Espace de discussion");
  542.             $product->setFrontId(0);
  543.             $product->setType(ProductType::AU_TEMPS_PASSE);
  544.             $this->entityManager->persist($product);
  545.             $today = new \DateTime();
  546.             $mission  = new Mission();       
  547.             $workflow $this->entityManager->getRepository(Workflow::class)->findOneBy(['template'=>1,'name'=>'Discussion']);
  548.             $newWorkflow = clone($workflow);
  549.             $newWorkflow->setTemplate(0);
  550.             $reference  $campaign->getMissions()->first()!= null $campaign->getMissions()->first()->getReference() : $this->missionService->generateReference($campaign?->getOrderedBy());
  551.             $mission->setProduct($product)
  552.                     ->setQuantity(1)
  553.                     ->setDesiredDelivery($today->add(new \DateInterval('P1Y')))
  554.                     ->setState('provisional')
  555.                     ->setWorkflow($newWorkflow)
  556.                     ->setCampaign($campaign)
  557.                     ->setReference($reference);
  558.                     ;
  559.             $contactProject array_unique($contactProject);
  560.             foreach ($contactProject as $contact) {
  561.                 $userContact $this->userRepository->find($contact);
  562.                 $missionParticipantContactProject = (new MissionParticipant())
  563.                                         ->setUser($userContact)
  564.                                         ->setMission($mission)
  565.                                         ->setRole(Role::PROJECT_CONTACT);
  566.                 $mission->addParticipant($missionParticipantContactProject);
  567.                
  568.             }
  569.             if(!empty($allUserInMission)){
  570.                 $ids = [];
  571.                 foreach ($allUserInMission as $key => $users) {
  572.                     foreach ($users as $user) {
  573.                              $missionParticipant = new MissionParticipant();
  574.                              $missionParticipant->setMission($mission)->setUser($user);
  575.                         if (!in_array($user->getId(),$ids)) {
  576.                            
  577.                             if ($key == "observerListUser") {
  578.                                     $missionParticipant->setRole(Role::ROLE_OBSERVER);
  579.                             }else if ($key == "validatorListUser") {
  580.                                    $missionParticipant->setRole(Role::ROLE_VALIDATOR);
  581.                             }
  582.                             else if ($key == "observerExtenalListUser") {
  583.                                    $missionParticipant->setRole(Role::ROLE_OBSERVER_EXTERNAL);
  584.                             }
  585.                             else if ($key == "validatorExternalListUser") {
  586.                                    $missionParticipant->setRole(Role::ROLE_VALIDATOR_EXTERNAL);
  587.                             }
  588.                             else if ($key == "allContactProject") {
  589.                                    $missionParticipant->setRole(Role::PROJECT_CONTACT);
  590.                             }else if ($key == "allSubContractor") {
  591.                                    $missionParticipant->setRole(Role::ROLE_SUBCONTRACTOR);
  592.                                    //envoie de mail au participant
  593.                                     $event = new SubContractorMissionAddedEvent($missionParticipant->getUser(), $mission);
  594.                                     $this->dispatcher->dispatch($eventSubContractorMissionAddedEvent::NAME);
  595.                             }
  596.                         }
  597.                         $mission->addParticipant($missionParticipant);
  598.                         $ids[] = $user->getId();
  599.                     }
  600.                 }
  601.             }
  602.             // $this->missionService->addHistorique($mission, $campaign->getOrderedBy(), 'campaign_initiate_by_mail');
  603.            
  604.             if (empty($contactProject)) {
  605.                     $company $this->dynamicHostService->getCompany();
  606.                     $admins $this->userRepository->getAllAdmin();
  607.             
  608.                     if (!is_null($company)) {//if company is not null so it is agency
  609.                         $admins $this->userRepository->getAdminAgencyByCompany($company);
  610.                     }
  611.                     foreach ($admins as $key => $admin) {
  612.                             $missionParticipantContactProject = (new MissionParticipant())
  613.                                             ->setUser($admin)
  614.                                             ->setMission($mission)
  615.                                             ->setRole(Role::PROJECT_CONTACT);
  616.                             $mission->addParticipant($missionParticipantContactProject);
  617.                     }
  618.                 }
  619.             //add all contact
  620.                
  621.             $this->entityManager->persist($mission);
  622.             $this->entityManager->persist($campaign);
  623.             $this->entityManager->flush();
  624.             $this->campaignService->addDefaultClient($mission);
  625.             $this->confidentialityService->addSignedContractForClient($campaign->getOrderedBy(), falsetruefalse);
  626.             if(!empty($campaignTypeInitiation)){
  627.                 $this->missionService->addHistorique($mission$campaign->getOrderedBy(), $campaignTypeInitiation);
  628.             }
  629.             
  630.         }
  631.         //Send mail to contact project if mission are created
  632.         $emailAdmin= [];
  633.       
  634.         foreach ($admins as $admin) {
  635.             if ($admin instanceof User) {
  636.                 $emailAdmin[] = $admin->getEmail();
  637.             }else{
  638.                 $emailAdmin[] = $admin->value;
  639.             }
  640.         }
  641.      
  642.         foreach ($mission->getParticipants() as $participant) {
  643.            if ($participant->getRole() === Role::PROJECT_CONTACT and !in_array($participant->getUser()->getEmail(),$emailAdmin)) {
  644.                 foreach ($allEmail as $email) {
  645.                     $this->notificationService->create($email$participant->getUser()->getEmail(), $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null$campaign);
  646.                 }
  647.            }
  648.         }
  649.         $this->chatService->publicOnCampaignUpdate();
  650.         
  651.     }
  652.     public function onUserRelaunched(UserRelaunchedEvent $event)
  653.     {
  654.         $campaign $event->getCampaign();
  655.         $participant $event->getParticipant();
  656.         if (!$campaign instanceof Campaign) {
  657.             return;
  658.         }
  659.         
  660.         $emailClient $this->systemEmailRepository->findOneBy(['code' => SystemEmail::INDIVIDUEL_RELANCE_CLIENT]);
  661.         $emailSub $this->systemEmailRepository->findOneBy(['code' => SystemEmail::INDIVIDUEL_RELANCE_SOUS_TRAITANT]);
  662.         
  663.         if ($participant->getRole() === Role::ROLE_SUBCONTRACTOR) {
  664.             if (null !== $emailSub) {
  665.                 $this->notificationService->create($emailSub$participant->getUser(), $participant->getUser(), $campaign->getCompany(), null$campaign);
  666.             }
  667.         }
  668.         else {
  669.             if (null !== $emailClient){
  670.                 $this->notificationService->create($emailClient$participant->getUser(), $participant->getUser(), $campaign->getCompany(), null$campaign);
  671.             }
  672.         }
  673.     }
  674.     public function onCampaignCancelled(CampaignCancelledEvent $event)
  675.     {
  676.         $campaign $event->getCampaign();
  677.         if (!$campaign instanceof Campaign) {
  678.             return;
  679.         }
  680.         $userAlreadyHaveMail = [];
  681.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CAMPAING_CANCELLED]);
  682.         $admins $this->dynamicHostService->getMailAdmin();
  683.         if (null !== $email) {
  684.             foreach ($admins as $admin) {
  685.                 $this->notificationService->create($email$admin->value$campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null$campaign);
  686.             }
  687.         }
  688.         
  689.         $emailClient $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CLIENT_CAMPAING_CANCELLED]);
  690.         $emailSub $this->systemEmailRepository->findOneBy(['code' => SystemEmail::SOUS_TRAITANT_CAMPAING_CANCELLED]);
  691.         
  692.         foreach ($campaign->getMissions() as $mission) {
  693.             foreach ($mission->getParticipants() as $participant) {
  694.                 if ($participant->getRole() === Role::ROLE_SUBCONTRACTOR) {
  695.                     if (null !== $emailSub) {
  696.                         if ((!in_array($participant->getUser()->getId(), $userAlreadyHaveMail))) {
  697.                             $this->notificationService->create($emailSub$participant->getUser(), $participant->getUser(), $campaign->getCompany(), null$mission->getCampaign());
  698.                         }
  699.                         $userAlreadyHaveMail[] = $participant->getUser()->getId();
  700.                     }
  701.                 }
  702.                 if ($participant->getRole() === Role::ROLE_VALIDATOR || $participant->getRole() === Role::ROLE_OBSERVER || $participant->getRole() === Role::ROLE_VALIDATOR_EXTERNAL || $participant->getRole() === Role::ROLE_OBSERVER_EXTERNAL ) {
  703.                     if (null !== $emailClient){
  704.                         if ((!in_array($participant->getUser()->getId(), $userAlreadyHaveMail))) {
  705.                             $this->notificationService->create($emailClient$participant->getUser(), $participant->getUser(), $campaign->getCompany(), null$mission->getCampaign());
  706.                              $userAlreadyHaveMail[] = $participant->getUser()->getId();
  707.                         }
  708.                     }
  709.                 }
  710.             }
  711.         }
  712.     }
  713.     
  714.     public function onCampaignResume(CampaignResumeEvent $event)
  715.     {
  716.         $campaign $event->getCampaign();
  717.         if (!$campaign instanceof Campaign) {
  718.             return;
  719.         }
  720.         $emailSub $this->systemEmailRepository->findOneBy(['code' => SystemEmail::SOUS_TRAITANT_CAMPAING_RESUMED]);
  721.         $emailClient $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CLIENT_CAMPAING_RESUMED]);
  722.         
  723.         foreach ($campaign->getMissions() as $mission) {
  724.             foreach ($mission->getParticipants() as $participant) {
  725.                 if ($participant->getRole() === Role::ROLE_SUBCONTRACTOR) {
  726.                     if (null !== $emailSub){
  727.                         $listResponsableMission $this->workflowStepService->getResponsableStepByMission($mission);
  728.                         $this->notificationService->create($emailSub$participant->getUser(), $participant->getUser(), $campaign->getCompany(), null$mission->getCampaign());
  729.                     }
  730.                 }
  731.                 if ($participant->getRole() === Role::ROLE_VALIDATOR || $participant->getRole() === Role::ROLE_OBSERVER || $participant->getRole() === Role::ROLE_VALIDATOR_EXTERNAL || $participant->getRole() === Role::ROLE_OBSERVER_EXTERNAL) {
  732.                     if (null !== $emailClient){
  733.                         $listResponsableMission $this->workflowStepService->getResponsableStepByMission($mission);
  734.                         $this->notificationService->create($emailClient$participant->getUser(), $participant->getUser(), $campaign->getCompany(), null$mission->getCampaign());
  735.                     }
  736.                 }
  737.             }
  738.         }
  739.     }
  740.     public function onCampaignModified(CampaignModifiedEvent $event)
  741.     {
  742.         $campaign $event->getCampaign();
  743.         if (!$campaign instanceof Campaign) {
  744.             return;
  745.         }
  746.         $notification = (new NotificationEmail())
  747.             ->to(new Address($campaign->getOrderedBy()->getEmail()))
  748.             ->subject('Votre commande ' $campaign->getName() . ' a été modifiée')
  749.             ->content('
  750.                 <p>Bonjour,</p>
  751.                 <p>Votre commande "' $campaign->getName() . '" vient d\'être modifée.</p>
  752.                 <p>L\'équipe MyFlow</p>
  753.             ')
  754.             ->action('Accéder au tableau de bord'$this->router->generate('mission_index', [], UrlGeneratorInterface::ABSOLUTE_URL))
  755.             ->markAsPublic();
  756.         $this->mailer->send($notification);
  757.     }
  758.     public function onDeliveryDateChange(CampaignNotifyThatDeliveryDateChangeEvent $event)
  759.     {
  760.         $campaign $event->getCampaign();
  761.         $mission $event->getMission();
  762.         $to = [];
  763.         $emailSysteme $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DATE_DE_LIVRAISON_CHANGE]);
  764.         foreach ($campaign->getCompany()->getUsers() as $user) {
  765.             if (!(in_array("ROLE_ADMIN"$user->getRoles()) || in_array("ROLE_SUBCONTRACTOR"$user->getRoles())) && !in_array($user->getEmail(), $to)) {
  766.                 $to[] = $user->getEmail();
  767.                 $this->notificationService->create(
  768.                     $emailSysteme,
  769.                     $user->getEmail(),
  770.                     $user->getEmail(),
  771.                     $campaign->getCompany(),
  772.                     null,
  773.                     null,
  774.                     null,
  775.                     false,
  776.                     false,
  777.                     null,
  778.                     null,
  779.                     $mission
  780.                 );
  781.             }
  782.         }
  783.     }
  784.     public function onCampaignWaiting(CampaignWaitingEvent $event)
  785.     {
  786.         $campaign $event->getCampaign();
  787.         $ids = [];
  788.         if (!$campaign instanceof Campaign) {
  789.             return;
  790.         }
  791.         $userAlreadyHaveMail = [];
  792.          $admins $this->dynamicHostService->getMailAdmin();
  793.         if ($event->getSystemEmail()) {
  794.             $emailForClient $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_EN_PAUSE]);
  795.             $emailForSubcontractor $this->systemEmailRepository->findOneBy(['code' => SystemEmail::EMAIL_PAUSE_FOR_SUBCONTRACTOR]);
  796.             $emailForAdmin $this->systemEmailRepository->findOneBy(['code' => SystemEmail::EMAIL_PAUSE_FOR_ADMIN]);
  797.             //email envoyé aux sous-traitants et à celui qui la commandée
  798.             $isSendToAdmin false;
  799.             foreach ($campaign->getMissions() as $mission) {
  800.                 $responsable $this->getResponsableForActionPause($mission->getParticipants());
  801.                 foreach ($mission->getParticipants() as $participant) {
  802.                     if ($participant->getUser() === $this->security->getUser()) {
  803.                         $responsable $participant->getRole()->label();
  804.                     }
  805.                     if ($participant->getRole() === Role::ROLE_SUBCONTRACTOR) {
  806.                         if ((!in_array($participant->getUser()->getId(), $userAlreadyHaveMail))) {
  807.                             $this->notificationService->create($emailForSubcontractor$participant->getUser(), $participant->getUser(), $campaign->getCompany(), null$campaignnullfalsefalsenull$responsable);
  808.                         }
  809.                         $userAlreadyHaveMail[] = $participant->getUser()->getId();
  810.                     }
  811.                     if ($participant->getRole() === Role::ROLE_VALIDATOR || $participant->getRole() === Role::ROLE_OBSERVER || $participant->getRole() === Role::ROLE_VALIDATOR_EXTERNAL || $participant->getRole() === Role::ROLE_OBSERVER_EXTERNAL and (!in_array($participant->getUser()->getId(), $userAlreadyHaveMail))) {
  812.                         $this->notificationService->create($emailForClient$participant->getUser(), $participant->getUser(), $campaign->getCompany(), null$campaignnullfalsefalsenull$responsable);
  813.                         $userAlreadyHaveMail[] = $participant->getUser()->getId();
  814.                     }
  815.                 }
  816.                 if (!$isSendToAdmin) {
  817.                     foreach ($admins as $admin) {
  818.                         if((!in_array($participant->getUser()->getId(), $userAlreadyHaveMail))){
  819.                          $this->notificationService->create($emailForAdmin$admin->value,  $admin->value$campaign->getCompany(), null$campaignnullfalsefalsenull$responsable);
  820.                         }
  821.                         $userAlreadyHaveMail[] = $participant->getUser()->getId();
  822.                     }
  823.                     $isSendToAdmin true;
  824.                 }
  825.             }
  826.         } else {
  827.             $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::RESOUMISSION_PANIER]);
  828.             if (null !== $email) {
  829.                 foreach ($campaign->getMissions() as $mission) {
  830.                     foreach ($mission->getParticipants() as $participant) {
  831.                         $userId $participant->getUser()->getId();
  832.                         if ($participant->getRole() == Role::ROLE_VALIDATOR and !in_array($userId$ids)) {
  833.                             $this->notificationService->create($email$participant->getUser(), $participant->getUser(), $participant->getUser()->getCompany(), null$campaign);
  834.                             $ids[] = $userId;
  835.                         }
  836.                     }
  837.                 }
  838.                 $this->notificationService->create($email$campaign->getOrderedBy(), $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null$campaign);
  839.             }
  840.             $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::RESOUMISSION_PANIER_ADMIN]);
  841.             foreach ($admins as $admin) {
  842.                 $this->notificationService->create($email$admin->value$campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null$campaign);
  843.             }
  844.         }
  845.     }
  846.     
  847.     public function onCampaignDecline(CampaignDeclineEvent $event)
  848.     {
  849.         $campaign $event->getCampaign();
  850.       
  851.         if (!$campaign instanceof Campaign) {
  852.             return;
  853.         }
  854.         $user =  $event->getUser();
  855.          $admins $this->dynamicHostService->getMailAdmin();
  856.         if ($event->getSystemEmail()) {
  857.             $emailForSubcontractor $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_REFUSEE_INTERVENANT]);
  858.             $emailForAdmin $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_REFUSEE_ADMIN]);
  859.            
  860.             $this->notificationService->create($emailForSubcontractor,$user,  $user$campaign->getCompany(), null$campaignnullfalsefalsenullnull);
  861.             foreach ($admins as $admin) {
  862.                 $this->notificationService->create($emailForAdmin$admin->value,  $user$campaign->getCompany(), null$campaignnullfalsefalsenullnull);
  863.             }
  864.         }
  865.     }
  866.     public function onCampaignWaitingNotResent(CampaignWaitingNotResentEvent $event)
  867.     {
  868.         $listCampaignsWaitingNotResent $event->getListCampaignsWaitingNotResent();
  869.         if (empty($listCampaignsWaitingNotResent)) {
  870.             return;
  871.         }
  872.         $emailWaiting $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CAMPAGNE_WAITING_NOT_RESENT]);
  873.         $emailNoWorkflow $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CAMPAGNE_WAITING_NO_WORKFLOW]);
  874.         foreach ($listCampaignsWaitingNotResent as $campaign) {
  875.             if (sizeof($this->campaignService->getAllMissionsWithNoWorkflow($campaign)) > 0) {
  876.                 $this->sendEmailForAdmin($emailNoWorkflow$campaign);
  877.             } else {
  878.                 $this->sendEmailForAdmin($emailWaiting$campaign);
  879.             }
  880.         }
  881.     }
  882.     private function sendEmailForAdmin($email$campaign)
  883.     {
  884.          $admins $this->dynamicHostService->getMailAdmin();
  885.         foreach ($admins as $admin) {
  886.             $this->notificationService->create($email$admin->valuenullnullnull$campaign);
  887.         }
  888.     }
  889.     private function getResponsableForActionPause(Collection $missionParticipants)
  890.     {
  891.         foreach ($missionParticipants as $participant) {
  892.             if ($participant->getUser() === $this->security->getUser()) {
  893.                 return  $participant->getRole()->label();
  894.             }
  895.         }
  896.         return "Administrateur";
  897.     }
  898.     public function onCampaignEvaluation(CampaignEvaluationEvent $event)
  899.     {
  900.         $campaign $event->getCampaign();
  901.         if (!$campaign instanceof Campaign) {
  902.             return;
  903.         }
  904.         $alreadySent = [];
  905.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_DEMANDE_EVALUATION]);
  906.         if (null !== $email) {
  907.             foreach ($campaign->getMissions() as $mission) {
  908.                 $isMissionModified false;
  909.                 // if ($mission->getOldCommand() != null) {
  910.                 //     [$quatity, $price, $idProduct] = explode("-", $mission->getOldCommand());
  911.                 //     $isMissionModified =  $mission->getPrice() != $price || $mission->getQuantity() != $quatity || $mission->getProduct()->getId() != $idProduct ? true : false;
  912.                 // }
  913.                 if ($mission->getProduct()->getType() == ProductType::A_EVALUER || $isMissionModified) {
  914.                     foreach ($mission->getParticipants() as $participant) {
  915.                         if ($participant->getRole() === Role::ROLE_SUBCONTRACTOR && $participant->getEstimatedIncome() == null && !in_array($participant->getUser()->getEmail(), $alreadySent)) {
  916.                             $this->notificationService->create($email$participant->getUser(), null$campaign->getCompany(), null$campaign);
  917.                             $alreadySent[] = $participant->getUser()->getEmail();
  918.                         }
  919.                     }
  920.                     // $mission->setOldCommand("{$mission->getQuantity()}-{$mission->getPrice()}-{$mission->getProduct()->getId()}-{$mission->getDesiredDelivery()->getTimestamp()}");
  921.                     $this->entityManager->flush();
  922.                 }
  923.             }
  924.         }
  925.     }
  926.     public function onMessageSent(MessageSentEvent $event)
  927.     {
  928.         $alreadySentToUser = [];
  929.         try {
  930.             $message $event->getMessage();
  931.             $exclureUser $event->getListIdUserToExclure();
  932.             
  933.             if (!$message instanceof Message) {
  934.                 return;
  935.             }
  936.             foreach ($message->getCampaign()->getMissions() as $mission) {
  937.                 foreach ($mission->getParticipants() as $participant) {
  938.                     if ($participant->getUser()->getFreqNotification() == null || in_array($participant->getUser()->getId(), $exclureUser)) {
  939.                         continue;
  940.                     }
  941.                     if ($this->checkInCanSendNotificationForMyStep(participant$participantmessage$messagemission$mission) and !in_array($participant->getUser()->getId(),$alreadySentToUser)) {
  942.                         //vérifié si c'est un message de groupe d'abord et n'enovyer le message qu'au personne qui sont dans le groupe
  943.                         if (!is_null($message->getDiscussionGroup())) {
  944.                             foreach ($message->getDiscussionGroup()->getUsers() as $userInGroup) {
  945.                                 if ($userInGroup->getId() == $participant->getUser()->getId()) {
  946.                                      $notification = (new ChatNotification())
  947.                                         ->setSendAt((new \DateTimeImmutable())->add(new \DateInterval('PT5M')))
  948.                                         ->setSendTo($participant->getUser())
  949.                                         ->setTypeOfChat(Notification::NEW_COMMENT_IN_CHAT_FOR_STEP->value)
  950.                                         ->setAlreadyRead(0)
  951.                                         ->setMessage($message)
  952.                                         ->setCampaign($message->getCampaign());
  953.                                         $this->entityManager->persist($notification);
  954.                                         $alreadySentToUser = [...$alreadySentToUser,$participant->getUser()->getId()];
  955.                                 }
  956.                             }
  957.                         }else{
  958.                             $notification = (new ChatNotification())
  959.                                 ->setSendAt((new \DateTimeImmutable())->add(new \DateInterval('PT5M')))
  960.                                 ->setSendTo($participant->getUser())
  961.                                 ->setTypeOfChat(Notification::NEW_COMMENT_IN_CHAT_FOR_STEP->value)
  962.                                 ->setAlreadyRead(0)
  963.                                 ->setMessage($message)
  964.                                 ->setCampaign($message->getCampaign());
  965.                                 $this->entityManager->persist($notification);
  966.                                 $alreadySentToUser = [...$alreadySentToUser,$participant->getUser()->getId()];
  967.                         }
  968.                         
  969.                     }
  970.                     else if (
  971.                         $participant->getUser()->getId() != $message->getUser()->getId()
  972.                         &&
  973.                         $this->sendNotificationService->readyReceivedNofication($participant->getUser(), Notification::NEW_COMMENT_IN_CHAT->value)
  974.                         // && !$this->notificationRepository->checkIfNotificationAwaiting($participant->getUser(), $mission->getCampaign())
  975.                         && 
  976.                         !in_array($participant->getUser()->getId(),$alreadySentToUser)
  977.                     ) {
  978.                         //vérifié si c'est un message de groupe d'abord et n'enovyer le message qu'au personne qui sont dans le groupe
  979.                         if (!is_null($message->getDiscussionGroup())) {
  980.                             foreach ($message->getDiscussionGroup()->getUsers() as $userInGroup) {
  981.                                 if ($userInGroup->getId() == $participant->getUser()->getId()) {
  982.                                      $notification = (new ChatNotification())
  983.                                         ->setSendAt((new \DateTimeImmutable())->add(new \DateInterval('PT5M')))
  984.                                         ->setSendTo($participant->getUser())
  985.                                         ->setTypeOfChat(Notification::NEW_COMMENT_IN_CHAT->value)
  986.                                         ->setAlreadyRead(0)
  987.                                         ->setMessage($message)
  988.                                         ->setCampaign($message->getCampaign());
  989.                                         $this->entityManager->persist($notification);
  990.                                         $alreadySentToUser = [...$alreadySentToUser,$participant->getUser()->getId()];
  991.                                 }
  992.                             }
  993.                         }else{
  994.                             $notification = (new ChatNotification())
  995.                                 ->setSendAt((new \DateTimeImmutable())->add(new \DateInterval('PT5M')))
  996.                                 ->setSendTo($participant->getUser())
  997.                                 ->setTypeOfChat(Notification::NEW_COMMENT_IN_CHAT->value)
  998.                                 ->setAlreadyRead(0)
  999.                                 ->setMessage($message)
  1000.                                 ->setCampaign($message->getCampaign());
  1001.                                 $this->entityManager->persist($notification);
  1002.                                 $alreadySentToUser = [...$alreadySentToUser,$participant->getUser()->getId()];
  1003.                         }
  1004.                     }
  1005.                     
  1006.                 }
  1007.             }
  1008.             $this->entityManager->flush();
  1009.         } catch (\Throwable $th) {
  1010.     
  1011.              $adminMail $this->dynamicHostService->getMailAdmin();
  1012.             foreach ($adminMail as $admin) {
  1013.                 $this->notificationService->sendEmail(
  1014.                     new Address('caroline.b@my-flow.fr''myFlow'),
  1015.                     new Address($admin->value),
  1016.                     'Erreur dans le tchat notification',
  1017.                     $th->getMessage(),
  1018.                 );
  1019.             }
  1020.         }
  1021.     }
  1022.     private function checkInCanSendNotificationForMyStep(MissionParticipant $participantMessage $message$mission)
  1023.     {
  1024.         if (
  1025.             $participant->getUser()->getId() !== $message->getUser()->getId()
  1026.             && $this->sendNotificationService->readyReceivedNofication($participant->getUser(), Notification::NEW_COMMENT_IN_CHAT_FOR_STEP->value)
  1027.             && in_array(NotificationType::EMAIL->value$participant->getUser()->getNotificationType() ?? [])
  1028.             && !is_null($mission->getWorkflow())
  1029.             && !empty($mission->getWorkflow()->getActiveStep())
  1030.             && (
  1031.                 ($participant->getRole() === Role::ROLE_SUBCONTRACTOR && $mission->getWorkflow()->getActiveStep()->getManager() === Manager::JOB)
  1032.                 || (($participant->getRole() === Role::ROLE_VALIDATOR || $participant->getRole() === Role::ROLE_OBSERVER) && $mission->getWorkflow()->getActiveStep()->getManager() === Manager::CLIENT)
  1033.             )
  1034.         ) {
  1035.             return true;
  1036.         }
  1037.         return false;
  1038.     }
  1039.     public function onCampaignValidated(CampaignValidatedEvent $event)
  1040.     {
  1041.         $campaign $event->getCampaign();
  1042.         if (!$campaign instanceof Campaign) {
  1043.             return;
  1044.         }
  1045.         $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::NOTIFICATION_VALIDATION_RECAP_CAMPAGNE]);
  1046.          $admins $this->dynamicHostService->getMailAdmin();
  1047.         foreach ($admins as $admin) {
  1048.             $this->notificationService->create($email$admin->value$campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null$campaign);
  1049.         }
  1050.         
  1051.         $this->sendMailAddCampaign($campaign);
  1052.         
  1053.         $messageText "{$this->security->getUser()->getFirstname()} a approuvé la commande"
  1054.         $sameMessagesPersisted $this->messageRepository->findLastMessageByCampaign($campaign); 
  1055.         if((!is_null$sameMessagesPersisted) && $sameMessagesPersisted->getContent() != $messageText)  || is_null($sameMessagesPersisted)){
  1056.             $message = new Message(); 
  1057.             $message->setUser($this->security->getUser())
  1058.                     ->setCampaign($campaign)
  1059.                     ->setContent$messageText)
  1060.                     ->setUserListWhoRead([$this->security->getUser()->getId()])
  1061.                     ->setOrigin(3);
  1062.                 $this->entityManager->persist($message);
  1063.         }  
  1064.         
  1065.         $this->confidentialityService->addSignedContractForClient($this->security->getUser(), falsetruefalse);
  1066.         
  1067.     }
  1068.     public function onCampaignResend(CampaignResendEvent $event)
  1069.     {
  1070.         $campaign $event->getCampaign();
  1071.         foreach ($campaign->getMissions() as $mission) {
  1072.             $this->relanceService->sendMailForResponsableStep(mission$mission);
  1073.         }
  1074.     }
  1075.     private function sendMailAddCampaign(Campaign $campaign){
  1076.         $participants = [];
  1077.         $participantSendNotificatioPush = [];
  1078.        
  1079.         $message "";
  1080.         foreach ($campaign->getMissions() as $mission) {
  1081.               foreach ($mission->getParticipants() as $participant) {
  1082.                     if(in_array($participant->getRole()->value, ['ROLE_VALIDATOR','ROLE_OBSERVER']) && $participant->getUser()->getIsNewClient() === true && !in_array($participant->getUser()->getId(), $participants)){
  1083.                        
  1084.                         $this->sendEmailMission($participant->getUser());
  1085.                         $participants = [...$participants$participant->getUser()->getId()];
  1086.                         $participant->getUser()->setIsNewClient(false);
  1087.                         $this->entityManager->flush();
  1088.                     
  1089.                     }
  1090.                     if(!in_array($participant->getUser()->getId(), $participantSendNotificatioPush)){
  1091.                         $this->sendPushNotificationMessageCampaignActivated($campaign$participant);
  1092.                         $participantSendNotificatioPush = [...$participantSendNotificatioPush,$participant->getUser()->getId()]; 
  1093.                     }
  1094.               }
  1095.         }
  1096.        
  1097.           
  1098.         
  1099.     }
  1100.     private function sendPushNotificationMessageCampaignActivated(Campaign $campaign,  MissionParticipant $missionParticipant){
  1101.         
  1102.         $message ""
  1103.         $campainName $campaign->getName();
  1104.         
  1105.         if(in_array('ROLE_SUBCONTRACTOR'$missionParticipant->getUser()->getRoles())){
  1106.             $message "A toi de jouer, la mission suivante a été validée par {$campaign->getCompany()->getName() } : $campainName ";
  1107.         }
  1108.         elseif( in_array($missionParticipant->getRole()->value,  ['ROLE_VALIDATOR','ROLE_OBSERVER'])){
  1109.             $message "Bonne nouvelle ! Cette mission vient de démarrer : $campainName ";
  1110.         }
  1111.         else{
  1112.             $message 'Vous êtes invité à contribuer à une nouvelle mission. Connectez-vous pour plus de détails.';
  1113.         }
  1114.         $this->firebaseCloudeMessagingService->sendPushNotification($missionParticipant->getUser(), 'myFlow'$message);
  1115.     }
  1116.     private function sendEmailMission($user){
  1117.         $emailCreateCount $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CREATION_NOUVEAU_CLIENT]);
  1118.         $attendees $this->missionParticipantRepository->getMissionForUser($user);
  1119.         foreach ($attendees as $key => $attendee) {
  1120.             $user $attendee->getUser();
  1121.             $mission $attendee->getMission();
  1122.             $company $mission->getCampaign()->getCompany();
  1123.             $email $this->systemEmailRepository->findOneBy(['code' => SystemEmail::NEW_CLIENT_PARTICIPANT]);
  1124.             $this->notificationService->create($email$user$user$company$mission->getWorkflow()?->getActiveStep(), $mission->getCampaign());
  1125.         }
  1126.         $this->notificationService->create($emailCreateCount$user$user);
  1127.     }
  1128. }