src/Service/Notification.php line 81

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\Historique;
  4. use App\Entity\InfosSuivi;
  5. use App\Entity\Lot;
  6. use App\Entity\Programme;
  7. use App\Entity\Prospect;
  8. use App\Entity\Impression;
  9. use App\Entity\Utilisateur;
  10. use App\Repository\ProspectRepository;
  11. use Symfony\Component\Mime\Email;
  12. use Symfony\Component\Mime\Address;
  13. use App\Repository\UtilisateurRepository;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Doctrine\Persistence\ManagerRegistry;
  16. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  17. use Symfony\Component\HttpFoundation\Cookie;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\Mailer\MailerInterface;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Contracts\Translation\TranslatorInterface;
  22. use Symfony\Component\DependencyInjection\ContainerInterface;
  23. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  24. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  25. class Notification
  26. {
  27.     protected $doctrine;
  28.     protected $container;
  29.     protected $mailer;
  30.     protected $utilisateurRepository;
  31.     protected $prospectRepository;
  32.     protected $router;
  33.     private $creationPdf;
  34.     private $em;
  35.     public function __construct(ContainerInterface $containerManagerRegistry $doctrineMailerInterface $mailerUtilisateurRepository $utilisateurRepositoryProspectRepository $prospectRepositoryUrlGeneratorInterface $routerCreationPdf $creationPdfEntityManagerInterface $em)
  36.     {
  37.         $this->container $container;
  38.         $this->doctrine $doctrine;
  39.         $this->mailer $mailer;
  40.         $this->utilisateurRepository $utilisateurRepository;
  41.         $this->prospectRepository $prospectRepository;
  42.         $this->router $router;
  43.         $this->creationPdf $creationPdf;
  44.         $this->em $em;
  45.     }
  46.     public function alertInterne(Prospect $prospectImpression $impressionLot $lotUtilisateurRepository $utilisateurRepository)
  47.     {
  48.         $utilisateurs $utilisateurRepository->findBy( ['notification' => true]);
  49.         $destinataires = [];
  50.         foreach($utilisateurs as $utilisateur){
  51.             $destinataires[] = new Address($utilisateur->getEmail());
  52.         }
  53.         $email = (new TemplatedEmail())
  54.             ->from(new Address('mailer@zada.ai''Élise Bala'))
  55.             ->replyTo($prospect->getEmprunteurEmail())
  56.             ->to(...$destinataires)
  57.             ->subject($prospect->getEntreprise() . ' : nouveau retour de prospect')
  58.             ->htmlTemplate('emails/email_impression.html.twig')
  59.             ->context([
  60.                 'prospect' => $prospect,
  61.                 'impression' => $impression,
  62.                 'lot' => $lot
  63.             ])
  64.         ;
  65.         try {
  66.             $this->mailer->send($email);
  67.             return true;
  68.         } catch (TransportExceptionInterface $e) {
  69.             return false;
  70.         }
  71.     }
  72.     public function alertVisite(Prospect $prospectUtilisateurRepository $utilisateurRepositorystring $senderEmailHistorique $lastHistorique)
  73.     {
  74.         $SUPERADMINs $utilisateurRepository->createQueryBuilder('u')
  75.             ->where('u.email LIKE :email')
  76.             ->andWhere('u.notification = true')
  77.             ->setParameters(['email' => $senderEmail])
  78.             ->getQuery()
  79.             ->getResult();
  80.         $destinataires = [];
  81.         foreach ($SUPERADMINs as $SUPERADMIN) {
  82.             $destinataires[] = new Address($SUPERADMIN->getEmail());
  83.         }
  84.         $destinataires array_unique($destinatairesSORT_REGULAR);
  85.         $email = (new TemplatedEmail())
  86.             ->replyTo($prospect->getEmprunteurEmail())
  87.             ->to(...$destinataires)
  88.             ->subject($prospect->getEntreprise() . ' : nouvelle visite')
  89.             ->htmlTemplate('emails/email_visite.html.twig')
  90.             ->context([
  91.                 'prospect' => $prospect,
  92.                 'lastHistorique' => $lastHistorique
  93.             ]);
  94.         $email->from(new Address('mailer@zada.ai''LK1'));
  95.         $email->getHeaders()->addTextHeader('X-Transport''main');
  96.     
  97.         $infoSuivi = new InfosSuivi();
  98.         $infoSuivi->setUtilisateur($prospect->getAuteur());
  99.         $infoSuivi->addProspect($prospect);
  100.         $infoSuivi->setHistorique($lastHistorique);
  101.         $infoSuivi->setType('visite');
  102.         $infoSuivi->setDescription('[prospect] a [visite] son espace public.');
  103.         $infoSuivi->setDate(new \DateTime());
  104.         $infoSuivi->setLu(false);
  105.         $this->em->persist($infoSuivi);
  106.         $this->em->flush();
  107.         try {
  108.             $this->mailer->send($email);
  109.     
  110.             return true;
  111.         } catch (TransportExceptionInterface $e) {
  112.             return false;
  113.         }
  114.     }
  115.     public function alertProspect(Prospect $prospectRequest $request)
  116.     {
  117.         $subject $request->request->get('_mail_subject');
  118.         $message $request->request->get('_mail_message');
  119.         $addCopy $request->request->get('_mail_copy');
  120.         if(isset($addCopy)){
  121.             $emailCopy $prospect->getCoEmprunteurEmail();
  122.         }
  123.         $emailUser $this->container->get('security.token_storage')->getToken()->getUser()->getEmail();
  124.         $email = (new TemplatedEmail())
  125.             ->to($prospect->getEmprunteurEmail())
  126.             ->replyTo($emailUser)
  127.             ->subject($subject)
  128.             ->htmlTemplate('emails/email_layout.html.twig')
  129.             ->context([
  130.                 'prospect' => $prospect,
  131.                 'message' => $message,
  132.             ])
  133.         ;
  134.         if(isset($emailCopy)){
  135.             $email->addCc($emailCopy);
  136.         }
  137.         switch ($emailUser) {
  138.             case 'ebala@lk1.fr':
  139.                 $email->from(new Address('ebala@lk1.fr''Élise Bala LK1 Immobilier'));
  140.                 $email->getHeaders()->addTextHeader('X-Transport''ebala');
  141.                 break;
  142.             case 'amerulla@lk1.fr':
  143.                 $email->from(new Address('amerulla@lk1.fr''Amerulla LK1 Immobilier'));
  144.                 $email->getHeaders()->addTextHeader('X-Transport''amerulla');
  145.                 break;
  146.             case 'gwenola@lk1.fr':
  147.                 $email->from(new Address('gwenola@lk1.fr''Gwenola LK1 Immobilier'));
  148.                 $email->getHeaders()->addTextHeader('X-Transport''gwenola');
  149.                 break;
  150.             case 'carolinepetit@lk1.fr':
  151.                 $email->from(new Address('carolinepetit@lk1.fr''Caroline LK1 Immobilier'));
  152.                 $email->getHeaders()->addTextHeader('X-Transport''caroline');
  153.                 break;
  154.             case 'ndufort@lk1.fr':
  155.                 $email->from(new Address('ndufort@lk1.fr''Nordahl LK1 Immobilier'));
  156.                 $email->getHeaders()->addTextHeader('X-Transport''nordahl');
  157.                 break;
  158.             case 'vruiz@lk1.fr':
  159.                 $email->from(new Address('vruiz@lk1.fr''Vincent LK1 Immobilier'));
  160.                 $email->getHeaders()->addTextHeader('X-Transport''vincent');
  161.                 break;
  162.             case 'sweltz@lk1.fr':
  163.                 $email->from(new Address('sweltz@lk1.fr''Stéphanie LK1 Immobilier'));
  164.                 $email->getHeaders()->addTextHeader('X-Transport''stephanie');
  165.                 break;
  166.             case 'wdouma@lk1.fr':
  167.                 $email->from(new Address('wdouma@lk1.fr''Wafaa LK1 Immobilier'));
  168.                 $email->getHeaders()->addTextHeader('X-Transport''wafaa');
  169.                 break;
  170.             case 'c.aussandon@lk1.fr':
  171.                 $email->from(new Address('c.aussandon@lk1.fr''Christelle LK1 Immobilier'));
  172.                 $email->getHeaders()->addTextHeader('X-Transport''aussandon');
  173.                 break;
  174.             case 'a.soulet@lk1.fr':
  175.                 $email->from(new Address('a.soulet@lk1.fr''Aurélia LK1 Immobilier'));
  176.                 $email->getHeaders()->addTextHeader('X-Transport''soulet');
  177.                 break;
  178.             case 'b.imbard@lk1.fr':
  179.                 $email->from(new Address('b.imbard@lk1.fr''Benjamin LK1 Immobilier'));
  180.                 $email->getHeaders()->addTextHeader('X-Transport''imbard');
  181.                 break;
  182.             default:
  183.                 $email->from(new Address('mailer@zada.ai''Élise Bala LK1 Immobilier'));
  184.                 $email->getHeaders()->addTextHeader('X-Transport''main');
  185.                 break;
  186.         }
  187.         try {
  188.             $this->mailer->send($email);
  189.             return true;
  190.         } catch (TransportExceptionInterface $e) {
  191.             return false;
  192.         }
  193.     }
  194.     public function alertAuteurProspect(int $prospectIdint $auteurIdUtilisateur $userConnected)
  195.     {
  196.         $auteur $this->utilisateurRepository->find($auteurId);
  197.         $prospect $this->prospectRepository->find($prospectId);
  198.         if (!$auteur || !$prospect) {
  199.             return false;
  200.         }
  201.         $pdfPath $this->creationPdf->createPDF($prospect'/''file');
  202.         $email = (new TemplatedEmail())
  203.             ->from(new Address('mailer@zada.ai''LK1'))
  204.             ->to($auteur->getEmail())
  205.             ->subject($prospect->getEntreprise() . ' : nouveau contact à traiter')
  206.             ->htmlTemplate('emails/email_nouveau_contact.html.twig')
  207.             ->context([
  208.                 'prospect' => $prospect,
  209.                 'auteur' => $auteur,
  210.             ])
  211.             ->attachFromPath($pdfPath);
  212.         try {
  213.             $this->mailer->send($email);
  214.             if ($pdfPath) {
  215.                 if (is_file($pdfPath)) {
  216.                     unlink($pdfPath);
  217.                 }
  218.             }
  219.             $this->addNotificationForAdmins($prospect$auteur$userConnected);
  220.     
  221.             return true;
  222.         } catch (TransportExceptionInterface $e) {
  223.             if ($pdfPath) {
  224.                 if (is_file($pdfPath)) {
  225.                     unlink($pdfPath);
  226.                 }
  227.             }
  228.             return false;
  229.         }
  230.     }
  231.     /**
  232.      * Méthode pour notifier les SUPERADMIN d'une demande de suppression de programme
  233.      */
  234.     public function alertDemandeSuppression(Programme $programmeUtilisateur $userConnected)
  235.     {
  236.         $entreprise $programme->getEntreprise();
  237.         if (!$entreprise) {
  238.             return false;
  239.         }
  240.         $superAdmins $this->utilisateurRepository->createQueryBuilder('u')
  241.             ->where('u.entreprise = :entreprise')
  242.             ->andWhere('u.roles LIKE :roleSuperAdmin')
  243.             ->setParameter('entreprise'$entreprise)
  244.             ->setParameter('roleSuperAdmin''%ROLE_SUPERADMIN%')
  245.             ->getQuery()
  246.             ->getResult();
  247.         foreach ($superAdmins as $admin) {
  248.             $infoSuivi = new InfosSuivi();
  249.             $infoSuivi->setUtilisateur($admin);
  250.             $infoSuivi->setType('suppr');
  251.             $infoSuivi->setDescription('[user] a fait une [demande de suppression] pour le programme [programme].');
  252.             $infoSuivi->setDate(new \DateTime());
  253.             $infoSuivi->setLu(false);
  254.             $infoSuivi->setConnectedUser($userConnected);
  255.             $infoSuivi->setProgramme($programme);
  256.             $this->em->persist($infoSuivi);
  257.         }
  258.         $this->em->flush();
  259.         return true;
  260.     }
  261.     private function addNotificationForAdmins(Prospect $prospect, ?Utilisateur $auteurUtilisateur $userConnected)
  262.     {
  263.         $entreprise $auteur $auteur->getEntreprise() : null;
  264.         $queryBuilder $this->utilisateurRepository->createQueryBuilder('u');
  265.     
  266.         if ($entreprise) {
  267.             $queryBuilder->where('u.entreprise = :entreprise')
  268.                 ->setParameter('entreprise'$entreprise);
  269.         }
  270.     
  271.         $queryBuilder->andWhere(
  272.             $queryBuilder->expr()->orX(
  273.                 $queryBuilder->expr()->like('u.roles'':rolesAdmin'),
  274.                 $queryBuilder->expr()->like('u.roles'':rolesSuperAdmin')
  275.             )
  276.         )
  277.         ->setParameter('rolesAdmin''%ROLE_ADMIN%')
  278.         ->setParameter('rolesSuperAdmin''%ROLE_SUPERADMIN%');
  279.     
  280.         if (in_array('ROLE_COMMERCIAL'$auteur->getRoles())) {
  281.             $queryBuilder->orWhere('u.roles LIKE :rolesDirecteur')
  282.                 ->setParameter('rolesDirecteur''%ROLE_DIRECTEUR%');
  283.         }
  284.         if (in_array('ROLE_PARTENAIRE'$auteur->getRoles())) {
  285.             $queryBuilder->orWhere('u.roles LIKE :rolesResponsable')
  286.                 ->setParameter('rolesResponsable''%ROLE_RESPONSABLE%');
  287.         }
  288.         $admins $queryBuilder->getQuery()->getResult();
  289.     
  290.         foreach ($admins as $admin) {
  291.             $infoSuivi = new InfosSuivi();
  292.             $infoSuivi->setUtilisateur($admin);
  293.             $infoSuivi->addProspect($prospect);
  294.             $infoSuivi->setType('client');
  295.             $infoSuivi->setDescription('Le client [prospect] a été attribué à [user] par [connectedUser]');
  296.             $infoSuivi->setDate(new \DateTime());
  297.             $infoSuivi->setLu(false);
  298.             $infoSuivi->setAuteur($auteur);
  299.             $infoSuivi->setConnectedUser($userConnected);
  300.     
  301.             $this->em->persist($infoSuivi);
  302.         }
  303.     
  304.         $this->em->flush();
  305.     }
  306. }