src/EventSubscriber/ConfidentialitySubscriber.php line 62

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\ConfidentialityContract;
  4. use App\Enum\AdminMail;
  5. use App\Event\CompanyBirthdayArrivedEvent;
  6. use App\Event\CompanyUpdatedEvent;
  7. use App\Event\Confidentiality\ConfidentialityRequestAcceptedEvent;
  8. use App\Event\Confidentiality\ConfidentialityRequestButInfoCompanyNotCompletEvent;
  9. use App\Event\Confidentiality\ConfidentialityRequestEvent;
  10. use App\Repository\ConfidentialityContractRepository;
  11. use App\Repository\SystemEmailRepository;
  12. use App\Service\CampaignService;
  13. use App\Service\NotificationService;
  14. use App\Service\PdfService;
  15. use DateTimeImmutable;
  16. use Doctrine\ORM\EntityManagerInterface;
  17. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  18. use App\Service\DynamicHostService;
  19. class ConfidentialitySubscriber implements EventSubscriberInterface
  20. {
  21.     public function __construct(
  22.         private CampaignService $campaignService,
  23.         private NotificationService $notificationService,
  24.         private ConfidentialityContractRepository $confidentialityContractRepository,
  25.         private SystemEmailRepository $systemEmailRepository,
  26.         private PdfService $pdfService,
  27.         private EntityManagerInterface $entityManagerInterface,
  28.          private DynamicHostService $dynamicHostService,
  29.     ){}
  30.     public static function getSubscribedEvents()
  31.     {
  32.         return [
  33.             ConfidentialityRequestEvent::NAME=>'onConfidentialityRequest',
  34.             ConfidentialityRequestButInfoCompanyNotCompletEvent::NAME=>'onConfidentialityRequestButInfoCompanyNotComplet',
  35.             ConfidentialityRequestAcceptedEvent::NAME=>'onConfidentialityRequestAccepted',
  36.         ];
  37.     }
  38.     public function onConfidentialityRequestButInfoCompanyNotComplet(ConfidentialityRequestButInfoCompanyNotCompletEvent $event){
  39.         $email $this->systemEmailRepository->findOneBy(['code'=>'CONFIDENTIALITY_REQUEST_INFO_COMPANY_INCOMPLETE']);
  40.         $company $event->getCompany();
  41.         $admins $this->dynamicHostService->getMailAdmin();
  42.         foreach ($admins as $adminEmail) {
  43.             $this->notificationService->create($email,$adminEmail->value,$adminEmail->value$company); 
  44.         }
  45.     }
  46.     public function onConfidentialityRequest(ConfidentialityRequestEvent $event){
  47.         $user $event->getUser();
  48.         $company $event->getCompany();
  49.         $campaign $event->getCampaign();
  50.         
  51.         $email $this->systemEmailRepository->findOneBy(['code'=>'CONFIDENTIALITY_REQUEST']);
  52.         $this->notificationService->create($email,$user,$user$company,null$campaign);
  53.         
  54.     }
  55.     public function onConfidentialityRequestAccepted(ConfidentialityRequestAcceptedEvent $event){
  56.         $user $event->getFrom();
  57.         $clientValidators $event->getTos();
  58.         $company $event->getCompany();
  59.        
  60.         $linkMyFlowConfidentiality  $this->pdfService->generatePdfConfidentialMyFlow($company,  $clientValidators$user);
  61.         $linkSubcontractorConfidentiality$this->pdfService->generatePdfConfidentialSubcontractor($company$user$clientValidators);
  62.         $emailForClient$this->systemEmailRepository->findOneBy(['code'=>'CONFIDENTIALITY_REQUEST_ACCETED']);
  63.         $emailForSucontractor $this->systemEmailRepository->findOneBy(['code'=>'CONFIDENTIALITY_REQUEST_ACCETED_BY_SUBCONTRACTOR']);
  64.        
  65.         // send mail for user accepted confidentiality
  66.         $this->notificationService->create($emailForSucontractor,$user,$user$company,nullnullnullfalsefalsenullnullnullnullnullnull,null, [$linkSubcontractorConfidentiality]);
  67.         
  68.         if($company->getlinkMyFlowConfidentialityCommitment() == null){
  69.             $company->setlinkMyFlowConfidentialityCommitment($linkMyFlowConfidentiality);
  70.         }
  71.         $confidentialContractPersisted $this->confidentialityContractRepository->findOneBy(['user'=>$user'company'=>$company]);
  72.         if($confidentialContractPersisted instanceof ConfidentialityContract){
  73.             $confidentialContractPersisted->setLinkSubcontractor($linkSubcontractorConfidentiality)
  74.                                            ->setLinkMyFlow($linkMyFlowConfidentiality)
  75.                                            ->setCreatedAt(new \DateTimeImmutable());
  76.             $this->entityManagerInterface->flush();
  77.         }
  78.         else{
  79.             // send email for client if a user accept confidetiliaty, of the first demande
  80.             $linkAtttachements=[$linkSubcontractorConfidentiality,$linkMyFlowConfidentiality];
  81.             foreach ($clientValidators as $clientValiator) {
  82.                 $this->notificationService->create($emailForClient,$clientValiator,$clientValiator$company,nullnullnullfalsefalsenullnullnullnullnullnull,null$linkAtttachements$user->getFullName());
  83.             }
  84.             //add links in db
  85.             $confidentialContract = new ConfidentialityContract();
  86.             $confidentialContract->setUser($user)
  87.                                  ->setCompany($company)
  88.                                  ->setLinkSubcontractor($linkSubcontractorConfidentiality)
  89.                                  ->setLinkMyFlow($linkMyFlowConfidentiality);
  90.             $this->entityManagerInterface->persist($confidentialContract);
  91.             $this->entityManagerInterface->flush();
  92.         }
  93.     }
  94. }