<?php
namespace App\EventSubscriber;
use App\Entity\Campaign;
use App\Entity\ChatNotification;
use App\Event\Campaign\CampaignNoWorkflowEvent;
use App\EventSubscriber\Mission as MissionEvent;
use App\Entity\Message;
use App\Entity\Product;
use App\Entity\Workflow;
use App\Entity\Mission;
use App\Entity\MissionParticipant;
use App\Entity\NotificationToSend;
use App\Entity\SystemEmail;
use App\Entity\User;
use App\Enum\FreqNotification;
use App\Enum\Manager;
use App\Enum\Notification;
use App\Enum\NotificationType;
use App\Enum\Role;
use App\Event\Campaign\CampaignCancelledEvent;
use App\Event\Campaign\CampaignCreatedEvent;
use App\Event\User\UserRelaunchedEvent;
use App\Event\User\UserMissionAddedEvent;
use App\Event\Campaign\CampaignEvaluationEvent;
use App\Event\Campaign\CampaignModifiedEvent;
use App\Event\Campaign\CampaignValidatedEvent;
use App\Event\Campaign\CampaignDeletedEvent;
use App\Event\Campaign\CampaignWaitingEvent;
use App\Event\Campaign\CampaignResumeEvent;
use App\Event\Campaign\CampaignDeclineEvent;
use App\Event\Campaign\CampaignWaitingNotResentEvent;
use App\Event\Chat\MessageSentEvent;
use App\Repository\ChatNotificationRepository;
use App\Repository\MessageRepository;
use App\Repository\NotificationToSendRepository;
use App\Repository\SystemEmailRepository;
use App\Repository\UserRepository;
use App\Service\NotificationService;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bridge\Twig\Mime\NotificationEmail;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Routing\RouterInterface;
use App\Enum\AdminMail;
use App\Enum\ProductType;
use App\Event\Campaign\CampaignNotFinishedEvent;
use App\Event\Campaign\CampaignNotifyThatDeliveryDateChangeEvent;
use App\Event\Campaign\CampaignRecurrentEvent;
use App\Event\Campaign\DevisCreatedNotFinished;
use App\Event\Client\PremiumPackageEvent;
use App\Event\DevisCreatedWithNewClientEvent;
use App\Event\Campaign\CampaignResendEvent;
use App\Event\Campaign\CampaignValidationCancelledEvent;
use App\Event\Campaign\CampaignValidatedPerActivationEvent;
use App\Event\Campaign\CampaignWaitingValidationEvent;
use App\Event\Client\NoticeOfInsufficientBudgetEvent;
use App\Event\Confidentiality\ConfidentialityRequestEvent;
use App\Event\Confidentiality\ConfidentialityRequestButInfoCompanyNotCompletEvent;
use App\Event\SubContractor\SubContractorMissionAddedEvent;
use App\Repository\MissionParticipantRepository;
use App\Service\RelanceService;
use App\Service\WorkflowStepService;
use Doctrine\Common\Collections\Collection;
use Symfony\Component\Security\Core\Security;
use App\Service\SendNotificationService;
use App\Service\CampaignService;
use App\Service\ConfidentialityService;
use App\Service\FirebaseCloudeMessagingService;
use App\Service\PriceService;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use App\Service\DynamicHostService;
use App\Service\MissionService;
use App\Service\ChatService;
class CampaignSubscriber implements EventSubscriberInterface
{
public function __construct(
private RouterInterface $router,
private MailerInterface $mailer,
private ChatNotificationRepository $notificationRepository,
private EntityManagerInterface $entityManager,
private SystemEmailRepository $systemEmailRepository,
private UserRepository $userRepository,
private NotificationService $notificationService,
private NotificationToSendRepository $notificationToSendRepository,
private Security $security,
private WorkflowStepService $workflowStepService,
private RelanceService $relanceService,
private SendNotificationService $sendNotificationService,
private CampaignService $campaignService,
private ConfidentialityService $confidentialityService,
private EventDispatcherInterface $dispatcher,
private PriceService $priceService,
private MissionParticipantRepository $missionParticipantRepository,
private FirebaseCloudeMessagingService $firebaseCloudeMessagingService,
private DynamicHostService $dynamicHostService,
private MissionService $missionService,
private MessageRepository $messageRepository,
private ChatService $chatService,
) {
}
public static function getSubscribedEvents()
{
return [
CampaignValidatedEvent::NAME => 'onCampaignValidated',
CampaignCancelledEvent::NAME => 'onCampaignCancelled',
CampaignCreatedEvent::NAME => 'onCampaignCreated',
CampaignModifiedEvent::NAME => 'onCampaignModified',
CampaignWaitingEvent::NAME => 'onCampaignWaiting',
CampaignResumeEvent::NAME => 'onCampaignResume',
UserRelaunchedEvent::NAME => 'onUserRelaunched',
CampaignDeclineEvent::NAME => 'onCampaignDecline',
CampaignWaitingNotResentEvent::NAME => 'onCampaignWaitingNotResent',
CampaignEvaluationEvent::NAME => 'onCampaignEvaluation',
MessageSentEvent::NAME => 'onMessageSent',
CampaignNotFinishedEvent::NAME => 'onCampaignNotFinished',
DevisCreatedNotFinished::NAME => 'onDevisCreatedNotFinished',
PremiumPackageEvent::NAME => 'onClientGetPremiumPackage',
CampaignResendEvent::NAME => 'onCampaignResend',
CampaignNotifyThatDeliveryDateChangeEvent::NAME => "onDeliveryDateChange",
CampaignDeletedEvent::NAME => "onCampaignDeletedEvent",
CampaignRecurrentEvent::NAME => "onCampaignRecurrent",
CampaignValidationCancelledEvent::NAME => 'oncampaignValidationCancelled',
CampaignWaitingValidationEvent::NAME => 'onCampaignWaitingValidation',
CampaignValidatedPerActivationEvent::NAME => 'onCampaignValidatedPerActivation',
DevisCreatedWithNewClientEvent::NAME=>'onDevisCreatedWithNewClientEvent',
CampaignNoWorkflowEvent::NAME=>'onCampaignNoWorkflowEvent'
];
}
public function onCampaignNoWorkflowEvent(CampaignNoWorkflowEvent $event){
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_NO_WORKFLOW]);
$admins = $this->dynamicHostService->getMailAdmin();
$missions = $event->getMissions();
// desactivate permanantly
// foreach ($admins as $admin) {
// foreach ($missions as $key => $mission) {
// $this->notificationService->create( $email, $admin->value, null, null, null, $mission->getCampaign(), null, false, false, null, null, $mission, null, null, null, null, null, null, null);
// }
// }
}
public function onDevisCreatedWithNewClientEvent(DevisCreatedWithNewClientEvent $event){
$admins = $this->dynamicHostService->getMailAdmin();
$campaign = $event->getCampaign();
$filelinksUrl = $event->getFileLinks();
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DEVIS_CREATED_WITH_NEW_CLIENT]);
foreach ($admins as $key => $admin) {
$this->notificationService->create($email, $admin->value,null, $campaign->getOrderedBy()->getCompany(), null, $campaign, null, false, false, null, null, null, null, null, null, null, null, null, $filelinksUrl);
}
}
public function onCampaignValidatedPerActivation(CampaignValidatedPerActivationEvent $event){
$this->sendMailAddCampaign($event->getCampaign());
}
public function oncampaignValidationCancelled(CampaignValidationCancelledEvent $event){
$admins = $this->dynamicHostService->getMailAdmin();
$campaign = $event->getCampaign();
$user= $event->getUser();
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::VALIDATION_CANCELLED]);
foreach ($admins as $key => $admin) {
$this->notificationService->create($email, $admin->value,$user, $campaign->getOrderedBy()->getCompany(), null, $campaign);
}
}
public function onCampaignWaitingValidation(CampaignWaitingValidationEvent $event){
$campaign = $event->getCampaign();
$userAlreadSendEmail = [];
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CAMPAIGN_WAITING_VALIDATION]);
foreach ($campaign->getMissions() as $mission) {
foreach ($mission->getParticipants() as $participant) {
if(!in_array($participant->getUser()->getId(), $userAlreadSendEmail) && ($participant->getRole() == ROLE::ROLE_VALIDATOR || in_array('ROLE_CLIENT', $participant->getUser()->getRoles()))){
$this->notificationService->create($email, $participant->getUser(), $participant->getUser(), $campaign->getOrderedBy()->getCompany(), null, $campaign);
$userAlreadSendEmail=[...$userAlreadSendEmail,$participant->getUser()->getId() ];
}
}
}
}
public function onCampaignRecurrent(CampaignRecurrentEvent $event)
{
$campaign = $event->getCampaign();
$contcontactProjectIsOK = $event->contactProjectIsOK();
$isNewRecurrent = $event->isNew();
if (!$contcontactProjectIsOK) {
$product = new Product();
$product->setName("Espace de discussion");
$product->setFrontId(0);
$product->setType(ProductType::AU_TEMPS_PASSE);
$this->entityManager->persist($product);
$today = new \DateTime();
$mission = new Mission();
$workflow = $this->entityManager->getRepository(Workflow::class)->findOneBy(['template'=>1,'name'=>'Discussion']);
$newWorkflow = clone($workflow);
$reference = $campaign->getMissions()->first()!= null ? $campaign->getMissions()->first()->getReference($campaign->getOrderedBy()) : $this->missionService->generateReference();
$mission->setProduct($product)
->setQuantity(1)
->setDesiredDelivery($today->add(new \DateInterval('P1Y')))
->setState('provisional')
->setWorkflow($newWorkflow)
->setCampaign($campaign)
->setReference($reference);
;
$campaign->addMission($mission);
$this->entityManager->persist($campaign);
$this->entityManager->flush();
$this->missionService->addHistorique($mission, $campaign->getOrderedBy(), 'campaign_initiate_by_recurrent');
$contactProject = array_column($this->userRepository->getContactProjectByCompany($campaign->getCompany()),'id');
$contactProject = array_unique($contactProject);
// foreach ($contactProject as $contact) {
// $userContact = $this->userRepository->find($contact);
// $missionParticipantContactProject = (new MissionParticipant())
// ->setUser($userContact)
// ->setMission($mission)
// ->setRole(Role::PROJECT_CONTACT);
// $mission->addParticipant($missionParticipantContactProject);
// }
foreach ($campaign->getMissions() as $mission) {
//ajouter contact projet (commande via back)
$contactProject = array_unique($contactProject);
foreach ($contactProject as $contact) {
$userContact = $this->userRepository->find($contact);
$missionParticipantContactProject = (new MissionParticipant())
->setUser($userContact)
->setMission($mission)
->setRole(Role::PROJECT_CONTACT);
$mission->addParticipant($missionParticipantContactProject);
}
if (empty($contactProject)) {
$company = $this->dynamicHostService->getCompany();
$admins = $this->userRepository->getAllAdmin();
if (!is_null($company)) {//if company is not null so it is agency
$admins = $this->userRepository->getAdminAgencyByCompany($company);
}
foreach ($admins as $key => $admin) {
$missionParticipantContactProject = (new MissionParticipant())
->setUser($admin)
->setMission($mission)
->setRole(Role::PROJECT_CONTACT);
$mission->addParticipant($missionParticipantContactProject);
}
}
}
if (empty($contactProject)) {
$company = $this->dynamicHostService->getCompany($campaign?->getOrderedBy());
$admins = $this->userRepository->getAllAdmin();
if (!is_null($company)) {//if company is not null so it is agency
$admins = $this->userRepository->getAdminAgencyByCompany($company);
}
foreach ($admins as $key => $admin) {
$missionParticipantContactProject = (new MissionParticipant())
->setUser($admin)
->setMission($mission)
->setRole(Role::PROJECT_CONTACT);
$mission->addParticipant($missionParticipantContactProject);
}
}
//$campaign->addMission($mission);
$this->entityManager->persist($mission);
$this->entityManager->persist($campaign);
$this->entityManager->flush();
$this->campaignService->addDefaultClient($mission);
}
if($campaign->getRecurringState() == 'waiting_validation'){
$userAlreadSendEmail=[];
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::VALIDATION_RECURRENT_CAMPAING]);
foreach ($campaign->getMissions() as $mission) {
foreach ($mission->getParticipants() as $participant) {
if(!in_array($participant->getUser()->getId(), $userAlreadSendEmail) && ($participant->getRole() == ROLE::ROLE_VALIDATOR || in_array('ROLE_CLIENT', $participant->getUser()->getRoles()))){
$this->notificationService->create($email, $participant->getUser(), $participant->getUser(), $campaign->getOrderedBy()->getCompany(), null, $campaign);
$userAlreadSendEmail=[...$userAlreadSendEmail,$participant->getUser()->getId() ];
}
}
}
}else{
if ($isNewRecurrent) {
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::NEW_COMMAND_RECURRENT]);
} else {
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::COMMAND_RECURRENT]);
}
$this->notificationService->create($email, $campaign->getOrderedBy(), $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null, $campaign);
}
}
public function onCampaignDeletedEvent(CampaignDeletedEvent $event)
{
$campaign = $event->getCampaign();
$user = $event->getUser();
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CAMPAING_DELETE]);
$admins = $this->dynamicHostService->getMailAdmin();
foreach ($admins as $admin) {
$this->notificationService->create($email, $admin->value, $user, $user->getCompany(), null, $campaign);
}
return;
}
public function onClientGetPremiumPackage(PremiumPackageEvent $event)
{
$client = $event->getClient();
$admins = $this->dynamicHostService->getMailAdmin();
$otherEmail = $event->getEmailOther();
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MODIFICATION_INTERVENANT]);
foreach ($admins as $admin) {
$this->notificationService->create($email, $admin->value, $client, $client->getCompany(), null, null, null, false, false, $otherEmail);
}
return;
}
public function onDevisCreatedNotFinished(DevisCreatedNotFinished $event)
{
$campaign = $event->getCampaign();
$user = $event->getUser();
$admins = $this->dynamicHostService->getMailAdmin();
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DEMANDE_NON_TERMINER_CLIENT_DEVIS]);
foreach ($admins as $admin) {
$this->notificationService->create($email, $admin->value, $user, $user->getCompany(), null, $campaign);
}
return;
}
public function onCampaignNotFinished(CampaignNotFinishedEvent $event)
{
$campaign = $event->getCampaign();
$mission = $event->getMission();
$user = $event->getUser();
$admins = $this->dynamicHostService->getMailAdmin();
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DEMANDE_NON_TERMINER_CLIENT]);
foreach ($admins as $admin) {
$this->notificationService->create($email, $admin->value, $user, $user->getCompany(), null, $campaign);
}
return;
}
public function onCampaignCreated(CampaignCreatedEvent $event)
{
$allEmail=[];
$campaign = $event->getCampaign();
$type = $event->getType();
$contactProject = $event->getContactProject();
$createdInBack = $event->getCreatedInBack();
$alreadyClone = $event->alreadyClone();
$allUserInMission = $event->getListUser();
$isNewClientAdded = $event->isNewClientAdded();
$campaignTypeInitiation = '';
$launchJustOne = true;
if (!$campaign instanceof Campaign) {
return;
}
//if contactProject is empty search default contact projet in company
if (empty($contactProject) and !is_null($campaign?->getCompany()) /*and !$createdInBack*/) {
$contactProject = array_column($this->userRepository->getContactProjectByCompany($campaign->getCompany()),'id');
}
$admins = $this->dynamicHostService->getMailAdmin();
$alreadySent = [];
if ($campaign->getMissions()->count() === 0) {
if ($type == 'CREATION_DEVIS'){
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CREATION_DEVIS], [], $campaign->getOrderedBy());
}elseif($type =='CREATION_DEVIS_PUBLIC'){
$campaignTypeInitiation = 'devis_public';
if($isNewClientAdded){
$filelinksUrl = $event->getLinkAttachments();
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DEVIS_CREATED_WITH_NEW_CLIENT],[], $campaign->getOrderedBy());
foreach ($admins as $key => $admin) {
$this->notificationService->create($email, $admin->value,null, $campaign->getOrderedBy()->getCompany(), null, $campaign, null, false, false, null, null, null, null, null, null, null, null, null, $filelinksUrl);
}
$email = null;
}else{
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CREATION_DEVIS],[], $campaign->getOrderedBy());
}
}
else{
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DEMANDE_DEVIS_NOTIF_ADMIN],[], $campaign->getOrderedBy());
}
} else {
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CREATION_CAMPAGNE],[], $campaign->getOrderedBy());
}
if($type == 'CREATION_DEVIS'){
$campaignTypeInitiation = 'campaign_initiate_by_tunnel_devis';
}
elseif($type == 'CREATION_DEVIS_PUBLIC'){
$campaignTypeInitiation = 'devis_public';
}
elseif($type == 'CREER_PAR_ADMIN'){
$campaignTypeInitiation = 'campaign_initiate_by_admin';
}
elseif($type == 'TUNNEL_MAIL'){
$campaignTypeInitiation = 'campaign_initiate_by_mail';
}
elseif($type == 'TUNNEL_COMMANDE'){
$campaignTypeInitiation = 'campaign_initiate_by_tunnel_client';
}else{
$campaignTypeInitiation = 'campaign_initiate_by_tunnel_client';
}
if (null !== $email) {
$files = (false !== $campaign->getMissions()->first()) ? $campaign->getMissions()->first()->getFileMissions() : null;
$allEmail[] = $email;
foreach ($admins as $admin) {
$this->notificationService->create($email, $admin->value, $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null, $campaign, $files);
}
}
foreach ($campaign->getMissions() as $mission) {
//ajouter contact projet (commande via back)
$contactProject = array_unique($contactProject);
if (!$alreadyClone) {
foreach ($contactProject as $contact) {
$userContact = $this->userRepository->find($contact);
$missionParticipantContactProject = (new MissionParticipant())
->setUser($userContact)
->setMission($mission)
->setRole(Role::PROJECT_CONTACT);
$mission->addParticipant($missionParticipantContactProject);
}
if (empty($contactProject)) {
$company = $this->dynamicHostService->getCompany();
$admins = $this->userRepository->getAllAdmin();
if (!is_null($company)) {//if company is not null so it is agency
$admins = $this->userRepository->getAdminAgencyByCompany($company);
}
foreach ($admins as $key => $admin) {
$missionParticipantContactProject = (new MissionParticipant())
->setUser($admin)
->setMission($mission)
->setRole(Role::PROJECT_CONTACT);
$mission->addParticipant($missionParticipantContactProject);
}
}
}
$count = 0;
foreach ($mission->getParticipants() as $participant) {
if (in_array('ROLE_BOT', $participant->getUser()->getRoles())) {
$admins = $this->dynamicHostService->getMailAdmin();
$emailForBot = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::PRESTATAIRE_ASSOCIE],[], $campaign->getOrderedBy());
$allEmail[] = $emailForBot;
foreach ($admins as $admin) {
$this->notificationService->create($emailForBot, $admin->value, $participant->getUser(), $mission->getCampaign()->getOrderedBy()->getCompany(), null, $campaign);
}
} else {
if ($participant->getRole() === Role::ROLE_SUBCONTRACTOR) {
$count++;
if (!in_array($participant->getUser()->getEmail(), $alreadySent)) {
$event = new SubContractorMissionAddedEvent($participant->getUser(), $mission);
$this->dispatcher->dispatch($event, SubContractorMissionAddedEvent::NAME);
$alreadySent[]=$participant->getUser()->getEmail();
}
}
$participant->getUser()->setAutorizationDateAt(new \DateTimeImmutable());
$this->entityManager->flush();
}
}
if ($count === 0 && true === $launchJustOne) {
$launchJustOne = false;
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_SANS_PARTENAIRE],[], $campaign->getOrderedBy());
$allEmail[] = $email;
if (null !== $email) {
$admins = $this->dynamicHostService->getMailAdmin();
foreach ($admins as $admin) {
$this->notificationService->create($email, $admin->value, $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null, $campaign);
}
if (null !== $email->getSmsContent()) {
$admins = $this->dynamicHostService->getMailAdmin();
foreach ($admins as $admin) {
$this->notificationService->create($email, $admin->value, $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null, $campaign, null, true);
}
}
}
}
$this->campaignService->addHistoriqueMission(mission: $mission, user: $campaign->getOrderedBy(), action: "new_project");
$validators = $this->campaignService->getValidatorMissionList(mission: $mission);
if (sizeof($validators)) {
$this->campaignService->addHistoriqueMission(mission: $mission, user: $campaign->getOrderedBy(), action: "add_validator_list", option: $validators);
}
}
if ($campaign->getMissions()->count() === 0) {
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DEMANDE_DEVIS_NOTIF_CLIENT],[], $campaign->getOrderedBy());
} elseif ($mission->getProduct()->getType() == ProductType::A_EVALUER) {
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CLIENT_CAMPAGNE_A_EVALUER_CREEE],[], $campaign->getOrderedBy());
} elseif( $type != 'CREATION_DEVIS_PUBLIC') {
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CLIENT_CAMPAGNE_CREEE],[], $campaign->getOrderedBy());
}
if (null !== $email && !in_array($campaign->getOrderedBy()->getRoles()[0], ['ROLE_ADMIN', 'ROLE_ADMIN_AGENCY', 'ROLE_MANAGER'])) {
$this->notificationService->create($email, $campaign->getOrderedBy(), $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null, $campaign);
}
try {
$creditHistory = $campaign->getCreditHistory();
$currentBlance = $creditHistory->getCurrentBalance();
$totalPrice = $this->priceService->totalPriceCampaign($campaign, false);
if($currentBlance - $totalPrice < 0) {
$event = new NoticeOfInsufficientBudgetEvent($campaign->getCompany(), $campaign);
$this->dispatcher->dispatch($event, NoticeOfInsufficientBudgetEvent::NAME);
}
} catch (\Throwable $th) {
}
if (!$alreadyClone) {
$product = new Product();
$product->setName("Espace de discussion");
$product->setFrontId(0);
$product->setType(ProductType::AU_TEMPS_PASSE);
$this->entityManager->persist($product);
$today = new \DateTime();
$mission = new Mission();
$workflow = $this->entityManager->getRepository(Workflow::class)->findOneBy(['template'=>1,'name'=>'Discussion']);
$newWorkflow = clone($workflow);
$newWorkflow->setTemplate(0);
$reference = $campaign->getMissions()->first()!= null ? $campaign->getMissions()->first()->getReference() : $this->missionService->generateReference($campaign?->getOrderedBy());
$mission->setProduct($product)
->setQuantity(1)
->setDesiredDelivery($today->add(new \DateInterval('P1Y')))
->setState('provisional')
->setWorkflow($newWorkflow)
->setCampaign($campaign)
->setReference($reference);
;
$contactProject = array_unique($contactProject);
foreach ($contactProject as $contact) {
$userContact = $this->userRepository->find($contact);
$missionParticipantContactProject = (new MissionParticipant())
->setUser($userContact)
->setMission($mission)
->setRole(Role::PROJECT_CONTACT);
$mission->addParticipant($missionParticipantContactProject);
}
if(!empty($allUserInMission)){
$ids = [];
foreach ($allUserInMission as $key => $users) {
foreach ($users as $user) {
$missionParticipant = new MissionParticipant();
$missionParticipant->setMission($mission)->setUser($user);
if (!in_array($user->getId(),$ids)) {
if ($key == "observerListUser") {
$missionParticipant->setRole(Role::ROLE_OBSERVER);
}else if ($key == "validatorListUser") {
$missionParticipant->setRole(Role::ROLE_VALIDATOR);
}
else if ($key == "observerExtenalListUser") {
$missionParticipant->setRole(Role::ROLE_OBSERVER_EXTERNAL);
}
else if ($key == "validatorExternalListUser") {
$missionParticipant->setRole(Role::ROLE_VALIDATOR_EXTERNAL);
}
else if ($key == "allContactProject") {
$missionParticipant->setRole(Role::PROJECT_CONTACT);
}else if ($key == "allSubContractor") {
$missionParticipant->setRole(Role::ROLE_SUBCONTRACTOR);
//envoie de mail au participant
$event = new SubContractorMissionAddedEvent($missionParticipant->getUser(), $mission);
$this->dispatcher->dispatch($event, SubContractorMissionAddedEvent::NAME);
}
}
$mission->addParticipant($missionParticipant);
$ids[] = $user->getId();
}
}
}
// $this->missionService->addHistorique($mission, $campaign->getOrderedBy(), 'campaign_initiate_by_mail');
if (empty($contactProject)) {
$company = $this->dynamicHostService->getCompany();
$admins = $this->userRepository->getAllAdmin();
if (!is_null($company)) {//if company is not null so it is agency
$admins = $this->userRepository->getAdminAgencyByCompany($company);
}
foreach ($admins as $key => $admin) {
$missionParticipantContactProject = (new MissionParticipant())
->setUser($admin)
->setMission($mission)
->setRole(Role::PROJECT_CONTACT);
$mission->addParticipant($missionParticipantContactProject);
}
}
//add all contact
$this->entityManager->persist($mission);
$this->entityManager->persist($campaign);
$this->entityManager->flush();
$this->campaignService->addDefaultClient($mission);
$this->confidentialityService->addSignedContractForClient($campaign->getOrderedBy(), false, true, false);
if(!empty($campaignTypeInitiation)){
$this->missionService->addHistorique($mission, $campaign->getOrderedBy(), $campaignTypeInitiation);
}
}
//Send mail to contact project if mission are created
$emailAdmin= [];
foreach ($admins as $admin) {
if ($admin instanceof User) {
$emailAdmin[] = $admin->getEmail();
}else{
$emailAdmin[] = $admin->value;
}
}
foreach ($mission->getParticipants() as $participant) {
if ($participant->getRole() === Role::PROJECT_CONTACT and !in_array($participant->getUser()->getEmail(),$emailAdmin)) {
foreach ($allEmail as $email) {
$this->notificationService->create($email, $participant->getUser()->getEmail(), $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null, $campaign);
}
}
}
$this->chatService->publicOnCampaignUpdate();
}
public function onUserRelaunched(UserRelaunchedEvent $event)
{
$campaign = $event->getCampaign();
$participant = $event->getParticipant();
if (!$campaign instanceof Campaign) {
return;
}
$emailClient = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::INDIVIDUEL_RELANCE_CLIENT]);
$emailSub = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::INDIVIDUEL_RELANCE_SOUS_TRAITANT]);
if ($participant->getRole() === Role::ROLE_SUBCONTRACTOR) {
if (null !== $emailSub) {
$this->notificationService->create($emailSub, $participant->getUser(), $participant->getUser(), $campaign->getCompany(), null, $campaign);
}
}
else {
if (null !== $emailClient){
$this->notificationService->create($emailClient, $participant->getUser(), $participant->getUser(), $campaign->getCompany(), null, $campaign);
}
}
}
public function onCampaignCancelled(CampaignCancelledEvent $event)
{
$campaign = $event->getCampaign();
if (!$campaign instanceof Campaign) {
return;
}
$userAlreadyHaveMail = [];
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CAMPAING_CANCELLED]);
$admins = $this->dynamicHostService->getMailAdmin();
if (null !== $email) {
foreach ($admins as $admin) {
$this->notificationService->create($email, $admin->value, $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null, $campaign);
}
}
$emailClient = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CLIENT_CAMPAING_CANCELLED]);
$emailSub = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::SOUS_TRAITANT_CAMPAING_CANCELLED]);
foreach ($campaign->getMissions() as $mission) {
foreach ($mission->getParticipants() as $participant) {
if ($participant->getRole() === Role::ROLE_SUBCONTRACTOR) {
if (null !== $emailSub) {
if ((!in_array($participant->getUser()->getId(), $userAlreadyHaveMail))) {
$this->notificationService->create($emailSub, $participant->getUser(), $participant->getUser(), $campaign->getCompany(), null, $mission->getCampaign());
}
$userAlreadyHaveMail[] = $participant->getUser()->getId();
}
}
if ($participant->getRole() === Role::ROLE_VALIDATOR || $participant->getRole() === Role::ROLE_OBSERVER || $participant->getRole() === Role::ROLE_VALIDATOR_EXTERNAL || $participant->getRole() === Role::ROLE_OBSERVER_EXTERNAL ) {
if (null !== $emailClient){
if ((!in_array($participant->getUser()->getId(), $userAlreadyHaveMail))) {
$this->notificationService->create($emailClient, $participant->getUser(), $participant->getUser(), $campaign->getCompany(), null, $mission->getCampaign());
$userAlreadyHaveMail[] = $participant->getUser()->getId();
}
}
}
}
}
}
public function onCampaignResume(CampaignResumeEvent $event)
{
$campaign = $event->getCampaign();
if (!$campaign instanceof Campaign) {
return;
}
$emailSub = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::SOUS_TRAITANT_CAMPAING_RESUMED]);
$emailClient = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CLIENT_CAMPAING_RESUMED]);
foreach ($campaign->getMissions() as $mission) {
foreach ($mission->getParticipants() as $participant) {
if ($participant->getRole() === Role::ROLE_SUBCONTRACTOR) {
if (null !== $emailSub){
$listResponsableMission = $this->workflowStepService->getResponsableStepByMission($mission);
$this->notificationService->create($emailSub, $participant->getUser(), $participant->getUser(), $campaign->getCompany(), null, $mission->getCampaign());
}
}
if ($participant->getRole() === Role::ROLE_VALIDATOR || $participant->getRole() === Role::ROLE_OBSERVER || $participant->getRole() === Role::ROLE_VALIDATOR_EXTERNAL || $participant->getRole() === Role::ROLE_OBSERVER_EXTERNAL) {
if (null !== $emailClient){
$listResponsableMission = $this->workflowStepService->getResponsableStepByMission($mission);
$this->notificationService->create($emailClient, $participant->getUser(), $participant->getUser(), $campaign->getCompany(), null, $mission->getCampaign());
}
}
}
}
}
public function onCampaignModified(CampaignModifiedEvent $event)
{
$campaign = $event->getCampaign();
if (!$campaign instanceof Campaign) {
return;
}
$notification = (new NotificationEmail())
->to(new Address($campaign->getOrderedBy()->getEmail()))
->subject('Votre commande ' . $campaign->getName() . ' a été modifiée')
->content('
<p>Bonjour,</p>
<p>Votre commande "' . $campaign->getName() . '" vient d\'être modifée.</p>
<p>L\'équipe MyFlow</p>
')
->action('Accéder au tableau de bord', $this->router->generate('mission_index', [], UrlGeneratorInterface::ABSOLUTE_URL))
->markAsPublic();
$this->mailer->send($notification);
}
public function onDeliveryDateChange(CampaignNotifyThatDeliveryDateChangeEvent $event)
{
$campaign = $event->getCampaign();
$mission = $event->getMission();
$to = [];
$emailSysteme = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::DATE_DE_LIVRAISON_CHANGE]);
foreach ($campaign->getCompany()->getUsers() as $user) {
if (!(in_array("ROLE_ADMIN", $user->getRoles()) || in_array("ROLE_SUBCONTRACTOR", $user->getRoles())) && !in_array($user->getEmail(), $to)) {
$to[] = $user->getEmail();
$this->notificationService->create(
$emailSysteme,
$user->getEmail(),
$user->getEmail(),
$campaign->getCompany(),
null,
null,
null,
false,
false,
null,
null,
$mission
);
}
}
}
public function onCampaignWaiting(CampaignWaitingEvent $event)
{
$campaign = $event->getCampaign();
$ids = [];
if (!$campaign instanceof Campaign) {
return;
}
$userAlreadyHaveMail = [];
$admins = $this->dynamicHostService->getMailAdmin();
if ($event->getSystemEmail()) {
$emailForClient = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_EN_PAUSE]);
$emailForSubcontractor = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::EMAIL_PAUSE_FOR_SUBCONTRACTOR]);
$emailForAdmin = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::EMAIL_PAUSE_FOR_ADMIN]);
//email envoyé aux sous-traitants et à celui qui la commandée
$isSendToAdmin = false;
foreach ($campaign->getMissions() as $mission) {
$responsable = $this->getResponsableForActionPause($mission->getParticipants());
foreach ($mission->getParticipants() as $participant) {
if ($participant->getUser() === $this->security->getUser()) {
$responsable = $participant->getRole()->label();
}
if ($participant->getRole() === Role::ROLE_SUBCONTRACTOR) {
if ((!in_array($participant->getUser()->getId(), $userAlreadyHaveMail))) {
$this->notificationService->create($emailForSubcontractor, $participant->getUser(), $participant->getUser(), $campaign->getCompany(), null, $campaign, null, false, false, null, $responsable);
}
$userAlreadyHaveMail[] = $participant->getUser()->getId();
}
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))) {
$this->notificationService->create($emailForClient, $participant->getUser(), $participant->getUser(), $campaign->getCompany(), null, $campaign, null, false, false, null, $responsable);
$userAlreadyHaveMail[] = $participant->getUser()->getId();
}
}
if (!$isSendToAdmin) {
foreach ($admins as $admin) {
if((!in_array($participant->getUser()->getId(), $userAlreadyHaveMail))){
$this->notificationService->create($emailForAdmin, $admin->value, $admin->value, $campaign->getCompany(), null, $campaign, null, false, false, null, $responsable);
}
$userAlreadyHaveMail[] = $participant->getUser()->getId();
}
$isSendToAdmin = true;
}
}
} else {
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::RESOUMISSION_PANIER]);
if (null !== $email) {
foreach ($campaign->getMissions() as $mission) {
foreach ($mission->getParticipants() as $participant) {
$userId = $participant->getUser()->getId();
if ($participant->getRole() == Role::ROLE_VALIDATOR and !in_array($userId, $ids)) {
$this->notificationService->create($email, $participant->getUser(), $participant->getUser(), $participant->getUser()->getCompany(), null, $campaign);
$ids[] = $userId;
}
}
}
$this->notificationService->create($email, $campaign->getOrderedBy(), $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null, $campaign);
}
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::RESOUMISSION_PANIER_ADMIN]);
foreach ($admins as $admin) {
$this->notificationService->create($email, $admin->value, $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null, $campaign);
}
}
}
public function onCampaignDecline(CampaignDeclineEvent $event)
{
$campaign = $event->getCampaign();
if (!$campaign instanceof Campaign) {
return;
}
$user = $event->getUser();
$admins = $this->dynamicHostService->getMailAdmin();
if ($event->getSystemEmail()) {
$emailForSubcontractor = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_REFUSEE_INTERVENANT]);
$emailForAdmin = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_REFUSEE_ADMIN]);
$this->notificationService->create($emailForSubcontractor,$user, $user, $campaign->getCompany(), null, $campaign, null, false, false, null, null);
foreach ($admins as $admin) {
$this->notificationService->create($emailForAdmin, $admin->value, $user, $campaign->getCompany(), null, $campaign, null, false, false, null, null);
}
}
}
public function onCampaignWaitingNotResent(CampaignWaitingNotResentEvent $event)
{
$listCampaignsWaitingNotResent = $event->getListCampaignsWaitingNotResent();
if (empty($listCampaignsWaitingNotResent)) {
return;
}
$emailWaiting = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CAMPAGNE_WAITING_NOT_RESENT]);
$emailNoWorkflow = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CAMPAGNE_WAITING_NO_WORKFLOW]);
foreach ($listCampaignsWaitingNotResent as $campaign) {
if (sizeof($this->campaignService->getAllMissionsWithNoWorkflow($campaign)) > 0) {
$this->sendEmailForAdmin($emailNoWorkflow, $campaign);
} else {
$this->sendEmailForAdmin($emailWaiting, $campaign);
}
}
}
private function sendEmailForAdmin($email, $campaign)
{
$admins = $this->dynamicHostService->getMailAdmin();
foreach ($admins as $admin) {
$this->notificationService->create($email, $admin->value, null, null, null, $campaign);
}
}
private function getResponsableForActionPause(Collection $missionParticipants)
{
foreach ($missionParticipants as $participant) {
if ($participant->getUser() === $this->security->getUser()) {
return $participant->getRole()->label();
}
}
return "Administrateur";
}
public function onCampaignEvaluation(CampaignEvaluationEvent $event)
{
$campaign = $event->getCampaign();
if (!$campaign instanceof Campaign) {
return;
}
$alreadySent = [];
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::MISSION_DEMANDE_EVALUATION]);
if (null !== $email) {
foreach ($campaign->getMissions() as $mission) {
$isMissionModified = false;
// if ($mission->getOldCommand() != null) {
// [$quatity, $price, $idProduct] = explode("-", $mission->getOldCommand());
// $isMissionModified = $mission->getPrice() != $price || $mission->getQuantity() != $quatity || $mission->getProduct()->getId() != $idProduct ? true : false;
// }
if ($mission->getProduct()->getType() == ProductType::A_EVALUER || $isMissionModified) {
foreach ($mission->getParticipants() as $participant) {
if ($participant->getRole() === Role::ROLE_SUBCONTRACTOR && $participant->getEstimatedIncome() == null && !in_array($participant->getUser()->getEmail(), $alreadySent)) {
$this->notificationService->create($email, $participant->getUser(), null, $campaign->getCompany(), null, $campaign);
$alreadySent[] = $participant->getUser()->getEmail();
}
}
// $mission->setOldCommand("{$mission->getQuantity()}-{$mission->getPrice()}-{$mission->getProduct()->getId()}-{$mission->getDesiredDelivery()->getTimestamp()}");
$this->entityManager->flush();
}
}
}
}
public function onMessageSent(MessageSentEvent $event)
{
$alreadySentToUser = [];
try {
$message = $event->getMessage();
$exclureUser = $event->getListIdUserToExclure();
if (!$message instanceof Message) {
return;
}
foreach ($message->getCampaign()->getMissions() as $mission) {
foreach ($mission->getParticipants() as $participant) {
if ($participant->getUser()->getFreqNotification() == null || in_array($participant->getUser()->getId(), $exclureUser)) {
continue;
}
if ($this->checkInCanSendNotificationForMyStep(participant: $participant, message: $message, mission: $mission) and !in_array($participant->getUser()->getId(),$alreadySentToUser)) {
//vérifié si c'est un message de groupe d'abord et n'enovyer le message qu'au personne qui sont dans le groupe
if (!is_null($message->getDiscussionGroup())) {
foreach ($message->getDiscussionGroup()->getUsers() as $userInGroup) {
if ($userInGroup->getId() == $participant->getUser()->getId()) {
$notification = (new ChatNotification())
->setSendAt((new \DateTimeImmutable())->add(new \DateInterval('PT5M')))
->setSendTo($participant->getUser())
->setTypeOfChat(Notification::NEW_COMMENT_IN_CHAT_FOR_STEP->value)
->setAlreadyRead(0)
->setMessage($message)
->setCampaign($message->getCampaign());
$this->entityManager->persist($notification);
$alreadySentToUser = [...$alreadySentToUser,$participant->getUser()->getId()];
}
}
}else{
$notification = (new ChatNotification())
->setSendAt((new \DateTimeImmutable())->add(new \DateInterval('PT5M')))
->setSendTo($participant->getUser())
->setTypeOfChat(Notification::NEW_COMMENT_IN_CHAT_FOR_STEP->value)
->setAlreadyRead(0)
->setMessage($message)
->setCampaign($message->getCampaign());
$this->entityManager->persist($notification);
$alreadySentToUser = [...$alreadySentToUser,$participant->getUser()->getId()];
}
}
else if (
$participant->getUser()->getId() != $message->getUser()->getId()
&&
$this->sendNotificationService->readyReceivedNofication($participant->getUser(), Notification::NEW_COMMENT_IN_CHAT->value)
// && !$this->notificationRepository->checkIfNotificationAwaiting($participant->getUser(), $mission->getCampaign())
&&
!in_array($participant->getUser()->getId(),$alreadySentToUser)
) {
//vérifié si c'est un message de groupe d'abord et n'enovyer le message qu'au personne qui sont dans le groupe
if (!is_null($message->getDiscussionGroup())) {
foreach ($message->getDiscussionGroup()->getUsers() as $userInGroup) {
if ($userInGroup->getId() == $participant->getUser()->getId()) {
$notification = (new ChatNotification())
->setSendAt((new \DateTimeImmutable())->add(new \DateInterval('PT5M')))
->setSendTo($participant->getUser())
->setTypeOfChat(Notification::NEW_COMMENT_IN_CHAT->value)
->setAlreadyRead(0)
->setMessage($message)
->setCampaign($message->getCampaign());
$this->entityManager->persist($notification);
$alreadySentToUser = [...$alreadySentToUser,$participant->getUser()->getId()];
}
}
}else{
$notification = (new ChatNotification())
->setSendAt((new \DateTimeImmutable())->add(new \DateInterval('PT5M')))
->setSendTo($participant->getUser())
->setTypeOfChat(Notification::NEW_COMMENT_IN_CHAT->value)
->setAlreadyRead(0)
->setMessage($message)
->setCampaign($message->getCampaign());
$this->entityManager->persist($notification);
$alreadySentToUser = [...$alreadySentToUser,$participant->getUser()->getId()];
}
}
}
}
$this->entityManager->flush();
} catch (\Throwable $th) {
$adminMail = $this->dynamicHostService->getMailAdmin();
foreach ($adminMail as $admin) {
$this->notificationService->sendEmail(
new Address('caroline.b@my-flow.fr', 'myFlow'),
new Address($admin->value),
'Erreur dans le tchat notification',
$th->getMessage(),
);
}
}
}
private function checkInCanSendNotificationForMyStep(MissionParticipant $participant, Message $message, $mission)
{
if (
$participant->getUser()->getId() !== $message->getUser()->getId()
&& $this->sendNotificationService->readyReceivedNofication($participant->getUser(), Notification::NEW_COMMENT_IN_CHAT_FOR_STEP->value)
&& in_array(NotificationType::EMAIL->value, $participant->getUser()->getNotificationType() ?? [])
&& !is_null($mission->getWorkflow())
&& !empty($mission->getWorkflow()->getActiveStep())
&& (
($participant->getRole() === Role::ROLE_SUBCONTRACTOR && $mission->getWorkflow()->getActiveStep()->getManager() === Manager::JOB)
|| (($participant->getRole() === Role::ROLE_VALIDATOR || $participant->getRole() === Role::ROLE_OBSERVER) && $mission->getWorkflow()->getActiveStep()->getManager() === Manager::CLIENT)
)
) {
return true;
}
return false;
}
public function onCampaignValidated(CampaignValidatedEvent $event)
{
$campaign = $event->getCampaign();
if (!$campaign instanceof Campaign) {
return;
}
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::NOTIFICATION_VALIDATION_RECAP_CAMPAGNE]);
$admins = $this->dynamicHostService->getMailAdmin();
foreach ($admins as $admin) {
$this->notificationService->create($email, $admin->value, $campaign->getOrderedBy(), $campaign->getOrderedBy()->getCompany(), null, $campaign);
}
$this->sendMailAddCampaign($campaign);
$messageText = "{$this->security->getUser()->getFirstname()} a approuvé la commande";
$sameMessagesPersisted = $this->messageRepository->findLastMessageByCampaign($campaign);
if((!is_null( $sameMessagesPersisted) && $sameMessagesPersisted->getContent() != $messageText) || is_null($sameMessagesPersisted)){
$message = new Message();
$message->setUser($this->security->getUser())
->setCampaign($campaign)
->setContent( $messageText)
->setUserListWhoRead([$this->security->getUser()->getId()])
->setOrigin(3);
$this->entityManager->persist($message);
}
$this->confidentialityService->addSignedContractForClient($this->security->getUser(), false, true, false);
}
public function onCampaignResend(CampaignResendEvent $event)
{
$campaign = $event->getCampaign();
foreach ($campaign->getMissions() as $mission) {
$this->relanceService->sendMailForResponsableStep(mission: $mission);
}
}
private function sendMailAddCampaign(Campaign $campaign){
$participants = [];
$participantSendNotificatioPush = [];
$message = "";
foreach ($campaign->getMissions() as $mission) {
foreach ($mission->getParticipants() as $participant) {
if(in_array($participant->getRole()->value, ['ROLE_VALIDATOR','ROLE_OBSERVER']) && $participant->getUser()->getIsNewClient() === true && !in_array($participant->getUser()->getId(), $participants)){
$this->sendEmailMission($participant->getUser());
$participants = [...$participants, $participant->getUser()->getId()];
$participant->getUser()->setIsNewClient(false);
$this->entityManager->flush();
}
if(!in_array($participant->getUser()->getId(), $participantSendNotificatioPush)){
$this->sendPushNotificationMessageCampaignActivated($campaign, $participant);
$participantSendNotificatioPush = [...$participantSendNotificatioPush,$participant->getUser()->getId()];
}
}
}
}
private function sendPushNotificationMessageCampaignActivated(Campaign $campaign, MissionParticipant $missionParticipant){
$message = "";
$campainName = $campaign->getName();
if(in_array('ROLE_SUBCONTRACTOR', $missionParticipant->getUser()->getRoles())){
$message = "A toi de jouer, la mission suivante a été validée par {$campaign->getCompany()->getName() } : $campainName ";
}
elseif( in_array($missionParticipant->getRole()->value, ['ROLE_VALIDATOR','ROLE_OBSERVER'])){
$message = "Bonne nouvelle ! Cette mission vient de démarrer : $campainName ";
}
else{
$message = 'Vous êtes invité à contribuer à une nouvelle mission. Connectez-vous pour plus de détails.';
}
$this->firebaseCloudeMessagingService->sendPushNotification($missionParticipant->getUser(), 'myFlow', $message);
}
private function sendEmailMission($user){
$emailCreateCount = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::CREATION_NOUVEAU_CLIENT]);
$attendees = $this->missionParticipantRepository->getMissionForUser($user);
foreach ($attendees as $key => $attendee) {
$user = $attendee->getUser();
$mission = $attendee->getMission();
$company = $mission->getCampaign()->getCompany();
$email = $this->systemEmailRepository->findOneBy(['code' => SystemEmail::NEW_CLIENT_PARTICIPANT]);
$this->notificationService->create($email, $user, $user, $company, $mission->getWorkflow()?->getActiveStep(), $mission->getCampaign());
}
$this->notificationService->create($emailCreateCount, $user, $user);
}
}