src/Controller/HomeController.php line 58

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Client;
  4. use App\Entity\Devis;
  5. use App\Entity\DevisActivite;
  6. use App\Entity\DevisClient;
  7. use App\Entity\DevisModaliteCharge;
  8. use App\Entity\DevisSection;
  9. use App\Entity\DevisSousSection;
  10. use App\Entity\SocSociete;
  11. use App\Entity\User;
  12. use App\Service\AdminService;
  13. use App\Service\HomeService;
  14. use App\Service\MailService;
  15. use App\Service\SearchService;
  16. use DateTimeImmutable;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use Dompdf\Dompdf;
  19. use Dompdf\Options;
  20. use App\Service\PasswordHash;
  21. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  22. use Symfony\Component\Asset\Packages;
  23. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  24. use Symfony\Component\HttpFoundation\JsonResponse;
  25. use Symfony\Component\HttpFoundation\Request;
  26. use Symfony\Component\HttpFoundation\Response;
  27. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  28. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  29. use Symfony\Component\Routing\Annotation\Route;
  30. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  31. class HomeController extends AbstractController
  32. {
  33.     private $entityManager ;
  34.     private $searchService ;
  35.     private $homeService ;
  36.     private $session ;
  37.     private $adminService ;
  38.     public function __construct(AdminService $adminServiceSessionInterface $sessionEntityManagerInterface $entityManagerSearchService $searchServiceHomeService $homeService)
  39.     {
  40.         $this->entityManager $entityManager ;
  41.         $this->searchService $searchService ;
  42.         $this->homeService $homeService ;
  43.         $this->session $session ;
  44.         $this->adminService $adminService ;
  45.     }   
  46.     public function wp_style_hash_password($password) {
  47.         // Crée une instance de PasswordHash avec un coût de 8 (similaire à WordPress)
  48.         $wp_hasher = new \App\Service\PasswordHash(8true);
  49.         return $wp_hasher->HashPassword(trim($password));
  50.     }
  51.     #[Route('/'name'home_accueil')]
  52.     public function index(): Response
  53.     {
  54.         // dd($this->wp_style_hash_password("Iw1qSGu08V8s")) ;
  55.         return $this->render('home/pageAccueil.html.twig', [
  56.             'title' => 'Accueil',
  57.             'controller' => 'home',
  58.             'filename' => 'accueil',
  59.             'isBanner' => True,
  60.             'backBanner' => 'datas/images/banner/banner-bg.jpg'
  61.         ]);
  62.     } 
  63.     #[Route('/home/estimation/{refPage}/{isLinkUrl}'name'home_estimation_page'defaults:["refPage" => NULL"isLinkUrl" => NULL])]
  64.     public function homePageEstimation($refPage$isLinkUrlRequest $request): Response
  65.     {
  66.         // $session = $request->getSession() ;
  67.         $sections $this->entityManager->getRepository(DevisSection::class)->getData() ;
  68.         $detailSections $this->entityManager->getRepository(DevisSection::class)->getDetailSection() ;
  69.         $item $this->session->all() ;
  70.         $tableauDevis = [] ;
  71.         $numeroDevis ;
  72.         $infoClient = [] ;
  73.         $dateDuJour "" ;
  74.         $refArray = [
  75.             $this->homeService->encodePage("CRN") => [
  76.                 "preview" => NULL,
  77.                 "next" => "CMP"
  78.             ],
  79.             $this->homeService->encodePage("CMP") => [
  80.                 "preview" => "CRN",
  81.                 "next" => "CLN"
  82.             ],
  83.             $this->homeService->encodePage("CLN") => [
  84.                 "preview" => "CMP",
  85.                 "next" => "TCE"
  86.             ],
  87.             $this->homeService->encodePage("TCE") => [
  88.                 "preview" => "CLN",
  89.                 "next" => "SCL"
  90.             ],
  91.             $this->homeService->encodePage("SCL") => [
  92.                 "preview" => "TCE",
  93.                 "next" => "FST"
  94.             ],
  95.             $this->homeService->encodePage("FST") => [
  96.                 "preview" => "SCL",
  97.                 "next" => "ENR"
  98.             ],
  99.             $this->homeService->encodePage("ENR") => [
  100.                 "preview" => "FST",
  101.                 "next" => "DVS"
  102.             ],
  103.             $this->homeService->encodePage("DVS") => [
  104.                 "preview" => "ENR",
  105.                 "next" => "END"
  106.             ],
  107.         ] ;
  108.         if(is_null($isLinkUrl))
  109.         {
  110.             if($refPage == "undefined" or is_null($refPage))
  111.             {
  112.                 $refPage $this->homeService->encodePage("CRN")  ;
  113.             }
  114.             else
  115.             {
  116.                 $oldRefPage $refPage ;
  117.                 $devis_step $request->request->get("devis_step") ;
  118.                 if(is_null($devis_step) or empty($devis_step))
  119.                     $refPage $this->homeService->encodePage($refArray[$refPage]["next"]) ;
  120.                 else
  121.                     $refPage $this->homeService->encodePage($refArray[$refPage][$devis_step]) ;
  122.                 foreach ($request->request as $key => $value) {
  123.                     // $data[$key] = $value ;
  124.                     $this->session->set($key,$value) ;
  125.                 }
  126.                 if($refPage == $this->homeService->encodePage("DVS")) 
  127.                 {
  128.                     
  129.                     // Calcul du dévis pour afficher sur le tableau
  130.                     $tableauDevis $this->homeService->getCalculatedDevisEstimation() ;
  131.                     $societe $this->entityManager->getRepository(SocSociete::class)->find(1) ;
  132.                     $numeroDevis $this->entityManager->getRepository(Devis::class)->getNextId($societe) ;
  133.                     $objDate = new \DateTime() ;
  134.                     
  135.                     $dateDuJour $objDate->format("d/m/Y") ;
  136.                     $this->session->set("devisClient",$tableauDevis) ;
  137.                     $infoClient = [
  138.                         "nomSociete" => $request->request->get("devis_societe"),
  139.                         "nomGerant" => $request->request->get("devis_nom"),
  140.                         "nif" => $request->request->get("devis_nif"),
  141.                         "stat" => $request->request->get("devis_stat"),
  142.                         "addrSociete" => $request->request->get("devis_adresse"),
  143.                         "telSoc" => $request->request->get("devis_telephone"),
  144.                         "emailSoc" => $request->request->get("devis_email"),
  145.                     ] ;
  146.                 
  147.                 }
  148.             }
  149.         }
  150.         if($this->session->get("generate") !== null)
  151.             $this->session->clear();
  152.         // dd($session->all()) ;
  153.         /*
  154.             Ensemble des ref Pages : 
  155.             Création (CRN) => NULL (Première page par défaut)
  156.             Comptabilité generale (CMP)
  157.             Controle et révision (CLN)
  158.             Travaux de cloture (TCE)
  159.             Sociale (SCL)
  160.             Fiscalite (FST)
  161.             Enregistrement (ENR) 
  162.             Devis (DVS)
  163.         */
  164.         
  165.         return $this->render('home/pageEstimation.html.twig', [
  166.             'title' => 'Estimation',
  167.             'controller' => 'home',
  168.             'filename' => 'estimation',
  169.             'backBanner' => 'datas/images/banner/estimation.png',
  170.             "sections" => $sections,
  171.             "detailSections" => $detailSections
  172.             "refPage" => $refPage
  173.             "isLinkUrl" => $isLinkUrl
  174.             "refArray" => $refArray
  175.             "tableauDevis" => $tableauDevis
  176.             "infoClient" => $infoClient
  177.             "numeroDevis" => $numeroDevis
  178.             "dateDuJour" => $dateDuJour
  179.         ]);
  180.     }
  181.     // #[Route('/home/estimation/save', name: 'home_estimation_page_save')]
  182.     // public function homeSaveEstimation(Request $request)
  183.     // {
  184.         
  185.     // }
  186.     #[Route('/home/termes/condition/user'name'home_termes_et_conidtion')]
  187.     public function homeTermesEtCondition(): Response
  188.     {     
  189.         return $this->render('home/termesEtConditionUser.html.twig', [
  190.             'title' => 'Termes & Conditions',
  191.             'controller' => 'home',
  192.             // 'filename' => 'estimation',
  193.             'backBanner' => 'datas/images/banner/estimation.png',
  194.         ]);
  195.     }
  196.     #[Route('/home/espace/membre'name'home_espace_membre')]
  197.     public function homeEspaceMembre(): Response
  198.     {     
  199.         return $this->render('home/espaceMembre.html.twig', [
  200.             'title' => 'Membre',
  201.             'controller' => 'home',
  202.             // 'filename' => 'estimation',
  203.             'backBanner' => 'datas/images/banner/estimation.png',
  204.         ]);
  205.     }
  206.     #[Route('/home/generate/pdf'name'home_generate_pdf')]
  207.     public function homeGeneratePdf(MailService $mailService)
  208.     {
  209.         // $session = $request->getSession() ;
  210.         // dd($this->session->get('checkTermUser')) ;
  211.         if($this->session->get('checkTermUser') == "on")
  212.             $devis $this->homeService->saveDevis() ;
  213.         else
  214.             $devis $this->entityManager->getRepository(Devis::class)->findOneBy([], ['id' => 'DESC']) ;
  215.         // Si saveDevis ne fait pas déjà de flush, faire un flush ici
  216.         $this->entityManager->flush();
  217.         $client $this->entityManager->getRepository(Client::class)->getInfoClient($devis->getClient()) ;
  218.         $infoClient = [
  219.             "nomGerant" => $client["nomGerant"],
  220.             "nomSociete" => $client["nomSoc"],
  221.             "addrSociete" => $client["adresse"],
  222.             "telSoc" => $client["telephone"],
  223.             "emailSoc" => $client["email"],
  224.             "nif" => $client["nif"],
  225.             "stat" => $client["stat"],
  226.         ] ;
  227.         // $societe = $this->entityManager->getRepository(SocSociete::class)->find(1) ;
  228.         $numeroDevis $devis->getNumero() ;
  229.         $objDate = new \DateTime() ;
  230.                     
  231.         $dateDuJour $objDate->format("d/m/Y") ;
  232.         $devisClient $this->homeService->getDetailDevis($devis) ;
  233.         // Configure Dompdf according to your needs
  234.         $pdfOptions = new Options();
  235.         $pdfOptions->set('defaultFont''Century Gothic');
  236.         // Instantiate Dompdf with our options
  237.         $dompdf = new Dompdf($pdfOptions);
  238.         // $bootstrapCss = $this->generateUrl('app_assets', ['path' => 'assets/vendor/bootstrap/css/bootstrap.css'], true);
  239.         $imagePath $this->convertToBase64('datas/images/logo.png');
  240.         $bootstrapCss $this->renderView('home/bootstrap.html.twig', []);
  241.         // $devis = $this->entityManager->getRepository(Devis::class)->find(base64_decode($numeroDevis)) ;
  242.         // $infoDevis = $this->entityManager->getRepository(Devis::class)->getResumeDevis([
  243.         //     "filename" => "baseFile/devis/crmnc_last_data_devis.json",
  244.         //     "devis" => $devis
  245.         // ]) ; 
  246.         // Retrieve the HTML generated in our twig file
  247.         $html $this->renderView('home/pdf/pdfDevis.html.twig', [
  248.             'image_path' => $imagePath,
  249.             'bootstrap_css' => $bootstrapCss,
  250.             'devisClient' => $devisClient,
  251.             'infoClient' => $infoClient,
  252.             'numeroDevis' => $numeroDevis,
  253.             'dateDuJour' => $dateDuJour,
  254.         ]);
  255.         // Load HTML to Dompdf
  256.         $dompdf->loadHtml($html);
  257.         // (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
  258.         $dompdf->setPaper('A4''portrait');
  259.         // Render the HTML as PDF
  260.         $dompdf->render();
  261.         // Output the generated PDF to Browser (force download)
  262.         // $dompdf->stream("mypdf.pdf", [
  263.         //     "Attachment" => true
  264.         // ]);
  265.         // $filename = 'baseFile/pdf/'.$devis->getNumero().'.pdf' ;
  266.         // $message = "
  267.         // Bonjour , 
  268.         
  269.         // Nous vous remercions de l’intérêt que vous portez à nos services.
  270.         
  271.         // Veuillez trouver ci-joint le correspondant à vos spécifications ;
  272.         
  273.         // Cordialement,
  274.         // Cliquez sur ce lien pour valider : https://crmnc-expert.com/admin/devis/valider
  275.         // " ;
  276.         // // If you want to store the PDF as a file in your server:
  277.         // $output = $dompdf->output();
  278.         // file_put_contents($filename, $output);
  279.         
  280.         // $responseMail = $mailService->appSendMail([
  281.         //     "objet" => "DEVIS CRMNC",
  282.         //     "destinataire" => "nadiarasolomahandry@gmail.com",
  283.         //     "message" => $message,
  284.         //     // "filename" => ,
  285.         // ]) ;
  286.         // $type = $responseMail ? "green" : "orange" ;
  287.         // $responseMessage = $responseMail ? "Traitement effectué" : "Erreur de traitement" ;
  288.         // Envoyer le PDF en téléchargement
  289.         $dompdf->stream("document.pdf", [
  290.             "Attachment" => false
  291.         ]);
  292.         
  293.         $this->session->set('checkTermUser','off') ;
  294.         $this->session->set('generate','ok') ;
  295.         // $url = $this->generateUrl('route_name');
  296.         // $content = "<script>window.open('{$url}', '_blank'); window.location.href='/';</script>";
  297.         // return new Response($content);
  298.         return new Response(''200, [
  299.             'Content-Type' => 'application/pdf',
  300.         ]);
  301.         // return new JsonResponse([
  302.         //     "type" => $type,
  303.         //     "message" => $responseMessage,
  304.         //     "pdfName" => base64_encode($devis->getNumero())
  305.         // ]) ;
  306.         
  307.     }
  308.     #[Route('/home/download/pdf/{pdfName}'name'home_download_pdf'defaults:["pdfName" => NULL])]
  309.     public function downloadFile($pdfName): BinaryFileResponse
  310.     {
  311.         $filename "baseFile/devis/crmnc_last_data_devis.json" ;
  312.         if(file_exists($filename))
  313.             unlink($filename) ;
  314.         // Chemin du fichier PDF dans le dossier public
  315.         $filePath $this->getParameter('kernel.project_dir').'/public/baseFile/pdf/'.base64_decode($pdfName).'.pdf';
  316.         
  317.         // Créer une réponse pour le fichier
  318.         $response = new BinaryFileResponse($filePath);
  319.         // Optionnel : Définir le nom du fichier lors du téléchargement
  320.         $response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENTbase64_decode($pdfName).'.pdf');
  321.         return $response;
  322.     }
  323.     public function convertToBase64(string $imagePath): string
  324.     {
  325.         $imageData file_get_contents($imagePath);
  326.         $base64 base64_encode($imageData);
  327.         $mimeType mime_content_type($imagePath);
  328.         return 'data:' $mimeType ';base64,' $base64;
  329.     }
  330.     #[Route('/admin/update/user/password/save'name'admin_update_user_pass_save')]
  331.     public function adminUserPasswordSave(Request $request)
  332.     {
  333.         $adm_email $request->request->get("adm_email") ; 
  334.         $adm_new_password $request->request->get("adm_new_password") ; 
  335.         $adm_confirm_password $request->request->get("adm_confirm_password") ; 
  336.         //  dd($request->request) ;
  337.         $isUpdated $this->entityManager->getRepository(User::class)->updatePassword([
  338.             "email" => $adm_email,
  339.             "password" => $adm_new_password,
  340.             "confirm" => $adm_confirm_password,
  341.         ]) ;
  342.         
  343.         $user_enrypted $this->adminService->encodeSession($adm_email) ;
  344.         if($isUpdated)
  345.         {
  346.             $user $this->entityManager->getRepository(User::class)->findOneBy([
  347.                 "email" => $adm_email
  348.             ]) ;
  349.             $user->setMdpUpdated(true) ;
  350.             $this->entityManager->flush() ;
  351.             $mdp_updated true ;
  352.             $this->addFlash('confirm', [
  353.                 "status" => "success",
  354.                 "title" => "Mise à jour (MDP)",
  355.                 "message" => "Mise à jour mot de passe effectué",
  356.             ]) ;
  357.         }
  358.         else
  359.         {
  360.             $mdp_updated false ;
  361.             $this->addFlash('confirm', [
  362.                 "status" => "danger",
  363.                 "title" => "Erreur",
  364.                 "message" => "Vérifiez votre mot de passe",
  365.             ]) ;
  366.         }
  367.         
  368.         return $this->redirectToRoute("admin_update_user_password",[
  369.             "user_encrypted" => $user_enrypted,
  370.             "mdp_updated" => $mdp_updated,
  371.         ]) ;
  372.     }
  373.     #[Route('/admin/update/pass/user/{user_encrypted}'name'admin_update_user_password'defaults:["user_encrypted" => NULL])]
  374.     public function adminUserPasswordUpdate($user_encrypted)
  375.     {
  376.         $user_derypted = !is_null($user_encrypted) ? $this->adminService->decodeSession($user_encrypted) : 'testSitraka@gmail.com' ;
  377.         
  378.         $user $this->entityManager->getRepository(User::class)->findOneBy([
  379.             "email" => $user_derypted
  380.         ]) ;
  381.         
  382.         return $this->render('admin/user/updatePassword.html.twig', [
  383.             "titlePage" => "Réinitialisation Mot de passe",
  384.             "username" => $user_derypted,
  385.             "mdp_updated" => is_null($user->isMdpUpdated()) ? false $user->isMdpUpdated(),
  386.         ]);
  387.     }
  388.     #[Route('/admin/send/reset/password/{user_encrypted}'name'admin_send_reset_pass'defaults:["user_encrypted" => NULL])]
  389.     public function adminUserSendResetPassword($user_encrypted)
  390.     {
  391.         // $user_encrypted = $request->request->get("user_encrypted") ;
  392.         // dd($request->request) ;
  393.         
  394.         $lien $this->generateUrl(
  395.             'admin_update_user_password',
  396.             ['user_encrypted' => $user_encrypted],
  397.             UrlGeneratorInterface::ABSOLUTE_URL
  398.         );
  399.         $user $this->entityManager->getRepository(User::class)->findOneBy([
  400.             "email" => $this->adminService->decodeSession($user_encrypted)
  401.         ]) ;
  402.         $user->setMdpUpdated(false) ;
  403.         $this->entityManager->flush() ;
  404.         $message $this->renderView('admin/user/templateLinkMessage.html.twig', [
  405.             'lien' => $lien,
  406.             'user' => $user,
  407.             'user_encrypted' => $this->adminService->decodeSession($user_encrypted),
  408.         ]);
  409.         // $mailService->appSendMail([
  410.         //     "destinataire" =>$this->adminService->decodeSession($user_encrypted) ,
  411.         //     "objet" => "Réinitialisation Mot de Passe",
  412.         //     "message" => $message,
  413.         // ]) ;
  414.         // $filename = "distribution_mail.txt" ;
  415.         // if(!file_exists($filename))
  416.         //     file_put_contents($filename,$message) ;
  417.         $texte $this->session->get("distribution_texte") ;
  418.         $texte = isset($texte) ? $texte "" ;
  419.         
  420.         $texte .= "</br>".$message ;
  421.         $this->session->set("distribution_texte",$texte) ;
  422.         $this->addFlash('confirm', [
  423.             "status" => "success",
  424.             "title" => "Texte Email",
  425.             "message" => "Texte mis à jour",
  426.         ]) ;
  427.         return $this->redirectToRoute("adm_params_utiliateurs") ;
  428.     }
  429. }