src/Controller/DefaultController.php line 60

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use DateTime;
  4. use PhpImap\Mailbox;
  5. use App\Service\UtilsService;
  6. use App\Form\ResetPasswordType;
  7. use App\Service\BandeauService;
  8. use App\Service\EmailGenerator;
  9. use TeamTNT\TNTSearch\TNTSearch;
  10. use App\Repository\UserRepository;
  11. use Symfony\Component\Mime\Address;
  12. use App\Repository\ClientRepository;
  13. use App\Form\ClientFinalValidateType;
  14. use App\Repository\BandeauRepository;
  15. use App\Controller\CommandeController;
  16. use App\Form\ResetPasswordRequestType;
  17. use App\Repository\CommandeRepository;
  18. use Doctrine\ORM\EntityManagerInterface;
  19. use App\Repository\ClientFinalRepository;
  20. use Symfony\Bridge\Twig\Mime\TemplatedEmail;
  21. use Symfony\Component\HttpFoundation\Cookie;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\Mailer\MailerInterface;
  24. use Symfony\Component\HttpFoundation\Response;
  25. use Symfony\Component\Routing\Annotation\Route;
  26. use Symfony\Component\HttpFoundation\JsonResponse;
  27. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  28. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  29. use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
  30. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  31. class DefaultController extends AbstractController
  32. {
  33.     private $utilsService;
  34.     private $emailGeneratorService;
  35.     private $roleAdmin;
  36.     private $baseDomain 'https://wine.mbebordeaux.fr';
  37.     private $fuzzy_storage "/home/mbe/public_html/www";
  38.     private $mailer;
  39.     private $bandeauService;
  40.     //private $fuzzy_storage = "/Users/mbk15/Documents/aSchone/mbeplateforme";
  41.     //private $fuzzy_storage = "C:\wamp64\www\mbeplateforme";
  42.     //private $fuzzy_storage = "C:\Users\bleu-\OneDrive\Bureau\aschone\mbeplateforme";
  43.     public function __construct(UtilsService $utilsServiceBandeauService $bandeauServiceEmailGenerator $emailGeneratorServiceMailerInterface $mailer)
  44.     {
  45.         $this->utilsService $utilsService;
  46.         $this->emailGeneratorService $emailGeneratorService;
  47.         $this->roleAdmin $this->utilsService->isAdmin();
  48.         $this->mailer $mailer;
  49.         $this->bandeauService $bandeauService;
  50.     }
  51.     /**
  52.      * @Route("/", name="default")
  53.      */
  54.     public function index(BandeauRepository $BandeauRepositoryRequest $request): Response
  55.     {
  56.         return $this->render('default/index.html.twig'
  57.             array('controller_name' => 'DefaultController',
  58.             'bandeau' => $this->bandeauService->displayPopup()
  59.         ));
  60.     }
  61.     private function sendErrorEmail($errorDetails$excelFilePath)
  62.     {
  63.         $email = (new TemplatedEmail())
  64.             ->from('no-reply@mbe.vent-en-poupe.fr')
  65.             ->to(new Address('linnea.cederblad@mbebordeaux.fr'))
  66.             ->bcc(new Address('bpouverel@mbefrance.fr'))
  67.             ->bcc(new Address('support@bleu-digital.fr'))
  68.             ->subject('MBE - Problème import script')
  69.             ->htmlTemplate('emails/error_template.html.twig'// Assurez-vous d'avoir ce template Twig
  70.             ->context([
  71.                 'errorDetails' => $errorDetails,
  72.             ]);
  73.         foreach ($excelFilePath as $key => $file) {
  74.             $email->attachFromPath($file);
  75.         }
  76.         try {
  77.             $this->mailer->send($email);
  78.             echo "E-mail envoyé avec succès.";
  79.         } catch (TransportExceptionInterface $e) {
  80.             echo "L'e-mail n'a pas pu être envoyé. Erreur: {$e->getMessage()}";
  81.         }
  82.     }
  83.     private function sendErrorEmailIdealWine($errorDetails$excelFilePath)
  84.     {
  85.         $email = (new TemplatedEmail())
  86.             ->from('no-reply@mbe.vent-en-poupe.fr')
  87.             ->to(new Address('linnea.cederblad@mbebordeaux.fr'))
  88.             ->bcc(new Address('bpouverel@mbefrance.fr'))
  89.             ->bcc(new Address('support@bleu-digital.fr'))
  90.             ->subject('MBE - Problème import script')
  91.             ->htmlTemplate('emails/error_template.html.twig'// Assurez-vous d'avoir ce template Twig
  92.             ->context([
  93.                 'errorDetails' => $errorDetails,
  94.             ]);
  95.         foreach ($excelFilePath as $key => $file) {
  96.             $email->attachFromPath($file);
  97.         }
  98.         try {
  99.             $this->mailer->send($email);
  100.             echo "E-mail envoyé avec succès.";
  101.         } catch (TransportExceptionInterface $e) {
  102.             echo "L'e-mail n'a pas pu être envoyé. Erreur: {$e->getMessage()}";
  103.         }
  104.     }
  105.     /**
  106.      * @Route("/create_commande_par_email_Wf74oVv7WY4QLu1YqSad ", name="create_commande_par_email", methods={"GET", "POST"})
  107.      */
  108.     public function createCommandeParEmail(CommandeController $commandeControllerClientRepository $clientRepositoryCommandeRepository $commandeRepository)
  109.     {
  110.         // Paramètres de connexion IMAP
  111.         $server '{ssl0.ovh.net:993/imap/ssl}INBOX';
  112.         $username 'usa@mbebordeaux.fr';
  113.         $password 'R2rFMxYgN5dw5cMMbpta';
  114.         //https://mail.ovh.net/roundcube/
  115.         // Créer une instance de la boîte aux lettres
  116.         $mailbox = new Mailbox($server$username$password);
  117.         // Récupérer tous les e-mails
  118.         $emails $mailbox->searchMailbox('UNSEEN');
  119.         // $emails = $mailbox->searchMailbox('ALL');                    
  120.         // Parcourir les e-mails
  121.         foreach ($emails as $emailUid) {
  122.             $email $mailbox->getMail($emailUid);
  123.             // Vérifier si le from est Charlotte ou Florian ou Benoit ou Lilly (Après, les adresses du client )
  124.             if ($email->fromAddress === 'cbrisson@bleu-digital.fr' || $email->fromAddress === 'fdieu@bleu-digital.fr' || $email->fromAddress === 'linnea.cederblad@mbebordeaux.fr' || $email->fromAddress === 'bpouverel@mbefrance.fr' || $email->fromAddress === 'aschone@bleu-digital.fr' || $email->fromAddress == 'mbe011@mbefrance.fr') {
  125.                 // Vérifier s'il existe des pièces jointes
  126.                 if ($email->hasAttachments()) {
  127.                     // Parcourir les pièces jointes
  128.                     foreach ($email->getAttachments() as $attachment) {
  129.                         // Vérifier si la pièce jointe est un fichier Excel
  130.                         $mimeType $attachment->mime;
  131.                         $fileName $attachment->name;
  132.                         if ($mimeType === 'application/vnd.ms-excel; charset=binary' || $mimeType "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=binary" || $mimeType === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || $mimeType === 'application/vnd.ms-excel') {
  133.                             // Déterminez l'encodage manuellement si mb_detect_encoding() échoue
  134.                             $current_encoding 'ISO-8859-1'// Par exemple, supposons que l'encodage est ISO-8859-1                            
  135.                             // Conversion de l'encodage si nécessaire (ex. vers UTF-8)
  136.                             if ($current_encoding !== 'UTF-8') {
  137.                                 $filename mb_convert_encoding($fileName'UTF-8'$current_encoding);
  138.                             }
  139.                             // Suppression des caractères non valides
  140.                             $filenameNew preg_replace('/[^\p{L}\p{N}\s\-_\.]/u'''$filename);
  141.                             // Vérifier si l'objet de l'email contient le mot "IDEALWINE"
  142.                             if (strpos(strtolower($email->subject), 'idealwine') !== false) {
  143.                                 file_put_contents(__DIR__ "/../../public/VK74QTZTBQax9SkdDuax/" $filenameNew$attachment->getContents());
  144.                             } else {
  145.                                 file_put_contents(__DIR__ "/../../public/xdeUEDJuejUDEiduhEDIOehdEUDHe/" $filenameNew$attachment->getContents());
  146.                             }
  147.                             // Chemin vers le fichier Excel
  148.                             // $excelFilePath = __DIR__."/../../public/xdeUEDJuejUDEiduhEDIOehdEUDHe/".$filenameNew;
  149.                         }
  150.                     }
  151.                 }
  152.                 $mailbox->markMailAsRead($emailUid);
  153.             }
  154.         }
  155.         $createCommandeResponse $commandeController->create_via_import($clientRepository$commandeRepository);
  156.         $createCommandeResponseIdealWine $commandeController->create_via_import_idealwine($clientRepository$commandeRepository);
  157.         $errorFound $createCommandeResponse['errorFound'];
  158.         // Si le script merde alors on send un email pour expliquer l'erreur
  159.         if ($errorFound) {
  160.             $errorDetails $createCommandeResponse['errorDetails'];
  161.             $excelFilePath $createCommandeResponse['excelFilePath'];
  162.             $this->sendErrorEmail($errorDetails$excelFilePath);
  163.         } else {
  164.             echo "Aucune erreur trouvée dans le fichier Excel Martin.";
  165.         }
  166.         $errorFound $createCommandeResponseIdealWine['errorFound'];
  167.         // Si le script merde alors on send un email pour expliquer l'erreur pour IDEALWINE
  168.         if ($errorFound) {
  169.             $errorDetails $createCommandeResponseIdealWine['errorDetails'];
  170.             $excelFilePath $createCommandeResponseIdealWine['excelFilePath'];
  171.             $this->sendErrorEmailIdealWine($errorDetails$excelFilePath);
  172.         } else {
  173.             echo "Aucune erreur trouvée dans le fichier Excel IDEALWINE.";
  174.         }
  175.         return new Response("OK");
  176.     }
  177.     /**
  178.      * @Route("/admin", name="admin_default")
  179.      */
  180.     public function indexAdmin(): Response
  181.     {
  182.         if ($this->roleAdmin) {
  183.             return $this->render('default/indexAdmin.html.twig', [
  184.                 'controller_name' => 'DefaultController',
  185.             ]);
  186.         }
  187.         return $this->redirectToRoute('app_commande_new', [], Response::HTTP_SEE_OTHER);
  188.     }
  189.     /**
  190.      * @Route("/mdpoublier ", name="app_client_forgot_pwd", methods={"GET", "POST"})
  191.      */
  192.     public function askResetPassword(Request $requestUserRepository $userRepository): Response
  193.     {
  194.         $form $this->createForm(ResetPasswordRequestType::class);
  195.         $form->handleRequest($request);
  196.         if ($form->isSubmitted()) {
  197.             $email $_POST['reset_password_request']['email'];
  198.             $user $userRepository->findByEmail($email);
  199.             if (count($user) > 0) {
  200.                 $payload = [
  201.                     'id' => $user[0]->getId(),
  202.                     'exp' => time() + 900
  203.                 ];
  204.                 $token $this->utilsService->generateJWT($payload);
  205.                 $url $this->baseDomain $this->generateUrl('reset_password', array('token' => $token));
  206.                 // TODO send the link by email
  207.                 $this->emailGeneratorService->sendResetPassword($user[0], $url);
  208.             }
  209.             $this->addFlash(
  210.                 'info',
  211.                 'Si votre email est lié à un compte nous vous avons envoyé un lien par mail'
  212.             );
  213.         }
  214.         return $this->render('client/forgot_password.html.twig', [
  215.             'form' => $form->createView(),
  216.         ]);
  217.     }
  218.     /**
  219.      * @Route("/changermdp", name="reset_password", methods={"GET", "POST"})
  220.      */
  221.     public function resetPassword(Request $requestUserRepository $userRepositoryUserPasswordHasherInterface $userPasswordHasherEntityManagerInterface $entityManager)
  222.     {
  223.         $token $request->query->get('token');
  224.         if ($token == null) {
  225.             return $this->redirectToRoute('default', [], Response::HTTP_SEE_OTHER);
  226.         }
  227.         $payload $this->utilsService->validateJWT($token);
  228.         //TODO decode the token present in the get request
  229.         $user $userRepository->find($payload['id']);
  230.         $form $this->createForm(ResetPasswordType::class);
  231.         $form->handleRequest($request);
  232.         if ($form->isSubmitted() && $form->isValid()) {
  233.             $user->setPassword(
  234.                 $userPasswordHasher->hashPassword(
  235.                     $user,
  236.                     $form->get('plainPassword')->getData()
  237.                 )
  238.             );
  239.             $entityManager->persist($user);
  240.             $entityManager->flush();
  241.             return $this->redirectToRoute('login');
  242.         }
  243.         return $this->render('client/reset_password.html.twig', [
  244.             'form' => $form->createView(),
  245.         ]);
  246.     }
  247.     /**
  248.      * @Route("/validate", name="app_client_final_validate", methods={"GET", "POST"})
  249.      */
  250.     public function validate(CommandeRepository $commandeRepository,  Request $request)
  251.     {
  252.         $token $request->query->get('token');
  253.         if ($token == null) {
  254.             return $this->redirectToRoute('default', [], Response::HTTP_SEE_OTHER);
  255.         }
  256.         $payload $this->utilsService->validateJWT($token);
  257.         $commande $commandeRepository->find($payload['id']);
  258.         if ($commande->isIsValideeParClient() == true) {
  259.             //Le client a déjà validé ses infos et revient sur le lien, on redirige direct vers la page "Vos informations ont bien été validées"
  260.             return $this->render('client_final/informations_validees.html.twig');
  261.         }
  262.         /* if($commande->getState() == 'valide' 
  263.         || $commande->getState() == 'emballage' 
  264.         || $commande->getState() == 'archive'){
  265.             return $this->redirectToRoute('default', [], Response::HTTP_SEE_OTHER); 
  266.         } */
  267.         $em $this->getDoctrine()->getManager();
  268.         $form $this->createForm(ClientFinalValidateType::class, $commande);
  269.         $form->handleRequest($request);
  270.         $dateCreneau1Clone = clone $commande->getDateCollecte();
  271.         $dateCreneau2Clone = clone $commande->getDateCollecte();
  272.         if ($commande->isEmballageLivraison()) {
  273.             $dateCreneau1Brut $dateCreneau1Clone->modify("+7 days");
  274.             $dateCreneau2Brut $dateCreneau2Clone->modify("+12 days");
  275.         } else {
  276.             $dateCreneau1Brut $dateCreneau1Clone->modify("+22 days");
  277.             $dateCreneau2Brut $dateCreneau2Clone->modify("+27 days");
  278.         }
  279.         $dateCreneau1 $dateCreneau1Brut->format('d/m/Y');
  280.         $dateCreneau2 $dateCreneau2Brut->format('d/m/Y');
  281.         if ($form->isSubmitted() && $form->isValid()) {
  282.             $postCommande $_POST['client_final_validate'];
  283.             $etatUs $_POST['input_etat_us'];
  284.             //Client final
  285.             $clientFinal $commande->getClientFinal();
  286.             $clientFinal->setTelephone($postCommande['telephone']);
  287.             if (strlen($postCommande['fullName']) > 70) {
  288.                 $this->addFlash("error"'The fullname is too long');
  289.                 return $this->render('client_final/validate.html.twig', [
  290.                     'commande' => $commande,
  291.                     'form' => $form->createView(),
  292.                     'dateCreneau1' => $dateCreneau1,
  293.                     'dateCreneau2' => $dateCreneau2,
  294.                 ]);
  295.             }
  296.             if (strlen($postCommande['telephone']) != 10) {
  297.                 $this->addFlash("error"'The phone number must be composed of 10 digits.');
  298.                 return $this->render('client_final/validate.html.twig', [
  299.                     'commande' => $commande,
  300.                     'form' => $form->createView(),
  301.                     'dateCreneau1' => $dateCreneau1,
  302.                     'dateCreneau2' => $dateCreneau2,
  303.                 ]);
  304.             }
  305.             $clientFinal->setFullName($postCommande['fullName']);
  306.             // $clientFinal->setPrenom($postCommande['clientFinal']['prenom']);
  307.             // $clientFinal->setNom($postCommande['clientFinal']['nom']);
  308.             $em->persist($clientFinal);
  309.             $em->flush();
  310.             //Commande
  311.             $commande->setCodePostalLivraison(str_replace(' '''$postCommande['codePostalLivraison']));
  312.             $commande->setVilleLivraison(trim($postCommande['villeLivraison']));
  313.             $commande->setAdresseLivraison($postCommande['adresseLivraison']);
  314.             $commande->setComplementAdresseLivraison($postCommande['complementAdresseLivraison']);
  315.             $commande->setEtatUs($etatUs);
  316.             $commande->setProvince($this->utilsService->getProvinceByEtatUs($etatUs));
  317.             //Si le statut de la commande a déjà avancé et que la suite était conditionnée à la validation des infos du client, on passe au state suivant
  318.             if ($commande->getState() == "attente_client") {
  319.                 if ($commande->isEmballageLivraison() == true) {
  320.                     $commande->setState('attente_pec_transporteur');
  321.                 } else {
  322.                     $commande->setState('attente_collecte_mbe');
  323.                 }
  324.             }
  325.             /* $commande->setState($commande->isEmballageLivraison() ? 'valide' : 'emballage'); */
  326.             $commande->setIsValideeParClient(true);
  327.             $em->persist($commande);
  328.             $em->flush();
  329.             $this->addFlash(
  330.                 'info',
  331.                 'Order validated'
  332.             );
  333.             //On redirige direct vers la page "Vos informations ont bien été validées"
  334.             /* return $this->redirectToRoute('default', [], Response::HTTP_SEE_OTHER);  */
  335.             return $this->render('client_final/informations_validees.html.twig');
  336.         }
  337.         return $this->render('client_final/validate.html.twig', [
  338.             'commande' => $commande,
  339.             'form' => $form->createView(),
  340.             'dateCreneau1' => $dateCreneau1,
  341.             'dateCreneau2' => $dateCreneau2,
  342.         ]);
  343.     }
  344.     /**
  345.      * @Route("/updateFirstConnexion", name="update_first_connexion")
  346.      */
  347.     public function updateFirstConnexion(): Response
  348.     {
  349.         $user $this->getUser();
  350.         $em $this->getDoctrine()->getManager();
  351.         $user->setIsFirstConnexion(false);
  352.         $em->persist($user);
  353.         $em->flush();
  354.         return new Response("OK");
  355.     }
  356.     /**
  357.      * @Route("/cron_BJbOT7r0aa/adminEmballages", name="admin_emballages")
  358.      */
  359.     public function adminEmballages(CommandeRepository $commandeRepository): Response
  360.     {
  361.         //On recup la valeur de today
  362.         $jourDebut intval(date("d"));
  363.         $moisDebut intval(date("m"));
  364.         $anneeDebut intval(date("Y"));
  365.         if (intval($moisDebut) == 12) {
  366.             $moisSuivant '01';
  367.             $anneeFin $anneeDebut 1;
  368.         } else {
  369.             $moisSuivant intval($moisDebut) + 1;
  370.             $anneeFin $anneeDebut;
  371.         }
  372.         switch (true) {
  373.             case $jourDebut == 5:
  374.                 $dateFinCreneau strval($anneeDebut) . '-' sprintf('%02d'strval($moisDebut)) . '-' $this->utilsService->getDernierJourMois($moisDebut$anneeDebut);
  375.                 break;
  376.             case $jourDebut == 10:
  377.                 $dateFinCreneau strval($anneeFin) . '-' sprintf('%02d'strval($moisSuivant)) . '-05';
  378.                 break;
  379.             case $jourDebut == 15:
  380.                 $dateFinCreneau strval($anneeFin) . '-' sprintf('%02d'strval($moisSuivant)) . '-10';
  381.                 break;
  382.             case $jourDebut == 20:
  383.                 $dateFinCreneau strval($anneeFin) . '-' sprintf('%02d'strval($moisSuivant)) . '-15';
  384.                 break;
  385.             case $jourDebut == 25:
  386.                 $dateFinCreneau strval($anneeFin) . '-' sprintf('%02d'strval($moisSuivant)) . '-20';
  387.                 break;
  388.             case $jourDebut == 30:
  389.                 $dateFinCreneau strval($anneeFin) . '-' sprintf('%02d'strval($moisSuivant)) . '-25';
  390.                 break;
  391.             default:
  392.                 $dateFinCreneau '';
  393.                 break;
  394.         }
  395.         //If today ne correspond pas aux jours, on ne lance pas le script 
  396.         if ($dateFinCreneau != '') {
  397.             $commandes $commandeRepository->findCommandesAEmballerParCreneau($dateFinCreneau);
  398.             if ($commandes) {
  399.                 $res $this->emailGeneratorService->sendEmailPrepareEmballage($commandes);
  400.                 if ($res) {
  401.                     return new Response("OK");
  402.                 } else {
  403.                     return new Response("ErreurMail");
  404.                 }
  405.                 exit();
  406.             }
  407.             return new Response("Pas d'\'envoi ce jour");
  408.             die();
  409.         }
  410.         return new Response("Pas d'\'envoi ce jour");
  411.         die();
  412.     }
  413.     /**
  414.      * @Route("/cron_BJbOT7r0aa/preparationColisCavistes", name="preparation_colis_cavistes")
  415.      */
  416.     public function preparationColisCavistes(ClientRepository $clientRepositoryCommandeRepository $commandeRepository): Response
  417.     {
  418.         //On recup la valeur de today
  419.         $jourDebut intval(date("d"));
  420.         $moisDebut intval(date("m"));
  421.         $anneeDebut intval(date("Y"));
  422.         if (intval($moisDebut) == 12) {
  423.             $moisSuivant '01';
  424.             $anneeFin $anneeDebut 1;
  425.         } else {
  426.             $moisSuivant intval($moisDebut) + 1;
  427.             $anneeFin $anneeDebut;
  428.         }
  429.         switch (true) {
  430.             case $jourDebut == 5:
  431.                 $dateFinCreneau strval($anneeFin) . '-' sprintf('%02d'strval($moisDebut)) . '-25';
  432.                 break;
  433.             case $jourDebut == 10:
  434.                 $dateFinCreneau strval($anneeDebut) . '-' sprintf('%02d'strval($moisDebut)) . '-' $this->utilsService->getDernierJourMois($moisDebut$anneeDebut);
  435.                 break;
  436.             case $jourDebut == 15:
  437.                 $dateFinCreneau strval($anneeFin) . '-' sprintf('%02d'strval($moisSuivant)) . '-05';
  438.                 break;
  439.             case $jourDebut == 20:
  440.                 $dateFinCreneau strval($anneeFin) . '-' sprintf('%02d'strval($moisSuivant)) . '-10';
  441.                 break;
  442.             case $jourDebut == 25:
  443.                 $dateFinCreneau strval($anneeFin) . '-' sprintf('%02d'strval($moisSuivant)) . '-15';
  444.                 break;
  445.             case $jourDebut == 30:
  446.                 $dateFinCreneau strval($anneeFin) . '-' sprintf('%02d'strval($moisSuivant)) . '-20';
  447.                 break;
  448.             default:
  449.                 $dateFinCreneau '';
  450.                 break;
  451.         }
  452.         //If today ne correspond pas aux jours, on ne lance pas le script 
  453.         if ($dateFinCreneau != '') {
  454.             $clients $clientRepository->findAll();
  455.             $mailsEnvoyes = [];
  456.             $mailsErreur = [];
  457.             foreach ($clients as $key => $client) {
  458.                 //Pour chaque client, on recherche si il a des commandes à envoyer avant la date de fin
  459.                 $commandes $commandeRepository->findCommandesAEnvoyerCaviste($dateFinCreneau$client);
  460.                 if ($commandes) {
  461.                     $res $this->emailGeneratorService->sendEmailPrepareCommandesCaviste($client$commandes);
  462.                     if ($res) {
  463.                         $mailsEnvoyes[] = $client->getId();
  464.                     } else {
  465.                         $mailsErreur[] = $client->getId();
  466.                     }
  467.                 }
  468.             }
  469.             if ($mailsErreur) {
  470.                 $response = new Response();
  471.                 $response->setContent(json_encode([
  472.                     '$mailsErreur' => $mailsErreur,
  473.                 ]));
  474.                 $response->headers->set('Content-Type''application/json');
  475.                 return $response;
  476.             }
  477.             return new Response("OK");
  478.             exit();
  479.         }
  480.         return new Response("Pas d'\'envoi ce jour");
  481.         die();
  482.     }
  483.     private function getTNTSearchConfiguration()
  484.     {
  485.         $databaseURL $_ENV['DATABASE_URL'];
  486.         $databaseParameters parse_url($databaseURL);
  487.         $config = [
  488.             'driver'    => $databaseParameters["scheme"],
  489.             'host'      => $databaseParameters["host"],
  490.             'database'  => str_replace("/"""$databaseParameters["path"]),
  491.             'username'  => $databaseParameters["user"],
  492.             'password'  => $databaseParameters["pass"],
  493.             'storage'   => $this->fuzzy_storage '/fuzzy_storage_aeZAdJfvVpgZGTvh/',
  494.             'stemmer'   => \TeamTNT\TNTSearch\Stemmer\PorterStemmer::class
  495.         ];
  496.         return $config;
  497.     }
  498.     /**
  499.      * @Route("/generate-index_AiNnDiIPx7C9ZcWmoiO4", name="app_generate-index")
  500.      */
  501.     public function generate_index(): JsonResponse
  502.     {
  503.         $tnt = new TNTSearch;
  504.         // Obtain and load the configuration that can be generated with the previous described method
  505.         $configuration $this->getTNTSearchConfiguration();
  506.         $tnt->loadConfig($configuration);
  507.         $indexerCommande $tnt->createIndex('commande.index');
  508.         $indexerCommande->query('SELECT id, numero_facture, code_postal_livraison, ville_livraison, tracking_number FROM commande');
  509.         $indexerCommande->run();
  510.         $indexerClientFinal $tnt->createIndex('clientFinal.index');
  511.         $indexerClientFinal->query('SELECT id, full_name FROM client_final');
  512.         $indexerClientFinal->run();
  513.         $indexerClient $tnt->createIndex('client.index');
  514.         $indexerClient->query('SELECT id, raison_sociale FROM client');
  515.         $indexerClient->run();
  516.         return new JsonResponse('done');
  517.     }
  518.     /**
  519.      * @route("/fedexTest", name="instable")
  520.      */
  521.     public function cancelFedex()
  522.     {
  523.         $trackingNumber '773704227696';
  524.         $fedexEndpoint 'https://apis.fedex.com/ship/v1/shipments/cancel';
  525.         $payload '{
  526.             "trackingNumber": " ' $trackingNumber ' ",
  527.             "senderCountryCode": "FR",
  528.             "deletionControl": "DELETE_ALL_PACKAGES",
  529.             "accountNumber": {
  530.                 "value": "782780123"
  531.             }
  532.         }';
  533.         $curl curl_init();
  534.         curl_setopt_array($curl, array(
  535.             CURLOPT_URL => $fedexEndpoint,
  536.             CURLOPT_RETURNTRANSFER => true,
  537.             CURLOPT_ENCODING => '',
  538.             CURLOPT_MAXREDIRS => 10,
  539.             CURLOPT_TIMEOUT => 0,
  540.             CURLOPT_FOLLOWLOCATION => true,
  541.             CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  542.             CURLOPT_CUSTOMREQUEST => 'PUT',
  543.             CURLOPT_POSTFIELDS => $payload,
  544.             CURLOPT_HTTPHEADER => array(
  545.                 'x-customer-transaction-id: 624deea6-b709-470c-8c39-4b5511281492',
  546.                 'x-locale: en_US',
  547.                 'Content-Type: application/json',
  548.                 'Authorization: Bearer ' $this->getFedexToken()
  549.             ),
  550.         ));
  551.         $response curl_exec($curl);
  552.         $json json_decode($responsetrue);
  553.         var_dump($response);
  554.     }
  555.     public function getFedexToken()
  556.     {
  557.         $url "https://apis.fedex.com/oauth/token";
  558.         $payload "grant_type=client_credentials&client_id=l7c771e0d2fd444799b4ce63c4ccd10032&client_secret=7dacb43d3ecc4d239d27236f37a39075";
  559.         $ch curl_init($url);
  560.         curl_setopt($chCURLOPT_POST1);
  561.         curl_setopt($chCURLOPT_POSTFIELDS$payload);
  562.         curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  563.         $response curl_exec($ch);
  564.         $json json_decode($responsetrue);
  565.         curl_close($ch);
  566.         return $json['access_token'];
  567.     }
  568.     /**
  569.      * @route("/recapFedex_zS4DvryqHjVQdXCeRsgpP5JWc9tKn32Af8bLxE7B", name="recapFedex")
  570.      */
  571.     public function testDateCondition(CommandeRepository $commandeRepository): JsonResponse
  572.     {
  573.         $currentDayOfWeek date("w");
  574.         if ($currentDayOfWeek == || $currentDayOfWeek == 6) {
  575.             return new JsonResponse('ok');
  576.         }
  577.         // Iterate over the next seven days
  578.         for ($i 0$i 9$i++) {
  579.             if (intval(date('w'strtotime("+$i days"))) != && intval(date('w'strtotime("+$i days"))) != 0) {
  580.                 $dayName date("D"strtotime("+$i days"));
  581.                 switch ($dayName) {
  582.                     case 'Mon':
  583.                         $day 'Lundi';
  584.                         break;
  585.                     case 'Tue':
  586.                         $day 'Mardi';
  587.                         break;
  588.                     case 'Wed':
  589.                         $day 'Mercredi';
  590.                         break;
  591.                     case 'Thu':
  592.                         $day 'Jeudi';
  593.                         break;
  594.                     case 'Fri':
  595.                         $day 'Vendredi';
  596.                         break;
  597.                     default:
  598.                         $day '';
  599.                         break;
  600.                 }
  601.                 $mmddyyyyValue date("Y-m-d"strtotime("+$i days"));
  602.                 $days[] = array('name' => $day'mmddyyyy' => $mmddyyyyValue);
  603.             }
  604.         }
  605.         $daysInfo = [];
  606.         for ($i 0$i 5$i++) {
  607.             $datas $commandeRepository->findBy([
  608.                 'dateCollecte' => new DateTime($days[$i]['mmddyyyy']),
  609.                 'fedexPdfAvailable' => '0',
  610.                 'state' => 'attente_pec_transporteur'
  611.             ]);
  612.             $x 0;
  613.             foreach ($datas as $data) {
  614.                 $x++;
  615.             }
  616.             $daysInfo[] = array('dayDate' => $days[$i]['mmddyyyy'], 'dayName' => $days[$i]['name'], 'total' => $x);
  617.         }
  618.         $this->emailGeneratorService->sendFedexRecap($daysInfo);
  619.         return new JsonResponse('ok');
  620.     }
  621. }