src/Controller/Marches/DevisController.php line 227

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Marches;
  3. use App\Entity\BureauMarche;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use App\Entity\Client;
  10. use App\Entity\Bordereau;
  11. use App\Service\ValidateService;
  12. use App\Service\BaseService;
  13. use App\Entity\Devis
  14. use App\Entity\DetailDevis
  15. use App\Entity\ModelBordereau
  16. use App\Entity\InfosModalBordereau
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. use Symfony\Component\Serializer\SerializerInterface;
  19. use App\Entity\Marche
  20. use Symfony\Component\HttpFoundation\Session\Session;
  21. use App\Repository\DevisRepository;
  22. use App\Entity\Bureau;
  23. use App\Entity\DetailBord;
  24. use App\Entity\InfosDetailBord;
  25. use Spipu\Html2Pdf\Html2Pdf;
  26. use App\Entity\LogUser
  27. use App\Repository\serviceRepo\archivesRepo;
  28. use App\Repository\BordereauRepository;
  29. use DateTime;
  30. class DevisController extends AbstractController
  31. {
  32.     public $baseService;
  33.     public function __construct(BaseService $baseService
  34.         )
  35.     {
  36.         $this->baseService $baseService;
  37.     }
  38.     #[Route('/addDevis'name'addDevis')]
  39.     public function addDevis(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService,
  40.     BaseService $baseService,DevisRepository $devisRepository): Response
  41.     {
  42.         $chckAccess $this->baseService->Role(53);
  43.         if($chckAccess == 0){
  44.             return $this->redirectToRoute('login');
  45.         }else if ($chckAccess == 2){
  46.             return $this->redirectToRoute('infoUtilisateur');
  47.         }
  48.         $response "";
  49.         $num $devisRepository->getNumero();
  50.         $client "";
  51.         $numero "DE-".$num."/".date('Y'); 
  52.         $objet "";
  53.         $date "";
  54.         $clients $entityManager->getRepository(Client::class)->findAll();
  55.         $bureaux $entityManager->getRepository(Bureau::class)->findAll();
  56.         return $this->render('devis/addDevis.html.twig', [
  57.             'controller_name' => 'DevisController',
  58.             'response' => $response,
  59.             'clients' => $clients,
  60.             'client' => $client,
  61.             'numero' => $numero,
  62.             'objet' => $objet,
  63.             'date' => $date,
  64.             'bureaux' => $bureaux
  65.         ]);
  66.     }
  67.     #[Route('/listDevis'name'listDevis')]
  68.     public function listDevis(Request $requestEntityManagerInterface $entityManager,BaseService $baseService): Response
  69.     {
  70.         $chckAccess $this->baseService->Role(52);
  71.         if($chckAccess == 0){
  72.             return $this->redirectToRoute('login');
  73.         }else if ($chckAccess == 2){
  74.             return $this->redirectToRoute('infoUtilisateur');
  75.         }
  76.         $session = new Session;
  77.         $bureauSelected $session->get('bureauSelected');
  78.         $devis $entityManager->getRepository(Devis::class)->findAll();
  79.   
  80.         $clients $entityManager->getRepository(Client::class)->findAll();
  81.         $years $baseService->getYears()["years"];
  82.         $months $baseService->getYears()["months"];
  83.         $yearsFin =  (new DateTime())->format('Y');
  84.         $yearSelect $yearsFin;
  85.         $bureaux $entityManager->getRepository(Bureau::class)->findAll();
  86.         return $this->render('devis/listDevis.html.twig', [
  87.             'controller_name' => 'DevisController',
  88.             'devis' => $devis,
  89.             'clients' => $clients,
  90.             'years'=>$years,
  91.             'months'=> $months,
  92.             'yearSelect'=> $yearSelect,
  93.             'bureaux' => $bureaux
  94.         ]);
  95.     }
  96.     #[Route('/listeDevisArchivees'name'listeDevisArchivees')]
  97.     public function listeDevisArchivees(Request $requestarchivesRepo $archivesRepo ,EntityManagerInterface $entityManager,BaseService $baseService): Response
  98.     {
  99.         $chckAccess $this->baseService->Role(56);
  100.         if($chckAccess == 0){
  101.             return $this->redirectToRoute('login');
  102.         }else if ($chckAccess == 2){
  103.             return $this->redirectToRoute('infoUtilisateur');
  104.         }
  105.         $session = new Session;
  106.         $bureauSelected $session->get('bureauSelected');
  107.        
  108.         $devis $entityManager->getRepository(Devis::class)->findAll();
  109.         
  110.         $clients $entityManager->getRepository(Client::class)->findAll();
  111.         $years $baseService->getYears()["years"];
  112.         $months $baseService->getYears()["months"];
  113.         $yearsFin =  (new DateTime())->format('Y');
  114.         $yearSelect $yearsFin;
  115.         $year $request->get("year");
  116.         $month $request->get("month");
  117.         // Create a DateTime object for the first day of the specified month and year
  118.         $firstDay = new \DateTime("$year-$month-01");
  119.         // Get the last day of the month by modifying the first day
  120.         $lastDay = clone $firstDay;
  121.         $lastDay->modify('last day of this month');
  122.         // Format the dates as strings in 'Y-m-d' format
  123.         $date_debut $firstDay->format('Y-m-d') ;
  124.         $date_fin $lastDay->format('Y-m-d');
  125.         $devis $archivesRepo->getDevis($date_debut $date_fin  ,$bureauSelected);
  126.         
  127.         return $this->render('devis/listDevisArchivees.html.twig', [
  128.             'controller_name' => 'DevisController',
  129.             'devis' => $devis,
  130.             'clients' => $clients,
  131.             'years'=>$years,
  132.             'buro'=>$bureauSelected,
  133.             'months'=> $months,
  134.             'yearSelect'=> $yearSelect
  135.         ]);
  136.     }
  137.     #[Route('/updateDevis'name'updateDevis')]
  138.     public function updateDevis(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService,BaseService $baseService): Response
  139.     {
  140.         $chckAccess $this->baseService->Role(54);
  141.         if($chckAccess == 0){
  142.             return $this->redirectToRoute('login');
  143.         }else if ($chckAccess == 2){
  144.             return $this->redirectToRoute('infoUtilisateur');
  145.         }
  146.         $response "";
  147.         $id=$request->get('id');
  148.         $devis $entityManager->getRepository(Devis::class)->find($id);
  149.         $details $entityManager->getRepository(DetailDevis::class)->findByIdDevis($id);
  150.         $clients $entityManager->getRepository(Client::class)->findAll();
  151.         $bureaux $entityManager->getRepository(Bureau::class)->findAll();
  152.         return $this->render('devis/updateDevis.html.twig', [
  153.             'controller_name' => 'DevisController',
  154.             'response' => $response,
  155.             'devis' => $devis,
  156.             'details' => $details,
  157.             'clients' => $clients,
  158.             'bureaux' => $bureaux
  159.         ]);
  160.     }
  161.     #[Route('/deleteDevis/{id}/'name'deleteDevis')]
  162.     public function deleteDevis(Request $requestEntityManagerInterface $entityManager,$id,BaseService $baseService): Response
  163.     {
  164.         $session = new Session;
  165.         $user $session->get('user');
  166.         $bureauSelected $session->get('bureauSelected');
  167.         
  168.         $response "";
  169.         $chckAccess $this->baseService->Role(55);
  170.         if($chckAccess == 0){
  171.             $response "Vous n'avez pas accès à cette opération";
  172.         }else if ($chckAccess == 2){
  173.             $response "Vous n'avez pas accès à cette opération";
  174.         }
  175.         if( $response == ""){
  176.             $devis $entityManager->getRepository(Devis::class)->find($id);
  177.     
  178.             if (!$devis
  179.             {
  180.                 $response 'Desolé, ce devis est introuvable !';
  181.             } 
  182.             else 
  183.             {
  184.                 // Remove the utilisateur
  185.                 $details $entityManager->getRepository(DetailDevis::class)->findByIdDevis($id);
  186.                 foreach ($details as $detail) {
  187.                     $entityManager->remove($detail);
  188.                 }
  189.                 
  190.                 $entityManager->remove($devis);
  191.                 $entityManager->flush();
  192.                 $baseService->addLogAction($user->getId(),'Supprimer un devis',$bureauSelected);
  193.                 $response "ok";
  194.             }
  195.         }
  196.         return new Response($response);
  197.     }
  198.     #[Route('/addBordereau'name'addBordereau')]
  199.     public function addBordereau(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService,
  200.     BaseService $baseServiceBordereauRepository $bordereauRepository): Response
  201.     {
  202.         $chckAccess $this->baseService->Role(59);
  203.         if($chckAccess == 0){
  204.             return $this->redirectToRoute('login');
  205.         }else if ($chckAccess == 2){
  206.             return $this->redirectToRoute('infoUtilisateur');
  207.         }
  208.         $session = new Session;
  209.         $user $session->get('user');
  210.         $bureauSelected $session->get('bureauSelected');
  211.         $response "";
  212.         $clients $entityManager->getRepository(Client::class)->findAll();
  213.         $modeles $entityManager->getRepository(ModelBordereau::class)->findAll();
  214.         $bureaux $entityManager->getRepository(Bureau::class)->findAll();
  215.         $num $bordereauRepository->getNumero();
  216.         $numero "Bord-".$num;
  217.         return $this->render('devis/addBordereau.html.twig', [
  218.             'controller_name' => 'DevisController',
  219.             'response' => $response,
  220.             'clients' => $clients,
  221.             'modeles' => $modeles,
  222.             'numero' => $numero,
  223.             'bureaux' => $bureaux
  224.         ]);
  225.     }
  226.     #[Route('/addModelBordereau'name'addModelBordereau')]
  227.     public function addModelBordereau(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService,BaseService $baseService): Response
  228.     {
  229.         $chckAccess $this->baseService->Role(64);
  230.         if($chckAccess == 0){
  231.             return $this->redirectToRoute('login');
  232.         }else if ($chckAccess == 2){
  233.             return $this->redirectToRoute('infoUtilisateur');
  234.         }
  235.         $response "";
  236.         $modeles $entityManager->getRepository(ModelBordereau::class)->findAll();
  237.         return $this->render('devis/addModelBordereau.html.twig', [
  238.             'controller_name' => 'DevisController',
  239.             'response' => $response,
  240.             'modeles' => $modeles,
  241.         ]);
  242.     }
  243.     #[Route('/addModalB'name'addModalB')]
  244.     public function addModalB(Request $requestEntityManagerInterface $entityManager,BaseService $baseService): Response
  245.     {
  246.         $session = new Session;
  247.         $user $session->get('user');
  248.         $bureauSelected $session->get('bureauSelected');
  249.         $response "";
  250.         $columns=$request->get('columns');
  251.         $relations=$request->get('relations');
  252.         $modalTitle=$request->get('modalTitle');
  253.         $designation=$request->get('designation');
  254.         $des=$request->get('des');
  255.         $quantite=$request->get('quantite');
  256.         
  257.         $qte=$request->get('qte');
  258.         $ttl=$request->get('ttl');
  259.         $ttlTTC=$request->get('ttlttc');
  260.         $response=json_encode($des);
  261.         if($modalTitle == "" || $modalTitle == null || trim($modalTitle) == "")
  262.         {
  263.             $response "Le champs titre est vide";
  264.         } 
  265.         else if ($des
  266.         {
  267.             if (($des) && $quantite){
  268.                 $ttlTTC $ttlTTC != '' $ttlTTC 'TOTAL TTC'  ;
  269.                 $modal = new ModelBordereau();
  270.                 $modal->setTitrModel($modalTitle);
  271.                 $modal->setDateCreation(new \DateTime());
  272.                 $modal->setDesignation($des);
  273.                 $modal->setTotalInPdf($ttlTTC);
  274.                 $entityManager->persist($modal);
  275.                 $entityManager->flush();
  276.         
  277.                 for($i 0;$i count($columns); $i++)
  278.                 {
  279.                     $infos = new InfosModalBordereau();
  280.                     $infos->setIdModal($modal->getId());
  281.                     $infos->setNomColMo($columns[$i]);
  282.                     if (isset($relations[$i])) 
  283.                     {
  284.                         $infos->setResSumCo($relations[$i]);
  285.                     }
  286.                     else
  287.                     {
  288.                         $infos->setResSumCo("");
  289.                     }
  290.                     
  291.                     if (isset($quantite) && ($quantite == $columns[$i])) 
  292.                     {
  293.                         $infos->setIsQte(1);
  294.                     }
  295.                     else
  296.                     {
  297.                         $infos->setIsQte(0);
  298.                     }
  299.                     if (isset($des) && ($des == $columns[$i])) 
  300.                     {
  301.                         $infos->setIsDes(1);
  302.                     }
  303.                     else
  304.                     {
  305.                         $infos->setIsDes(0);
  306.                     }
  307.                     // if($columns[$i] == "Quantité" && $qte!="" && $qte != null)
  308.                     // {
  309.                     //     $infos->setInPdf($qte); 
  310.                     // }
  311.                     if($columns[$i] == "Total" && $ttl!="" && $ttl != null)
  312.                     {
  313.                         $infos->setInPdf($ttl); 
  314.                     }
  315.     
  316.                     $entityManager->persist($infos);
  317.                     // Persist the Client entity and flush it to the database
  318.                     $entityManager->flush();
  319.                     $baseService->addLogAction($user->getId(),'Ajouter un modele de bordereau',$bureauSelected);
  320.     
  321.                 }
  322.     
  323.                 $response "OK";
  324.             }
  325.             else
  326.             {
  327.                 $response "Veuillez choisir la quantité";
  328.             }
  329.         }
  330.         else
  331.         {
  332.             $response "Veuillez choisir la designation dans le modele";
  333.         }
  334.         return new Response($response);
  335.     }
  336.     #[Route('/getModalInfos'name'getModalInfos')]
  337.     public function getModalInfos(Request $requestEntityManagerInterface $entityManager,BaseService $baseService,
  338.     SerializerInterface $serializer): Response
  339.     {
  340.         $response "";
  341.         $modeleId=$request->get('modeleId');
  342.         $modeles $entityManager->getRepository(InfosModalBordereau::class)->findByIdModal($modeleId);
  343.         
  344.         $resultmodeles array_values($modeles);
  345.         $modelesJson $serializer->serialize($resultmodeles'json');
  346.         return new JsonResponse($modelesJson200, [], true);
  347.     }
  348.     #[Route('/listBordereaux'name'listBordereaux')]
  349.     public function listBordereaux(Request $requestEntityManagerInterface $entityManager,BaseService $baseService,): Response
  350.     {
  351.         $chckAccess $this->baseService->Role(58);
  352.         if($chckAccess == 0){
  353.             return $this->redirectToRoute('login');
  354.         }else if ($chckAccess == 2){
  355.             return $this->redirectToRoute('infoUtilisateur');
  356.         }
  357.         $session = new Session;
  358.         $bureauSelected $session->get('bureauSelected');
  359.        
  360.             
  361.         $borderaux $entityManager->getRepository(Bordereau::class)->findAll();
  362.     
  363.       
  364.         $clients $entityManager->getRepository(Client::class)->findAll();
  365.         $years $baseService->getYears()["years"];
  366.         $months $baseService->getYears()["months"];
  367.         $yearsFin =  (new DateTime())->format('Y');
  368.         $yearSelect $yearsFin;
  369.         $bureaux $entityManager->getRepository(Bureau::class)->findAll();
  370.         return $this->render('devis/listBorderaux.html.twig', [
  371.             'controller_name' => 'DevisController',
  372.             'borderaux' => $borderaux,
  373.             'clients' => $clients,
  374.             'years'=>$years,
  375.             'months'=> $months,
  376.             'yearSelect'=> $yearSelect,
  377.             'bureaux' => $bureaux
  378.         ]);
  379.     }
  380.     #[Route('/listeBorderauxArchivees'name'listeBordereauxArchivees')]
  381.     public function listeBordereauxArchivees(Request $requestarchivesRepo $archivesRepo ,EntityManagerInterface $entityManager,BaseService $baseService): Response
  382.     {
  383.         $chckAccess $this->baseService->Role(62);
  384.         if($chckAccess == 0){
  385.             return $this->redirectToRoute('login');
  386.         }else if ($chckAccess == 2){
  387.             return $this->redirectToRoute('infoUtilisateur');
  388.         }
  389.         $session = new Session;
  390.         $bureauSelected $session->get('bureauSelected');
  391.       
  392.         $clients $entityManager->getRepository(Client::class)->findAll();
  393.         
  394.         $clients $entityManager->getRepository(Client::class)->findAll();
  395.         $years $baseService->getYears()["years"];
  396.         $months $baseService->getYears()["months"];
  397.         $yearsFin =  (new DateTime())->format('Y');
  398.         $yearSelect $yearsFin;
  399.         $year $request->get("year");
  400.         $month $request->get("month");
  401.         // Create a DateTime object for the first day of the specified month and year
  402.         $firstDay = new \DateTime("$year-$month-01");
  403.         // Get the last day of the month by modifying the first day
  404.         $lastDay = clone $firstDay;
  405.         $lastDay->modify('last day of this month');
  406.         // Format the dates as strings in 'Y-m-d' format
  407.         $date_debut $firstDay->format('Y-m-d') ;
  408.         $date_fin $lastDay->format('Y-m-d');
  409.         $bordereau $archivesRepo->getBordereau($date_debut $date_fin  ,$bureauSelected);
  410.         return $this->render('devis/listeBorderauxArchivees.html.twig', [
  411.             'controller_name' => 'DevisController',
  412.             'Bordereau' => $bordereau,
  413.             'clients' => $clients,
  414.             'years'=>$years,
  415.             'buro'=>$bureauSelected,
  416.             'months'=> $months,
  417.             'yearSelect'=> $yearSelect
  418.         ]);
  419.     }
  420.     #[Route('/updateBordereau'name'updateBordereau')]
  421.     public function updateBordereau(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService,BaseService $baseService): Response
  422.     {
  423.         $chckAccess $this->baseService->Role(60);
  424.         if($chckAccess == 0){
  425.             return $this->redirectToRoute('login');
  426.         }else if ($chckAccess == 2){
  427.             return $this->redirectToRoute('infoUtilisateur');
  428.         }
  429.         $response "";
  430.         $id=$request->get('id');
  431.         $bordereau $entityManager->getRepository(Bordereau::class)->find($id);
  432.         $clients $entityManager->getRepository(Client::class)->findAll();
  433.         $modeles $entityManager->getRepository(ModelBordereau::class)->findAll();
  434.         $bureaux $entityManager->getRepository(Bureau::class)->findAll();
  435.         $details $entityManager->getRepository(DetailBord::class)->findByIdBord($id);
  436.         $infoLines = [];
  437.         foreach ($details as $detail) {
  438.             $idDetail $detail->getId();
  439.             // Retrieve info details for the current detail
  440.             $infosDetailBord $entityManager->getRepository(InfosDetailBord::class)->findByIdDeta($idDetail);
  441.             foreach ($infosDetailBord as $infoDetail) {
  442.                 $idInfo $infoDetail->getIdInfo();
  443.                 $value $infoDetail->getValuInfo();
  444.                 if (!isset($infoLines[$idInfo])) {
  445.                     $infoLines[$idInfo] = [];
  446.                 }
  447.                 $infoLines[$idInfo][] = [
  448.                     'idInfo' => $idInfo,
  449.                     'value' => $value,
  450.                 ];
  451.                 
  452.             }
  453.         }
  454.         return $this->render('devis/updateBordereau.html.twig', [
  455.             'controller_name' => 'DevisController',
  456.             'response' => $response,
  457.             'bordereau' => $bordereau,
  458.             'clients' => $clients,
  459.             'modeles' => $modeles,
  460.             'details' => $details,
  461.             'infoCounts' => count($details),
  462.             'infoLines' => $infoLines,
  463.             'bureaux' => $bureaux
  464.         ]);
  465.     }
  466.     #[Route('/deleteBordereau/{id}/'name'deleteBordereau')]
  467.     public function deleteBordereau(Request $requestEntityManagerInterface $entityManager,$id,BaseService $baseService): Response
  468.     {
  469.         $response "";
  470.         $chckAccess $this->baseService->Role(61);
  471.         if($chckAccess == 0){
  472.             $response "Vous n'avez pas accès à cette opération";
  473.         }else if ($chckAccess == 2){
  474.             $response "Vous n'avez pas accès à cette opération";
  475.         }
  476.         if( $response == ""){
  477.             $session = new Session;
  478.             $user $session->get('user');
  479.             $bureauSelected $session->get('bureauSelected');
  480.     
  481.             // $check =  $baseService->checkAcces('SUPPPROF');
  482.             // if($check == 1)
  483.             // {
  484.             //     $session->remove('user');
  485.             //     $session->set('isConnected',false);
  486.         
  487.             //     return $this->redirectToRoute('login'); // Redirect to 'listBureaux' route
  488.             // }
  489.             // else if ( $check == 2 )
  490.             // {
  491.             //     return $this->redirectToRoute('listBureaux'); // Redirect to 'listBureaux' route
  492.             // }
  493.             $Bordereau $entityManager->getRepository(Bordereau::class)->find($id);
  494.     
  495.             if (!$Bordereau
  496.             {
  497.                 $response 'Desolé, cette bordereau est introuvable !';
  498.             } 
  499.             else 
  500.             {
  501.                 $details $entityManager->getRepository(DetailBord::class)->findByIdBord($id);
  502.                 foreach ($details as $detail) {
  503.                     $infosDetails $entityManager->getRepository(InfosDetailBord::class)->findByIdDeta($detail->getId());
  504.                     foreach ($infosDetails as $info) {
  505.                         $entityManager->remove($info);
  506.                     }
  507.                     $entityManager->remove($detail);
  508.                 }
  509.                 // Remove the utilisateur
  510.                 $entityManager->remove($Bordereau);
  511.                 $entityManager->flush();
  512.                 $baseService->addLogAction($user->getId(),'Supprimer une bordereau',$bureauSelected);
  513.                 $response "ok";
  514.             }
  515.         }
  516.         return new Response($response);
  517.     }
  518.     #[Route('/deleteModal/{id}/'name'deleteModal')]
  519.     public function deleteModal(Request $requestEntityManagerInterface $entityManager,$id,BaseService $baseService): Response
  520.     {
  521.         $response="";
  522.         $chckAccess $this->baseService->Role(66);
  523.         if($chckAccess == 0){
  524.             $response "Vous n'avez pas accès à cette opération";
  525.         }else if ($chckAccess == 2){
  526.             $response "Vous n'avez pas accès à cette opération";
  527.         }
  528.         if( $response == ""){
  529.             $session = new Session;
  530.             $user $session->get('user');
  531.             $bureauSelected $session->get('bureauSelected');
  532.     
  533.             $response "";
  534.             $modal $entityManager->getRepository(ModelBordereau::class)->find($id);
  535.             $borderaux $entityManager->getRepository(Bordereau::class)->findByIdModal($id);
  536.     
  537.             if(!$modal
  538.             {
  539.                
  540.                 $response 'Desolé, cette modele est introuvable !';
  541.     
  542.             } 
  543.             else if($borderaux)
  544.             {
  545.                 $response 'Desolé, cette modele est utilisé dans votre marches !';
  546.             }
  547.             else 
  548.             {
  549.                 $details $entityManager->getRepository(InfosModalBordereau::class)->findByIdModal($id);
  550.                 foreach ($details as $detail) {
  551.                     $entityManager->remove($detail);
  552.                 }
  553.     
  554.                 // Remove the utilisateur
  555.                 $entityManager->remove($modal);
  556.                 $entityManager->flush();
  557.                 $baseService->addLogAction($user->getId(),'Supprimer un modele de borderau',$bureauSelected);
  558.     
  559.                 $response "ok";
  560.                 
  561.             }
  562.         }
  563.         return new Response($response);
  564.     }
  565.     #[Route('/valideDevis/{id}/'name'valideDevis')]
  566.     public function valideDevis(Request $requestEntityManagerInterface $entityManager,$id,BaseService $baseService): Response
  567.     {
  568.         $response='';
  569.         $chckAccess $this->baseService->Role(119);
  570.         if($chckAccess == 0){
  571.             $response "Vous n'avez pas accès à cette opération";
  572.         }else if ($chckAccess == 2){
  573.             $response "Vous n'avez pas accès à cette opération";
  574.         }
  575.         if( $response == ""){
  576.             $session = new Session;
  577.             $user $session->get('user');
  578.             $bureauSelected $session->get('bureauSelected');
  579.     
  580.             $response "";
  581.             $devis $entityManager->getRepository(Devis::class)->find($id);
  582.     
  583.             if (!$devis
  584.             {
  585.                 $response 'Desolé, cette devis est introuvable !';
  586.             } 
  587.             else 
  588.             {
  589.                 $devis->setEtatDevis(1);
  590.     
  591.                 $marche = new Marche();
  592.                 $marche->setNumeMarc($devis->getNumeDevi());
  593.                 $marche->setDateCreation(new \DateTime());
  594.                 $marche->setObjeMarc($devis->getObjeDevi());
  595.                 $marche->setTotalHt($devis->getTotalTh());
  596.                 $marche->setTotalTtc($devis->getTotalTtc());
  597.                 $marche->setTva($devis->getTva());
  598.                 $marche->setEtatMarc(0);
  599.                 $marche->setIdClient($devis->getIdClient());
  600.                 $marche->setTypeMarc(1);
  601.                 $marche->setIdDevis($devis->getId());
  602.                 $marche->setdescMarc("");
  603.                 $marche->setModePaie(0);
  604.                 $marche->setDateDebut(new \DateTime());
  605.                 $marche->setDateFin(new \DateTime());
  606.                 $entityManager->persist($marche);
  607.     
  608.                 $entityManager->flush();
  609.     
  610.                 $marche_bureau = new BureauMarche();
  611.                 $marche_bureau->setIdMarche($marche->getId());
  612.                 $marche_bureau->setIdBureau($bureauSelected);
  613.                 $entityManager->persist($marche_bureau);
  614.                 $entityManager->flush();
  615.                 $baseService->addLogAction($user->getId(),'Valider un devis',$bureauSelected);
  616.     
  617.                 $response "ok";
  618.      
  619.             }
  620.         }
  621.         return new Response($response);
  622.     }
  623.     #[Route('/valideBordereau/{id}/'name'valideBordereau')]
  624.     public function valideBordereau(Request $requestEntityManagerInterface $entityManager,$id,BaseService $baseService): Response
  625.     {
  626.         $response='';
  627.         $chckAccess $this->baseService->Role(120);
  628.         if($chckAccess == 0){
  629.             $response "Vous n'avez pas accès à cette opération";
  630.         }else if ($chckAccess == 2){
  631.             $response "Vous n'avez pas accès à cette opération";
  632.         }
  633.         if($response == ""){
  634.             $session = new Session;
  635.             $user $session->get('user');
  636.             $bureauSelected $session->get('bureauSelected');
  637.     
  638.             $response "";
  639.             $bordereau $entityManager->getRepository(Bordereau::class)->find($id);
  640.     
  641.             if (!$bordereau
  642.             {
  643.                
  644.                 $response 'Desolé, cette bordereau est introuvable !';
  645.     
  646.             } 
  647.             else 
  648.             {
  649.     
  650.                 $bordereau->setEtatBord(1);
  651.     
  652.                 $marche = new Marche();
  653.                 $marche->setNumeMarc($bordereau->getNumeAo());
  654.                 $marche->setDateCreation(new \DateTime());
  655.                 $marche->setObjeMarc($bordereau->getObjeBord());
  656.                 $marche->setTotalHt($bordereau->getTotalHt());
  657.                 $marche->setTotalTtc($bordereau->getTotalTtc());
  658.                 $marche->setTva($bordereau->getTva());
  659.                 $marche->setEtatMarc(0);
  660.                 $marche->setIdClient($bordereau->getIdClient());
  661.                 $marche->setTypeMarc(2);
  662.                 $marche->setIdDevis($bordereau->getId());
  663.                 $marche->setdescMarc("");
  664.                 $marche->setModePaie(0);
  665.                 $marche->setDateDebut(new \DateTime());
  666.                 $marche->setDateFin(new \DateTime());
  667.                 $entityManager->persist($marche);
  668.                 $entityManager->flush();
  669.     
  670.                 $marche_bureau = new BureauMarche();
  671.                 $marche_bureau->setIdMarche($marche->getId());
  672.                 $marche_bureau->setIdBureau($bureauSelected);
  673.                 $entityManager->persist($marche_bureau);
  674.                 $entityManager->flush();
  675.                 $baseService->addLogAction($user->getId(),'Valider une bordereau de prix',$bureauSelected);
  676.                 $response "ok";
  677.       
  678.             }
  679.         }
  680.         return new Response($response);
  681.     }
  682.     #[Route('/archiverDevis/{id}/'name'archiverDevis')]
  683.     public function archiverDevis(Request $requestEntityManagerInterface $entityManager,
  684.     BaseService $baseService,$id): Response
  685.     {
  686.         $response='';
  687.         $chckAccess $this->baseService->Role(57);
  688.         if($chckAccess == 0){
  689.             $response "Vous n'avez pas accès à cette opération";
  690.         }else if ($chckAccess == 2){
  691.             $response "Vous n'avez pas accès à cette opération";
  692.         }
  693.         if( $response == ""){
  694.             $session = new Session;
  695.             $user $session->get('user');
  696.             $bureauSelected $session->get('bureauSelected');
  697.             $devis $entityManager->getRepository(Devis::class)->find($id);
  698.     
  699.             if (!$devis
  700.             {
  701.                
  702.                 $response 'Desolé, ce devis est introuvable !';
  703.             } 
  704.             else 
  705.             {
  706.     
  707.                 // Toggle the etatBure (change status)
  708.                 $devis->setEtatDevis(2);
  709.                 $baseService->addLogAction($user->getId(),'Archiver un devis',$bureauSelected);
  710.     
  711.                 // Persist the changes
  712.                 $entityManager->flush();
  713.     
  714.                 $response "ok";
  715.             }
  716.         }
  717.         return new Response($response);
  718.     }
  719.     #[Route('/archiverBord/{id}/'name'archiverBord')]
  720.     public function archiverBord(Request $requestEntityManagerInterface $entityManager,
  721.     BaseService $baseService,$id): Response
  722.     {
  723.         $response='';
  724.         $chckAccess $this->baseService->Role(67);
  725.         if($chckAccess == 0){
  726.             $response "Vous n'avez pas accès à cette opération";
  727.         }else if ($chckAccess == 2){
  728.             $response "Vous n'avez pas accès à cette opération";
  729.         }
  730.         if( $response == ""){
  731.             $session = new Session;
  732.             $user $session->get('user');
  733.             $bureauSelected $session->get('bureauSelected');
  734.             $bord $entityManager->getRepository(Bordereau::class)->find($id);
  735.     
  736.             if (!$bord
  737.             {
  738.                
  739.                 $response 'Desolé, cette bordereau de prix est introuvable !';
  740.             } 
  741.             else 
  742.             {
  743.     
  744.                 // Toggle the etatBure (change status)
  745.                 $bord->setEtatBord(2);
  746.     
  747.                 // Persist the changes
  748.                 $entityManager->flush();
  749.                 $baseService->addLogAction($user->getId(),'Archiver une bordereau',$bureauSelected);
  750.     
  751.                 $response "ok";
  752.                 
  753.             }
  754.         }
  755.         return new Response($response);
  756.     }
  757.     #[Route('/pdfDevis/{id}/'name'pdfDevis')]
  758.     public function pdfDevis(Request $requestEntityManagerInterface $entityManager,$id)
  759.     {
  760.         $chckAccess $this->baseService->Role(121);
  761.         if($chckAccess == 0){
  762.             return $this->redirectToRoute('login');
  763.         }else if ($chckAccess == 2){
  764.             return $this->redirectToRoute('infoUtilisateur');
  765.         }
  766.         $devis =  $entityManager->getRepository(Devis::class)->find($id);
  767.         $detailsBonCommande =  $entityManager->getRepository(DetailDevis::class)->findByIdDevis($id);
  768.         $client $entityManager->getRepository(Client::class)->find($devis->getIdClient());
  769.         if(!$client || !$detailsBonCommande || !$devis){
  770.             return $this->redirectToRoute('listDevis');
  771.         }
  772.         
  773.         $totalHt 0;
  774.         $totalTva 0;
  775.         $tauxTva $devis->getTva(); 
  776.         foreach ($detailsBonCommande as $detail) {
  777.             $qte $detail->getQte(); 
  778.             $prixUnitaire $detail->getTotalHt(); 
  779.             $totalDetailHt $qte $prixUnitaire;
  780.             $totalHt += $totalDetailHt;
  781.             $totalTva += $prixUnitaire * ($tauxTva 100);
  782.         }
  783.         // Render the view
  784.         $htmlContent $this->renderView('devis/devisPDF.html.twig', [
  785.             'd' => $devis,
  786.             'details' => $detailsBonCommande,
  787.             'client' => $client,
  788.             'totalTva' => number_format($totalTva2'.''')
  789.         ]);
  790.         $html2pdf = new Html2Pdf();
  791.         $html2pdf->writeHTML($htmlContent);
  792.         $pdfOutput $html2pdf->output();
  793.         $response = new Response($pdfOutput);
  794.         $response->headers->set('Content-Type''application/pdf');
  795.         $response->headers->set('Content-Disposition''inline; filename=bon_commande.pdf');
  796.         return $response;
  797.      
  798.     }
  799.     #[Route('/pdfBordereau/{id}/'name'pdfBordereau')]
  800.     public function pdfBordereau(Request $requestEntityManagerInterface $entityManagerBordereauRepository $repo,$id)
  801.     {
  802.         $session = new Session();
  803.         $chckAccess $this->baseService->Role(122);
  804.         if($chckAccess == 0){
  805.             return $this->redirectToRoute('login');
  806.         }else if ($chckAccess == 2){
  807.             return $this->redirectToRoute('infoUtilisateur');
  808.         }
  809.         $bordereau $entityManager->getRepository(Bordereau::class)->find($id);
  810.         $model $entityManager->getRepository(ModelBordereau::class)->find($bordereau->getIdModal());
  811.         $client $entityManager->getRepository(Client::class)->find($bordereau->getIdClient());
  812.         $infos $entityManager->getRepository(InfosModalBordereau::class)->findByIdModal($bordereau->getIdModal());
  813.         $details $entityManager->getRepository(DetailBord::class)->findByIdBord($id);
  814.         $idBureau $session->get('bureauSelected');
  815.         $bureau $entityManager->getRepository(Bureau::class)->find($idBureau); 
  816.         $infoLines = [];
  817.         foreach ($details as $detail) {
  818.             $idDetail $detail->getId();
  819.             // Retrieve info details for the current detail
  820.             $infosDetailBord $entityManager->getRepository(InfosDetailBord::class)->findByIdDeta($idDetail);
  821.             foreach ($infosDetailBord as $infoDetail) {
  822.                 $idInfo $infoDetail->getIdInfo();
  823.                 $value $infoDetail->getValuInfo();
  824.                 if (!isset($infoLines[$idInfo])) {
  825.                     $infoLines[$idInfo] = [];
  826.                 }
  827.                 $infoLines[$idInfo][] = [
  828.                     'idInfo' => $idInfo,
  829.                     'value' => $value,
  830.                 ];
  831.                 
  832.             }
  833.         }
  834.         // Merge $infos with $infoLines based on 'id' property
  835.         $mergedInfo = [];
  836.         foreach ($infos as $info) {
  837.             $idInfo $info->getId();
  838.             $mergedInfo[$idInfo] = [
  839.                 'idInfo' => $idInfo,
  840.                 'nomColMo' => $info->getNomColMo(),
  841.                 'resSumCo' => $info->getResSumCo(),
  842.                 'inPdf' => $info->getInPdf(),
  843.                 'isDes' => $info->getIsDes(),
  844.                 'isQte' => $info->getIsQte(),
  845.                 'values' => isset($infoLines[$idInfo]) ? $infoLines[$idInfo] : [],
  846.             ];
  847.         }
  848.         $htmlContent $this->renderView('devis/bordereauPDF.html.twig', [
  849.             'd' => $bordereau,
  850.             'mergedInfo' => $mergedInfo,
  851.             'client' => $client,
  852.             'model' => $model,
  853.             'bureau'=>$bureau
  854.         ]);
  855.         
  856.         $html2pdf = new Html2Pdf();
  857.         $html2pdf->writeHTML($htmlContent);
  858.         $pdfOutput $html2pdf->output();
  859.         $response = new Response($pdfOutput);
  860.         $response->headers->set('Content-Type''application/pdf');
  861.         $response->headers->set('Content-Disposition''inline; filename=bon_commande.pdf');
  862.         return $response;
  863.     }
  864.     #[Route('/ajaxUpdateDevis'name'ajaxUpdateDevis')]
  865.     public function ajaxUpdateBonCommande(Request $requestEntityManagerInterface $entityManagerSerializerInterface $serializer,
  866.     ValidateService $validateService,DevisRepository $devisRepository,BaseService $baseService): Response
  867.     {
  868.         $response "";
  869.         $chckAccess $this->baseService->Role(54);
  870.         if($chckAccess == 0){
  871.             $response "Vous n'avez pas accès à cette opération";
  872.         }else if ($chckAccess == 2){
  873.             $response "Vous n'avez pas accès à cette opération";
  874.         }
  875.         if( $response == ""){
  876.             $session = new Session;
  877.             $user $session->get('user');
  878.             $bureauSelected $session->get('bureauSelected');
  879.             $response "";
  880.             $num $devisRepository->getNumero();
  881.             $id=$request->get('id');
  882.             $devis $entityManager->getRepository(Devis::class)->find($id);
  883.             $details $entityManager->getRepository(DetailDevis::class)->findByIdDevis($id);
  884.     
  885.             $client=$request->get('client');
  886.             $numero=$request->get('numero');
  887.             $objet=$request->get('objet');
  888.             $tva=$request->get('tva');
  889.             $date=$request->get('date');
  890.             $objetDetail=$request->get('objetDetail');
  891.             $qteDetail=$request->get('qteDetail');
  892.             $totalThDetail=$request->get('totalThDetail');
  893.             $hht=$request->get('hht');
  894.             $httc=$request->get('httc');
  895.             if($bureauSelected == 0)
  896.             {
  897.                 $bureau=$request->get('bureau');
  898.             }
  899.             $contraintes = array(
  900.                 "numero" => array("val" => $numero"length" => 255"type" => "string""isBlank" => true),
  901.                 "objet" => array("val" => $objet"length" => 255"type" => "string""isBlank" => true),
  902.                 "totalThDetail" => array("val" => $hht"type" => "float""isBlank" => true),
  903.             );
  904.             $valideDevis $validateService->validateur($contraintes);
  905.             if($valideDevis === true)
  906.             {
  907.                 $dv $entityManager->getRepository(Devis::class)->findBy(array("refeDevi" => $numero));
  908.                 if($numero!=  $devis->getRefeDevi() && $dv)
  909.                 {
  910.                     $response 'Cette référence de devis est déjà exist, Veuillez vérifier s\'il vous plaît.';
  911.                 }
  912.                 else
  913.                 {
  914.                     $checkDetail 0;
  915.                     for ($k=0$k count($objetDetail); $k++) { 
  916.                         if(empty(trim($objetDetail[$k])) == " "){
  917.                             $checkDetail 1;
  918.                             // break;
  919.                         }
  920.                     }
  921.                     if($checkDetail == 0){
  922.                         for ($k=0$k count($totalThDetail); $k++) { 
  923.                             if(empty(trim($totalThDetail[$k])) == " "){
  924.                                 if(!is_numeric($totalThDetail[$k])){
  925.                                     $checkDetail 1;
  926.                                 }
  927.                                 // break;
  928.                             }
  929.                         }
  930.                         for ($k=0$k count($qteDetail); $k++) { 
  931.                             if(empty(trim($qteDetail[$k])) == " "){
  932.                                 $checkDetail 1;
  933.                                 // break;
  934.                             }
  935.                         }
  936.                     }
  937.                     
  938.                     if($checkDetail == 0){
  939.                         
  940.                         $devis->setRefeDevi($numero);
  941.                         $devis->setIdClient($client);
  942.                         $devis->setObjeDevi($objet);
  943.                         $devis->setTotalTh($hht);
  944.                         $devis->setTotalTtc($httc);
  945.                         $devis->setTva($tva);
  946.                         $devis->setDateEcheance( new \DateTime($date));
  947.         
  948.                         foreach($details as $detail)
  949.                         {
  950.                             $entityManager->remove($detail);
  951.         
  952.                         }
  953.         
  954.                         for($i=0;$i<count($objetDetail);$i++)
  955.                         {
  956.         
  957.                             $detail = new DetailDevis();
  958.                             $detail->setIdDevis($devis->getId());
  959.                             $detail->setTotalHt($totalThDetail[$i]);
  960.                             $detail->setdescDetDev($objetDetail[$i]);
  961.                             $detail->setQte($qteDetail[$i]);
  962.                             $entityManager->persist($detail);
  963.                             // Persist the Client entity and flush it to the database
  964.             
  965.                         }
  966.         
  967.         
  968.                         $entityManager->flush();
  969.                         $baseService->addLogAction($user->getId(),'Modifier un devis',$bureauSelected);
  970.         
  971.                         $response 'ok';
  972.                     }else{
  973.                         $response 'Veuillez vérifier vos details devis !';
  974.                     }    
  975.                 }
  976.             }
  977.             else
  978.             {
  979.                 $response 'Veuillez vérifier vos informations, un des champs est incorrect !';
  980.             }
  981.             
  982.         }
  983.         return new Response($response);
  984.     }
  985.     #[Route('/ajaxAddDevis'name'ajaxAddDevis')]
  986.     public function ajaxAddBonCommande(Request $requestEntityManagerInterface $entityManagerSerializerInterface $serializer,
  987.     ValidateService $validateService,DevisRepository $devisRepository,BaseService $baseService): Response
  988.     {
  989.             $response "";
  990.             $chckAccess $this->baseService->Role(53);
  991.             if($chckAccess == 0){
  992.                 $response "Vous n'avez pas accès à cette opération";
  993.             }else if ($chckAccess == 2){
  994.                 $response "Vous n'avez pas accès à cette opération";
  995.             }
  996.             if( $response == ""){
  997.     
  998.                 $session = new Session;
  999.                 $user $session->get('user');
  1000.                 $bureauSelected $session->get('bureauSelected');
  1001.     
  1002.                 $num $devisRepository->getNumero();
  1003.     
  1004.         
  1005.                 $client=$request->get('client');
  1006.                 $numero=$request->get('numero');
  1007.                 $objet=$request->get('objet');
  1008.                 $tva=$request->get('tva');
  1009.                 $date=$request->get('date');
  1010.                 $objetDetail=$request->get('objetDetail');
  1011.                 $qteDetail=$request->get('qteDetail');
  1012.                 $totalThDetail=$request->get('totalThDetail');
  1013.                 $hht=$request->get('hht');
  1014.                 $httc=$request->get('httc');
  1015.                 if($bureauSelected == 0)
  1016.                 {
  1017.                     $bureau=$request->get('bureau');
  1018.                 }
  1019.                 
  1020.                 $contraintes = array(
  1021.                     "numero" => array("val" => $numero"length" => 255"type" => "string""isBlank" => true),
  1022.                     "objet" => array("val" => $objet"length" => 255"type" => "string""isBlank" => true),
  1023.                     "totalThDetail" => array("val" => $hht"type" => "float""isBlank" => true),
  1024.                 );
  1025.     
  1026.                 $valideDevis $validateService->validateur($contraintes);
  1027.                 if($valideDevis === true)
  1028.                 {
  1029.                     $dv $entityManager->getRepository(Devis::class)->findBy(array("refeDevi" => $numero));
  1030.                     if($dv)
  1031.                     {
  1032.                         $response 'Cette référence de devis est déjà exist, Veuillez vérifier s\'il vous plaît.';
  1033.                     }
  1034.                     else
  1035.                     {
  1036.                         $checkDetail 0;
  1037.                         for ($k=0$k count($objetDetail); $k++) { 
  1038.                             if(empty(trim($objetDetail[$k])) == " "){
  1039.                                 $checkDetail 1;
  1040.                                 // break;
  1041.                             }
  1042.                         }
  1043.                         if($checkDetail == 0){
  1044.                             for ($k=0$k count($totalThDetail); $k++) { 
  1045.                                 if(empty(trim($totalThDetail[$k])) == " "){
  1046.                                     $checkDetail 1;
  1047.                                     // break;
  1048.                                 }
  1049.                             }
  1050.                             for ($k=0$k count($qteDetail); $k++) { 
  1051.                                 if(empty(trim($qteDetail[$k])) == " "){
  1052.                                     $checkDetail 1;
  1053.                                     // break;
  1054.                                 }
  1055.                             }
  1056.                         }
  1057.                         if($checkDetail == 0){
  1058.                             $checkHT true;
  1059.                             foreach ($totalThDetail as $value) {
  1060.                                 if(!is_numeric($value)){
  1061.                                     $checkHT false;
  1062.                                     break;
  1063.                                 }
  1064.                             }
  1065.                             if($checkHT){
  1066.                                 $devis = new Devis();
  1067.                                 $devis->setNumeDevi($num);
  1068.                                 $devis->setDateCreation(new \DateTime());
  1069.                                 $devis->setIdClient($client);
  1070.                                 $devis->setObjeDevi($objet);
  1071.                                 $devis->setTotalTh($hht);
  1072.                                 $devis->setTotalTtc($httc);
  1073.                                 $devis->setTva($tva);
  1074.                                 $devis->setEtatDevis(0);
  1075.                                 $devis->setRefeDevi($numero);
  1076.                                 $devis->setYear(date('Y'));
  1077.         
  1078.                                 $devis->setDateEcheance( new \DateTime($date));
  1079.                                 $entityManager->persist($devis);
  1080.                                 // Persist the Client entity and flush it to the database
  1081.                                 $entityManager->flush();
  1082.                                 $baseService->addLogAction($user->getId(),'Ajouter un devis',$bureauSelected);
  1083.                 
  1084.                                 for($i=0;$i<count($objetDetail);$i++)
  1085.                                 {
  1086.                                     $detail = new DetailDevis();
  1087.                                     $detail->setIdDevis($devis->getId());
  1088.                                     $detail->setTotalHt($totalThDetail[$i]);
  1089.                                     $detail->setdescDetDev($objetDetail[$i]);
  1090.                                     $detail->setQte($qteDetail[$i]);
  1091.                                     
  1092.                                     $entityManager->persist($detail);
  1093.                                     // Persist the Client entity and flush it to the database
  1094.                                     $entityManager->flush();
  1095.                                 }
  1096.                 
  1097.                                 $response 'ok';
  1098.                             }
  1099.                             else
  1100.                             {
  1101.                                 $response 'Veuillez vérifier vos details devis !';
  1102.                             }
  1103.                         }else{
  1104.                             $response 'Veuillez vérifier vos details devis !';
  1105.                         }
  1106.                     }
  1107.                 }
  1108.                 else
  1109.                 {
  1110.                     $response 'Veuillez vérifier vos informations, un des champs est incorrect !';
  1111.                 }
  1112.             }
  1113.         
  1114.         return new Response($response);
  1115.     }
  1116.     #[Route('/ajaxAddBord'name'ajaxAddBord')]
  1117.     public function ajaxAddBord(Request $requestEntityManagerInterface $entityManagerSerializerInterface $serializer,
  1118.     ValidateService $validateServiceBordereauRepository $bordereauRepository,BaseService $baseService): Response
  1119.     {
  1120.         $session = new Session;
  1121.         $user $session->get('user');
  1122.         $bureauSelected $session->get('bureauSelected');
  1123.         $response "";
  1124.         $num $bordereauRepository->getNumero();
  1125.         $client$request->get('client');
  1126.         $numero$request->get('numerobord');
  1127.         $objet$request->get('objet');
  1128.         $tva$request->get('tva');
  1129.         $date$request->get('date');
  1130.         $htt$request->get('hht');
  1131.         $httc$request->get('httc');
  1132.         $modele$request->get('modele');
  1133.         if($bureauSelected == 0)
  1134.         {
  1135.             $bureau=$request->get('bureau');
  1136.         }
  1137.         $modal $entityManager->getRepository(ModelBordereau::class)->find($modele);
  1138.         
  1139.         if(!$modal)
  1140.         {
  1141.             $response 'Merci de choisir un modèle de bordereau.';
  1142.         }
  1143.         else
  1144.         {
  1145.             $qteName $entityManager->getRepository(InfosModalBordereau::class)->findOneBy(['idModal'=>$modele ,'isQte'=>1]);
  1146.             // $response = json_encode($qteName->getNomColMo());
  1147.             $contraintes = array(
  1148.                 "numero" => array("val" => $numero"length" => 255"type" => "string""isBlank" => true),
  1149.                 "objet" => array("val" => $objet"length" => 255"type" => "string""isBlank" => true),
  1150.                 "htt" => array("val" =>  $htt"type" => "float""isBlank" => true),
  1151.                 "httc" => array("val" => $httc"type" => "float""isBlank" => true),
  1152.             );
  1153.             $valideBordereau $validateService->validateur($contraintes);
  1154.             if($valideBordereau === true)
  1155.             {
  1156.                 $br $entityManager->getRepository(Bordereau::class)->findBy(array("refeBord" => $numero));
  1157.                 if($br)
  1158.                 {
  1159.                     $response 'Cette référence de bordereau est déjà exist, Veuillez vérifier s\'il vous plaît.';
  1160.                 }
  1161.                 else
  1162.                 {
  1163.                     $total $request->get('total');
  1164.                     $des $modal->getDesignation();
  1165.                     $designation $request->get(strtolower(str_replace(' ','_',$des)));
  1166.                     $count count($total);
  1167.                     $checkDetail true;
  1168.                     for ($i 0$i $count$i++) {
  1169.                         if(empty(trim($total[$i])) or  ($total[$i] < 0) or empty(trim($designation[$i]))  ) 
  1170.                         {
  1171.                             $checkDetail false;
  1172.                             break;
  1173.                         }
  1174.                     }
  1175.                     if($checkDetail == true){
  1176.                         $bordereau = new Bordereau();
  1177.                         $bordereau->setNumeAo($num);
  1178.                         $bordereau->setDateCreation(new \DateTime());
  1179.                         $bordereau->setIdClient($client);
  1180.                         $bordereau->setObjeBord($objet);
  1181.                         $bordereau->setTotalHt($htt);
  1182.                         $bordereau->setTotalTtc($httc);
  1183.                         $bordereau->setTva($tva);
  1184.                         $bordereau->setEtatBord(0);
  1185.                         $bordereau->setIdModal($modele);
  1186.                         $bordereau->setDateEcheance(new \DateTime($date));
  1187.                         $bordereau->setRefeBord($numero);
  1188.         
  1189.                         $entityManager->persist($bordereau);
  1190.                         // Persist the Client entity and flush it to the database
  1191.                         $entityManager->flush();
  1192.             
  1193.                         $infosModalBordereau $entityManager->getRepository(InfosModalBordereau::class)->findByIdModal($modele);
  1194.     
  1195.                         $des $modal->getDesignation();
  1196.                         $total $request->get('total');
  1197.                         $qte $request->get(strtolower($qteName->getNomColMo()));
  1198.                         $designation $request->get(strtolower(str_replace(' ','_',$des)));
  1199.     
  1200.                         $count count($total);
  1201.     
  1202.                         for ($i 0$i $count$i++) {
  1203.                             $detail = new DetailBord();
  1204.                             $detail->setIdBord($bordereau->getId());
  1205.                             $detail->setTotal($total[$i]);
  1206.                             $detail->setQte($qte[$i]);
  1207.                             $detail->setObjet($designation[$i]);
  1208.                             $entityManager->persist($detail);
  1209.                             $entityManager->flush();
  1210.                             
  1211.                             foreach ($infosModalBordereau as $info) {
  1212.                                 $name =strtolower($info->getNomColMo());
  1213.                                 $idInfo $info->getId();
  1214.                                 $modeleValues $request->get(str_replace(' ','_',$name));
  1215.     
  1216.                                 $infosDetailBord = new InfosDetailBord();
  1217.                                 $infosDetailBord->setIdDeta($detail->getId());
  1218.                                 $infosDetailBord->setIdInfo($idInfo);
  1219.                                 $infosDetailBord->setValuInfo($modeleValues[$i]);
  1220.                                 $entityManager->persist($infosDetailBord);
  1221.                                 $entityManager->flush();
  1222.                             }
  1223.                         }
  1224.                         $entityManager->flush();
  1225.                         $baseService->addLogAction($user->getId(),'Ajouter un bordereau',$bureauSelected);
  1226.                         $response'ok';
  1227.                     }else{
  1228.                         $response 'Veuillez vérifier votre details saisie !';
  1229.                     }
  1230.                 }
  1231.             }
  1232.             else
  1233.             {
  1234.                 $response 'Veuillez vérifier vos informations, un des champs est incorrect !';
  1235.             }
  1236.             
  1237.         }
  1238.         return new Response($response);
  1239.     }
  1240.     #[Route('/ajaxUpdateBord'name'ajaxUpdateBord')]
  1241.     public function ajaxUpdateBord(Request $requestEntityManagerInterface $entityManagerSerializerInterface $serializer,
  1242.     ValidateService $validateService,BaseService $baseService): Response
  1243.     {
  1244.             $session = new Session;
  1245.             $user $session->get('user');
  1246.             $bureauSelected $session->get('bureauSelected');
  1247.             $response "";
  1248.             $id=$request->get('id');
  1249.             $bordereau $entityManager->getRepository(Bordereau::class)->find($id);
  1250.             $details $entityManager->getRepository(DetailBord::class)->findByIdBord($id);
  1251.         
  1252.             $client$request->get('client');
  1253.             $numero$request->get('numerobord');
  1254.             $objet$request->get('objet');
  1255.             $tva$request->get('tva');
  1256.             $date$request->get('date');
  1257.             $htt$request->get('hht');
  1258.             $httc$request->get('httc');
  1259.             $modele$request->get('modele');
  1260.             if($bureauSelected == 0)
  1261.             {
  1262.                 $bureau=$request->get('bureau');
  1263.             }
  1264.             $modal $entityManager->getRepository(ModelBordereau::class)->find($modele);
  1265.             $qteName $entityManager->getRepository(InfosModalBordereau::class)->findOneBy(['idModal'=>$modele 'isQte'=>1]);
  1266.             if(!$modal)
  1267.             {
  1268.                 $response 'Merci de choisir un modèle de bordereau.';
  1269.             }
  1270.             else
  1271.             {
  1272.                 $contraintes = array(
  1273.                     "numero" => array("val" => $numero"length" => 255"type" => "string""isBlank" => true),
  1274.                     "objet" => array("val" => $objet"length" => 255"type" => "string""isBlank" => true),
  1275.                     "htt" => array("val" =>  $htt"type" => "float""isBlank" => true),
  1276.                     "httc" => array("val" =>  $httc"type" => "float""isBlank" => true),
  1277.                 );
  1278.                 $valideBordereau $validateService->validateur($contraintes);
  1279.                 if($valideBordereau === true)
  1280.                 {
  1281.                     $br $entityManager->getRepository(Bordereau::class)->findBy(array("refeBord" => $numero));
  1282.                     if($numero!=  $bordereau->getRefeBord() && $br)
  1283.                     {
  1284.                         $response 'Cette référence de bordereau est déjà exist, Veuillez vérifier s\'il vous plaît.';
  1285.                     }
  1286.                     else
  1287.                     {
  1288.                         $bordereau->setRefeBord($numero);
  1289.                         $bordereau->setDateCreation(new \DateTime());
  1290.                         $bordereau->setIdClient($client);
  1291.                         $bordereau->setObjeBord($objet);
  1292.                         $bordereau->setTotalHt($htt);
  1293.                         $bordereau->setTotalTtc($httc);
  1294.                         $bordereau->setTva($tva);
  1295.                         $bordereau->setEtatBord(0);
  1296.                         $bordereau->setDateEcheance(new \DateTime($date));
  1297.     
  1298.             
  1299.                         foreach ($details as $detail) {
  1300.                             $infosDetails $entityManager->getRepository(InfosDetailBord::class)->findByIdDeta($detail->getId());
  1301.                             foreach ($infosDetails as $info) {
  1302.                                 $entityManager->remove($info);
  1303.                             }
  1304.                             $entityManager->remove($detail);
  1305.                         }
  1306.                         
  1307.                         $infosModalBordereau $entityManager->getRepository(InfosModalBordereau::class)->findByIdModal($modele);
  1308.                         $des $modal->getDesignation();
  1309.                         $total $request->get('total');
  1310.                         $qte $request->get(strtolower($qteName->getNomColMo()));
  1311.                         $designation strtolower($des); //$request->get(strtolower($des));
  1312.                         $count count($total);
  1313.                         
  1314.                         for ($i 0$i $count$i++) {
  1315.                             
  1316.                             if (empty(trim($qte[$i]))) {
  1317.                                 return new Response('La quantité ne peut pas être vide ou contenir uniquement des espaces.');
  1318.                             }
  1319.                             $detail = new DetailBord();
  1320.                             $detail->setIdBord($bordereau->getId());
  1321.                             $detail->setTotal($total[$i]);
  1322.                             $detail->setObjet(utf8_encode($designation));
  1323.                             $detail->setQte($qte[$i]);
  1324.                             $entityManager->persist($detail);
  1325.                             $entityManager->flush();
  1326.     
  1327.                             foreach ($infosModalBordereau as $info) {
  1328.                                 $name strtolower(trim(str_replace(" ","_",$info->getNomColMo())));
  1329.                                 $idInfo $info->getId();
  1330.                                 $modeleValues $request->get($name);
  1331.     
  1332.                                 $infosDetailBord = new InfosDetailBord();
  1333.                                 $infosDetailBord->setIdDeta($detail->getId());
  1334.                                 $infosDetailBord->setIdInfo($idInfo);
  1335.                                 $infosDetailBord->setValuInfo($modeleValues[$i]);
  1336.                                 $entityManager->persist($infosDetailBord);
  1337.                                 $entityManager->flush();
  1338.                             }
  1339.                         }
  1340.                         
  1341.                         $entityManager->flush();
  1342.                         $baseService->addLogAction($user->getId(),'Modifier un bordereau',$bureauSelected);
  1343.     
  1344.                         $response "ok";
  1345.                     }
  1346.                 }
  1347.                 else
  1348.                 {
  1349.                     $response 'Veuillez vérifier vos informations, un des champs est incorrect !';
  1350.                 }
  1351.             }
  1352.         return new Response($response);
  1353.     }
  1354. }