src/Controller/Marches/MissionController.php line 655

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Marches;
  3. use App\Entity\Bureau;
  4. use App\Service\BaseService;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use App\Service\ValidateService;
  11. use Symfony\Component\HttpFoundation\JsonResponse;
  12. use Symfony\Component\Serializer\SerializerInterface;
  13. use App\Entity\ModelFichier
  14. use App\Entity\Fichier
  15. use App\Entity\DetailFichier;
  16. use App\Entity\InfosDetailFichier;
  17. use App\Entity\Utilisateur;
  18. use App\Entity\Mission;
  19. use App\Entity\DetailMission;
  20. use App\Entity\LogUser
  21. use Symfony\Component\HttpFoundation\Session\Session;
  22. use App\Entity\Marche;
  23. use App\Entity\Devis;
  24. use App\Entity\DetailDevis;
  25. use App\Entity\Bordereau;
  26. use App\Entity\DetailBord;
  27. use App\Entity\InfosModalBordereau
  28. use App\Entity\InfosDetailBord;
  29. use App\Entity\InfosModelFichier;
  30. use App\Repository\MissionRepository;
  31. use App\Repository\MarcheRepository;
  32. use App\Repository\UtilisateurRepository;
  33. use Symfony\Component\HttpFoundation\StreamedResponse;
  34. use App\Entity\MouvementStock;
  35. use App\Entity\Piece;
  36. use App\Entity\StockMission;
  37. use App\Entity\StockReception;
  38. use App\Repository\DetailMissionRepository;
  39. use App\Entity\DetailsOptionModel;
  40. use App\Entity\Images;
  41. use Doctrine\DBAL\Connection;
  42. use ZipArchive;
  43. class MissionController extends AbstractController
  44. {
  45.     private $conn;
  46.     public $baseService;
  47.     public function __construct(Connection $conn BaseService $baseService)
  48.     {
  49.         $this->conn $conn;
  50.         $this->baseService $baseService;
  51.     }
  52.     #[Route('/importationFichier'name'importationFichier')]
  53.     public function importationFichier(EntityManagerInterface $entityManager,MarcheRepository $marcheRepository): Response
  54.     {
  55.         $session = new Session;
  56.         $response '';
  57.         $chckAccess $this->baseService->Role(80);
  58.         if($chckAccess == 0){
  59.             return $this->redirectToRoute('login');
  60.         }else if ($chckAccess == 2){
  61.             return $this->redirectToRoute('infoUtilisateur');
  62.         }
  63.         $user $session->get('user');
  64.         $bureauSelected $session->get('bureauSelected');
  65.         $articles "";
  66.         $marche "";
  67.         $bureau$entityManager->getRepository(Bureau::class)->find($bureauSelected);
  68.         if($bureau)
  69.         {
  70.             $marches $marcheRepository->getMarchesConfigurer($bureauSelected);
  71.             if($marches)
  72.             {          
  73.                 // if($marche->getTypeMarc() == 1)
  74.                 // {
  75.                 //     $dv = $entityManager->getRepository(Devis::class)->find($marche->getIdDevis());
  76.                 //     $articles =  $entityManager->getRepository(DetailDevis::class)->findBy(['idDevis'=>$dv->getId()]);
  77.                 // }
  78.                 // else
  79.                 // {
  80.                 //     $dv = $entityManager->getRepository(Bordereau::class)->find($marche->getIdDevis());
  81.                 //     $articles =  $entityManager->getRepository(DetailBord::class)->findBy(['idBord'=>$dv->getId()]);
  82.                 // }
  83.             }
  84.         }else{
  85.             $marches$entityManager->getRepository(Marche::class)->findBy(array('EtatMarc' => 1));
  86.         }
  87.         return $this->render('mission/importationFichier.html.twig', [
  88.             'controller_name' => 'MissionController',
  89.             'articles' => $articles,
  90.             'marches' => $marches
  91.         ]);
  92.     }
  93.     #[Route('/getColumn/'name'getColumn')]
  94.     public function getColumn(Request $request,SerializerInterface $serializer)
  95.     {
  96.         $response="";
  97.         if(!empty($_FILES['fichier']['name']))
  98.         {
  99.             $extensions_valides = array('csv');
  100.             $fileName $_FILES['fichier']['name'];
  101.             $extension_upload strtolower(substr(strrchr($fileName'.'), 1));
  102.             $fileError $_FILES['fichier']['error'];
  103.             $fileTmpLoc $_FILES['fichier']['tmp_name'];
  104.             if ($fileError 0)
  105.             {
  106.                 $response="Erreur lors du transfert du fichier !!";
  107.             } else {
  108.                 if (in_array($extension_upload$extensions_valides))
  109.                 {
  110.                     $csv file_get_contents($fileTmpLoc);
  111.                     $search ",";
  112.                     $replace ".";
  113.                     $csv str_replace($search,$replace,$csv);
  114.                     file_put_contents($fileTmpLoc,$csv);
  115.                     $csv2 file_get_contents($fileTmpLoc);
  116.                     $search2 "'";
  117.                     $replace2 "";
  118.                     $csv2 str_replace($search2,$replace2,$csv2);
  119.                     file_put_contents($fileTmpLoc,$csv2);
  120.                     if (($handle fopen($fileTmpLoc"r")) !== FALSE) {
  121.                         while (($data fgetcsv($handle1000000";")) !== FALSE)
  122.                         {
  123.                             break;
  124.                         }
  125.                         $exist=false;
  126.                         $array_unique array_unique($data);
  127.                         if (count($data) - count($array_unique))
  128.                         {
  129.                             for ($i=0$i<count($data); $i++)
  130.                             {
  131.                                 if (!array_key_exists($i$array_unique))
  132.                                 {
  133.                                     $exist=true;
  134.                                 }
  135.                             }
  136.                         }
  137.                         for ($i=0;$i<count($data);$i++)
  138.                         {
  139.                             $data[$i]=str_replace(" ","_",$data[$i]);
  140.                             if(empty($data[$i]))
  141.                             {
  142.                                 $exist=true;
  143.                             }
  144.                         }
  145.                         if($exist==true)
  146.                         {
  147.                             fclose($handle);
  148.                             $response="Les entêtes de colonnes doivent être unique et non vides !!";
  149.                         }
  150.                         else
  151.                         {
  152.                             $dataRows"<table class='table table-striped table-bordered'>\n\n";
  153.                             $f fopen($fileTmpLoc"r");
  154.                             $count=0;
  155.                      
  156.                             while (($line fgetcsv($f)) !== false) {
  157.                                 if($count==0)
  158.                                 {
  159.                                     $line2=array_map("utf8_encode"$line);
  160.                                     $row $line2[0];   // We need to get the actual row (it is the first element in a 1-element array)
  161.                                     $cells explode(";",$row);
  162.                                     $dataRows.= "<tr>";
  163.                                     for($i=0;$i<count($cells);$i++)
  164.                                     {
  165.                                         $cells[$i]=strtoupper(preg_replace('/[^A-Za-z]+/',""str_replace(" ","",$cells[$i])));
  166.                                     }
  167.                                 }
  168.                                 if($count>0)
  169.                                 {
  170.                                     $row $line[0];    // We need to get the actual row (it is the first element in a 1-element array)
  171.                                     $cells explode(";",$row);
  172.                                     $dataRows.= "<tr>";
  173.                                     for($i=0;$i<count($cells);$i++)
  174.                                     {
  175.                                         
  176.                                             $cells[$i]=strtoupper(preg_replace('/[^A-Za-z0-9]+/',""$cells[$i]));
  177.                                                 
  178.                                     }
  179.                                 }
  180.                                 $row $line[0];    // We need to get the actual row (it is the first element in a 1-element array)
  181.                                 $cells explode(";",$row);
  182.                                 $dataRows.= "<tr>";
  183.                                 foreach ($cells as $cell)
  184.                                 {
  185.                                     $dataRows.= "<td>" htmlspecialchars(utf8_encode($cell)) . "</td>";
  186.                                 }
  187.                                 $dataRows.= "</tr>\n";
  188.                                 $count++;
  189.                             }
  190.                             fclose($f);
  191.                             $dataRows.= "\n</table>";
  192.                             $data array_map("utf8_encode"$data );
  193.                             $json $serializer->serialize($data'json');
  194.                             return new JsonResponse(array("response" => "success","colonnes"=>$json,"rows"=>$dataRows));
  195.                         }
  196.                     }
  197.                 } else {
  198.                     $response="Extension de fichier incorrecte, importer un fichier csv SVP !!";
  199.                 }
  200.             }
  201.         } else {
  202.             $response="Importer un fichier SVP !!";
  203.         }
  204.         return new Response($response);
  205.     }
  206.     #[Route('/importFile/'name'importFile')]
  207.     public function importFileAction(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService)
  208.     {
  209.         ini_set('memory_limit','-1');
  210.         ini_set('memory_size','-1');
  211.         ini_set('max_execution_time','-1');
  212.         $response "";
  213.         $article $request->get('article');
  214.         $mch $request->get('marche');
  215.         if($_FILES['fichier']['size']<=0)
  216.         {
  217.             $response="le fichier est vide !!";
  218.         }  
  219.         else
  220.         {
  221.             $fileError $_FILES['fichier']['error'];
  222.             $fileTmpLoc $_FILES['fichier']['tmp_name'];
  223.             $extensions_valides = array('csv');
  224.             $fileName $_FILES['fichier']['name'];
  225.             $extension_upload strtolower(substr(strrchr($fileName'.'), 1));
  226.             $n $fileName date_format(new \DateTime(), "Y-m-dH:i:s");
  227.             $nom sha1($n);
  228.             $fileStore "assets/fichiers/imports/" $nom '.' $extension_upload;
  229.             if ($fileError 0)
  230.             {
  231.                 $response="Erreur lors du transfert du fichier !!";
  232.             }
  233.             else
  234.             {
  235.                 if (in_array($extension_upload$extensions_valides))
  236.                 {
  237.                     $csv file_get_contents($fileTmpLoc);
  238.                     $csv utf8_encode($csv); // Convert to UTF-8 if needed
  239.                     $search ",";
  240.                     $replace ".";
  241.                     $csv str_replace($search,$replace,$csv);
  242.                     file_put_contents($fileTmpLoc,$csv);
  243.                     $csv2 file_get_contents($fileTmpLoc);
  244.                     $search2 "'";
  245.                     $replace2 "";
  246.                     $csv2 str_replace($search2,$replace2,$csv2);
  247.                     file_put_contents($fileTmpLoc,$csv2);
  248.                     if (($handle fopen($fileTmpLoc"r")) !== FALSE)
  249.                     {
  250.                         while (($data fgetcsv($handle1000000";")) !== FALSE)
  251.                         {
  252.                             break;
  253.                         }
  254.                         
  255.                         $exist=false;
  256.                         $array_unique array_unique($data);
  257.                         if (count($data) - count($array_unique))
  258.                         {
  259.                             for ($i=0$i<count($data); $i++)
  260.                             {
  261.                                 if (!array_key_exists($i$array_unique))
  262.                                 {
  263.                                     $exist=true;
  264.                                 }
  265.                             }
  266.                         }
  267.                         for ($i=0;$i<count($data);$i++)
  268.                         {
  269.                             $data[$i]=str_replace(" ","_",$data[$i]);
  270.                             if(empty($data[$i]))
  271.                             {
  272.                                 $exist=true;
  273.                             }
  274.                         }
  275.                         if($exist==true)
  276.                         {
  277.                             fclose($handle);
  278.                             $response="Les entêtes de colonnes doivent être unique et non vides !!";
  279.                         }
  280.                         else
  281.                         {
  282.                             $marche $entityManager->getRepository(Marche::class)->find($mch);
  283.                             if($marche->getTypeMarc() == 1)
  284.                             {
  285.                                 $art $entityManager->getRepository(DetailDevis::class)->find($article);
  286.                             }
  287.                             else
  288.                             {
  289.                                 $art $entityManager->getRepository(DetailBord::class)->find($article);
  290.                             }
  291.                             $infosModel $entityManager->getRepository(InfosModelFichier::class)->findByIdModal($art->getIdModalFich());
  292.                             $check 0;
  293.                             for ($i 0$i count($data); $i++) {
  294.                                 // Check if the key exists in $infosModel before accessing it
  295.                                 // $data[$i]=str_replace(" ","_",$data[$i]);
  296.                                 if (array_key_exists($i$infosModel) && $data[$i] != $infosModel[$i]->getNomInfo()) {
  297.                                     $check++;
  298.                                 }
  299.                             }
  300.                             if($check 0)
  301.                             {
  302.                                 $response="Le format de fichier ne correspond pas au format de fichier habituel pour cet article !!";
  303.                             }
  304.                             else
  305.                             {
  306.                                 $fichier = new Fichier();
  307.                                 $fichier->setIdModal($art->getIdModalFich());
  308.                                 $fichier->setIdMarche($mch);
  309.                                 $fichier->setNomFich($fileName);
  310.                                 $fichier->setDateCreation(new \DateTime());
  311.                                 $fichier->setEtatFich(0);
  312.                                 $fichier->setUrlFich($fileStore);
  313.                                 $entityManager->persist($fichier);
  314.                                 $entityManager->flush();
  315.     
  316.     
  317.                                 $f fopen($fileTmpLoc"r");
  318.                                 $count 0;
  319.                                 
  320.                                 while (($line fgetcsv($f1000000";")) !== false) {
  321.                                     if ($count 0) {
  322.                                         
  323.                                         // Example: Create a DetailsFichier entity for each data row
  324.                                         /*$detailsFichier = new DetailFichier();
  325.                                         $detailsFichier->setIdFichier($fichier->getId()); // Associate with the parent Fichier
  326.                                         $detailsFichier->setIdModal($fichier->getIdModal()); // Associate with the parent Fichier
  327.                                         $detailsFichier->setNumeDeta($fichier->getIdModal().''.$count); // Associate with the parent Fichier
  328.                                         $detailsFichier->setEtatDeta(0); // Associate with the parent Fichier
  329.                                         $detailsFichier->setIdDetailBord($article); // Associate with the parent Fichier
  330.                                         $entityManager->persist($detailsFichier);
  331.                                         $entityManager->flush();*/
  332.                                         $sql='
  333.                                         INSERT INTO `detail_fichier`( `id_modal`, `id_fichier`, `nume_deta`, `etat_deta`, `id_detail_bord`) VALUES
  334.                                          (:id_modal, :id_fichier, :nume_deta, :etat_deta, :id_detail_bord)
  335.                                         ';
  336.                                         $stmt $this->conn->prepare($sql);
  337.                                         $stmt->bindValue(":id_modal",$fichier->getIdModal());
  338.                                         $stmt->bindValue(":id_fichier",$fichier->getId());
  339.                                         $stmt->bindValue(":nume_deta",$fichier->getIdModal().''.$count);
  340.                                         $stmt->bindValue(":etat_deta",0);
  341.                                         $stmt->bindValue(":id_detail_bord",$article);
  342.                                         $stmt $stmt->executeQuery();   
  343.                                         $sql2 'SELECT max(t.id) from detail_fichier t';
  344.                                         $stmt $this->conn->prepare($sql2);
  345.                                         $maxDetailsFichier $stmt->executeQuery()->fetchOne();
  346.     
  347.                                         $row $line;    // Use $line directly, as it is an array of cells
  348.                                         for ($i 0$i count($row); $i++) {
  349.                                             // $infosdetail = new InfosDetailFichier();
  350.                                             // $infosdetail->setIdFichier($fichier->getId()); 
  351.                                             // $infosdetail->setIdDetail($maxDetailsFichier); 
  352.                                             // $infosdetail->setIdInfo($infosModel[$i]->getId()); 
  353.                                             // $infosdetail->setValueInfo($row[$i]); 
  354.                                             // $entityManager->persist($infosdetail);
  355.                                             // $entityManager->flush();
  356.                                             $sql3='
  357.                                             INSERT INTO `infos_detail_fichier`( `id_detail`, `id_fichier`, `id_info`, `value_info`) 
  358.                                             VALUES (:id_detail,:id_fichier,:id_info,:value_info)
  359.                                             ';
  360.                                             $stmt $this->conn->prepare($sql3);
  361.                                             $stmt->bindValue(":id_detail",$maxDetailsFichier);
  362.                                             $stmt->bindValue(":id_fichier",$fichier->getId());
  363.                                             $stmt->bindValue(":id_info",$infosModel[$i]->getId());
  364.                                             $stmt->bindValue(":value_info",$row[$i]);
  365.                                             $stmt $stmt->executeQuery();   
  366.                                         }
  367.                                     }
  368.                                     $count++;
  369.                                 }
  370.                                 move_uploaded_file($fileTmpLoc$fileStore);
  371.     
  372.                                 fclose($f);
  373.                                 $entityManager->flush();
  374.                                 $response 'ok';
  375.                             }
  376.                         }
  377.                     }
  378.                 }
  379.                 else
  380.                 {
  381.                     $response="Extension de fichier incorrecte, importer un fichier csv SVP !!";
  382.                 }
  383.                 
  384.             }
  385.         }
  386.         return new Response($response);
  387.     }
  388.     #[Route('/listFichiers'name'listFichiers')]
  389.     public function listFichiers(Request $requestEntityManagerInterface $entityManager,MarcheRepository $marcheRepository): Response
  390.     {
  391.         $chckAccess $this->baseService->Role(81);
  392.         if($chckAccess == 0){
  393.             return $this->redirectToRoute('login');
  394.         }else if ($chckAccess == 2){
  395.             return $this->redirectToRoute('infoUtilisateur');
  396.         }
  397.         $session = new Session;
  398.         $bureauSelected $session->get('bureauSelected');
  399.         $images = -1;
  400.         $idImage = [];
  401.         if($bureauSelected != 0)
  402.         {
  403.             $marches $marcheRepository->getMarches($bureauSelected);
  404.             $marchIds array_map(function ($marche) {
  405.                 return $marche->getId();
  406.             }, $marches);
  407.             
  408.             // Retrieve all fichiers associated with any of the marches
  409.             $fichiers $entityManager->getRepository(Fichier::class)->findByIdMarche($marchIds);
  410.             foreach ($fichiers as $fichier) {
  411.                 $idFichier $fichier->getId();
  412.             
  413.                 $images $entityManager->getRepository(Images::class)->findByIdFichier($idFichier);
  414.                 foreach ($images as $image) {
  415.                     $idImage[] = $image->getIdFichier();
  416.                 }
  417.             }   
  418.            
  419.                 
  420.         }
  421.         else
  422.         {
  423.             $fichiers $entityManager->getRepository(Fichier::class)->findAll();
  424.             foreach ($fichiers as $fichier) {
  425.                 $idFichier $fichier->getId();
  426.             
  427.                 $images $entityManager->getRepository(Images::class)->findByIdFichier($idFichier);
  428.             
  429.                 foreach ($images as $image) {
  430.                     $idImage[] = $image->getIdFichier();
  431.                 }
  432.             }
  433.         }
  434.         return $this->render('mission/listFichiers.html.twig', [
  435.             'controller_name' => 'MissionController',
  436.             'fichiers' => $fichiers,
  437.             'images' => $idImage
  438.         ]);
  439.     }
  440.     #[Route('/deleteFichier/{id}/'name'deleteFichier')]
  441.     public function deleteFichier(Request $requestEntityManagerInterface $entityManager,$id): Response
  442.     {
  443.         ini_set('memory_limit','-1');
  444.         ini_set('memory_size','-1');
  445.         ini_set('max_execution_time','-1');
  446.         $response "";
  447.         $chckAccess $this->baseService->Role(115);
  448.         if($chckAccess == 0){
  449.             $response "Vous n'avez pas accès à cette opération";
  450.         }else if ($chckAccess == 2){
  451.             $response "Vous n'avez pas accès à cette opération";
  452.         }
  453.         if($response == ""){
  454.             $fichier $entityManager->getRepository(Fichier::class)->find($id);
  455.             if (!$fichier
  456.             {
  457.                 $response 'Desolé, ce fichier est introuvable !';
  458.             } 
  459.             else 
  460.             {
  461.                 $details $entityManager->getRepository(DetailFichier::class)->findByIdFichier($id);
  462.                 foreach($details as $detail)
  463.                 {            
  464.                     $entityManager->remove($detail);
  465.                 }
  466.                 $infos $entityManager->getRepository(InfosDetailFichier::class)->findByIdFichier($id);
  467.                 foreach($infos as $info)
  468.                 {            
  469.                     $entityManager->remove($info);
  470.                 }
  471.                 
  472.                 // Remove the utilisateur
  473.                 $entityManager->remove($fichier);
  474.                 $entityManager->flush();
  475.                 $response "ok";
  476.                 
  477.             }
  478.         }
  479.         return new Response($response);
  480.     }
  481.     #[Route('/exporterFichier/{id}/'name'exporterFichier')]
  482.     public function exporterFichier(Request $requestEntityManagerInterface $entityManagerSerializerInterface $serializer ,$id): Response
  483.     {
  484.         $response "";
  485.         $chckAccess $this->baseService->Role(116);
  486.         if($chckAccess == 0){
  487.             $response "Vous n'avez pas accès à cette opération";
  488.         }else if ($chckAccess == 2){
  489.             $response "Vous n'avez pas accès à cette opération";
  490.         }
  491.         if( $response == ""){
  492.             $fichier $entityManager->getRepository(Fichier::class)->find($id);
  493.     
  494.             $details $entityManager->getRepository(DetailFichier::class)->findByIdFichier($id);
  495.             $modal $entityManager->getRepository(ModelFichier::class)->find($fichier->getIdModal());
  496.             $infoModal $entityManager->getRepository(InfosModelFichier::class)->findByIdModal($modal->getId());
  497.     
  498.             $response = new StreamedResponse();
  499.             $response->setCallback(function () use ($fichier $entityManager,$details,$infoModal) {
  500.             $handle fopen('php://output''w+');
  501.             $entite =array();
  502.             if ($infoModal !== null) {
  503.                 for ($i 0$i count($infoModal); $i++) {
  504.                     $entite[$i] = $infoModal[$i]->getNomInfo();
  505.                 }
  506.                 $entite[count($infoModal)+1] = 'LATTITUDE';
  507.                 $entite[count($infoModal)+2] = 'LONGTITUDE';
  508.                 
  509.             }
  510.             fputcsv($handle,$entite';');
  511.     
  512.             for($j=0;$j<count($details);$j++) {
  513.                 $value =  $entityManager->getRepository(InfosDetailFichier::class)->findByIdDetail($details[$j]->getId()); 
  514.                 $values = array();
  515.                 for ($k=0$k count($value); $k++) { 
  516.                     $values[$k]= $value[$k]->getValueInfo();
  517.                 }
  518.                 $values[count($value)+1]= $details[$j]->getLatitude();
  519.                 $values[count($value)+2]= $details[$j]->getLongitude();;
  520.                 fputcsv($handle$values';');
  521.             }
  522.                 fclose($handle);
  523.             });
  524.     
  525.             $filename ''.$fichier->getNomFich().'.csv'// Specify the filename with the extension
  526.             $response->setStatusCode(200);
  527.             $response->headers->set('Content-Type''text/csv; charset=utf-8');
  528.             $response->headers->set('Content-Disposition''attachment; filename="' $filename '"');
  529.         }
  530.         return $response;
  531.     }
  532.     #[Route('/exporterImage/{id}'name'exporter_image')]
  533.     public function exporterImage(Request $requestEntityManagerInterface $entityManager$id): Response
  534.     {
  535.         // 🔹 Récupérer les images liées au fichier
  536.         $images $entityManager->getRepository(Images::class)->findByIdFichier($id);
  537.         if (!$images || count($images) === 0) {
  538.             return new Response("Aucune image trouvée pour ce fichier."Response::HTTP_NOT_FOUND);
  539.         }
  540.         // 🔹 Créer un dossier temporaire pour le ZIP
  541.         $tempDir sys_get_temp_dir() . DIRECTORY_SEPARATOR 'temp_zip';
  542.         if (!file_exists($tempDir)) {
  543.             mkdir($tempDir0777true);
  544.         }
  545.         // 🔹 Nom unique du fichier ZIP
  546.         $zipFilePath $tempDir DIRECTORY_SEPARATOR 'images_' uniqid() . '.zip';
  547.         $zip = new \ZipArchive();
  548.         if ($zip->open($zipFilePath\ZipArchive::CREATE \ZipArchive::OVERWRITE) !== true) {
  549.             return new Response("Erreur lors de la création du fichier ZIP."Response::HTTP_INTERNAL_SERVER_ERROR);
  550.         }
  551.         $added false;
  552.         $projectDir $this->getParameter('kernel.project_dir');
  553.         // 🔹 Ajouter chaque image au ZIP
  554.         foreach ($images as $image) {
  555.             $relativePath $image->getUrlImage(); // ex: /assets/imagesMissions/xxxx.jpg
  556.             // Enlever le premier slash et construire le chemin absolu
  557.             $absolutePath $projectDir '/public' $relativePath;
  558.             if (file_exists($absolutePath)) {
  559.                 $zip->addFile($absolutePathbasename($absolutePath));
  560.                 $added true;
  561.             } else {
  562.                 // (optionnel) Pour debug :
  563.                 // dump("Fichier introuvable : " . $absolutePath);
  564.             }
  565.         }
  566.         $zip->close();
  567.         if (!$added || !file_exists($zipFilePath)) {
  568.             return new Response("Aucune image valide trouvée à compresser."Response::HTTP_NOT_FOUND);
  569.         }
  570.         // 🔹 Créer la réponse avec le contenu ZIP
  571.         $response = new Response(file_get_contents($zipFilePath));
  572.         $response->headers->set('Content-Type''application/zip');
  573.         $response->headers->set('Content-Disposition''attachment; filename="images.zip"');
  574.         $response->headers->set('Content-Length'filesize($zipFilePath));
  575.         // 🔹 Supprimer le ZIP après téléchargement (sécurisé)
  576.         register_shutdown_function(static function () use ($zipFilePath) {
  577.             if (file_exists($zipFilePath)) {
  578.                 @unlink($zipFilePath);
  579.             }
  580.         });
  581.         return $response;
  582.     }
  583.     #[Route('/addMission'name'addMission')]
  584.     public function addMission(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService,
  585.     MarcheRepository $marcheRepositoryMissionRepository $missionRepoDetailMissionRepository $detailMissionRepo,BaseService $baseService): Response
  586.     {
  587.         $chckAccess $this->baseService->Role(117);
  588.         if($chckAccess == 0){
  589.             return $this->redirectToRoute('login');
  590.         }else if ($chckAccess == 2){
  591.             return $this->redirectToRoute('infoUtilisateur');
  592.         }
  593.         $session = new Session;
  594.         $bureau $session->get('bureauSelected');
  595.         $response ""
  596.         $id=$request->get('id');
  597.         $agent=$request->get('idAgent');
  598.         $IdArticle 0;
  599.         $idMarcher 0;
  600.         if($id != null)
  601.         {
  602.             $from 1;
  603.             $fichier $entityManager->getRepository(Fichier::class)->findOneById($id);
  604.             $IdArticle $fichier->getIdModal();
  605.             $idMarcher $fichier->getIdMarche();
  606.         }
  607.         else 
  608.         {
  609.             $from 2;
  610.         }
  611.         if(!$agent && !$id){
  612.             $from 3;
  613.             $id $request->get('fichiers');
  614.            
  615.         }
  616.         $bureauSelected $session->get('bureauSelected');
  617.         if($bureauSelected == 0)
  618.         {
  619.             $marches $entityManager->getRepository(Marche::class)->findAll();
  620.         }
  621.         else
  622.         {
  623.             $marches $marcheRepository->getMarches($bureauSelected);
  624.             //$marches = $entityManager->getRepository(Marche::class)->findByIdBure($bureauSelected);
  625.         }
  626.         if($bureau != 0)
  627.         {
  628.             $marches $marcheRepository->getMarches($bureau);
  629.             $marchIds array_map(function ($marche) {
  630.                 return $marche->getId();
  631.             }, $marches);
  632.             
  633.             // Retrieve all fichiers associated with any of the marches
  634.             $fichiers $entityManager->getRepository(Fichier::class)->findByIdMarche($marchIds);
  635.             
  636.         }
  637.         else
  638.         {
  639.             $fichiers $entityManager->getRepository(Fichier::class)->findAll();
  640.             $fichiers $marcheRepository->getFichierConfigurer();
  641.         }
  642.         $fichier $entityManager->getRepository(Fichier::class)->findOneById($id);
  643.         if($request->getMethod()=='POST')
  644.         {
  645.             $selected $request->get('selected');
  646.             $agent $request->get('agents');
  647.             $titre=$request->get('titre');
  648.             
  649.             if($selected == null)
  650.             {
  651.                 $response "veuillez selectionner";
  652.             }
  653.             else
  654.             {
  655.                 $marche $entityManager->getRepository(Marche::class)->findOneById($fichier->getIdMarche()); 
  656.                 $numero $missionRepo->getNumero($fichier->getIdMarche());
  657.                 $agentDetail $entityManager->getRepository(Utilisateur::class)->findOneById($agent); 
  658.                 
  659.                 $mission = new Mission();
  660.                 $mission->setIdFichier($id);
  661.                 $mission->setIdAgent($agent);
  662.                 $mission->setEtatMiss(0);
  663.                 $mission->setTitre($titre);
  664.                 $mission->setIdMarche($fichier->getIdMarche());
  665.                 // $mission->setDateDebut(new \DateTime());
  666.                 // $mission->setDateFin(new \DateTime());
  667.                 $mission->setDateCreation(new \DateTime());
  668.                 $mission->setNumeMiss($numero);
  669.                 $entityManager->persist($mission);
  670.                 $entityManager->flush();
  671.                 $text 'Veuillez consulter votre mission affectée';
  672.                 $baseService->addNotifications($text $mission->getId() , $agent,0);
  673.                 
  674.                 for($i=0;$i<count($selected);$i++)
  675.                 {
  676.                     $detail_fichier $entityManager->getRepository(DetailFichier::class)->find($selected[$i]);
  677.                     $detail_fichier->setEtatDeta(1);
  678.                     $detailNum $detailMissionRepo->getNumero($detail_fichier->getIdDetailBord());
  679.  
  680.                     $detail = new DetailMission();
  681.                     $detail->setIdMission($mission->getId());
  682.                     $detail->setIdDetail($selected[$i]);
  683.                     $detail->setEtatDeta(0);
  684.                     $detail->setNumeDeta($detailNum);
  685.                     $refeDeta 'REF' str_pad($detailNum10'0'STR_PAD_LEFT);
  686.                     $detail->setRefeDeta($refeDeta);    
  687.                     $detail->setIdDetailBord($detail_fichier->getIdDetailBord());
  688.                     //$mission->setIdMarche(0);
  689.                     $detail->setDateCreation(new \DateTime());
  690.                     $detail->setTypeMarc($marche->getTypeMarc());
  691.                     $entityManager->persist($detail);
  692.                     $entityManager->flush();
  693.                     //Update date fille
  694.                     $sql='UPDATE `infos_detail_fichier` d SET  d.`value_info`=:value where d.id_detail = :idDetail and  d.id_info  in (select i.id from infos_model_fichier i where i.type_info = :idInfo) ';
  695.                     $stmt $this->conn->prepare($sql);
  696.                     $stmt->bindValue(":idDetail",$selected[$i]);
  697.                     $stmt->bindValue(":value",$agent);
  698.                     $stmt->bindValue(":idInfo",9);
  699.                     $stmt $stmt->executeQuery();  
  700.                     $sql='UPDATE `infos_detail_fichier` d SET  d.`value_info`=:value where d.id_detail = :idDetail and  d.id_info  in (select i.id from infos_model_fichier i where i.type_info = :idInfo) ';
  701.                     $stmt $this->conn->prepare($sql);
  702.                     $stmt->bindValue(":idDetail",$selected[$i]);
  703.                     $stmt->bindValue(":value",'"'.$agentDetail->getNomUtil()." ".$agentDetail->getPrenUtil().'"');
  704.                     $stmt->bindValue(":idInfo",10);
  705.                     $stmt $stmt->executeQuery();  
  706.                     
  707.                 }
  708.                 if($marche->getTypeMarc() == 1)
  709.                 {
  710.                     $article $entityManager->getRepository(DetailDevis::class)->find($detail_fichier->getIdDetailBord());
  711.                 }
  712.                 else
  713.                 {
  714.                     $article $entityManager->getRepository(DetailBord::class)->find($detail_fichier->getIdDetailBord());
  715.                 }
  716.                 if($article)
  717.                 {
  718.                     if($marche->getTypeMarc() == 1)
  719.                     {
  720.                         $code $article->getDescDetDev();
  721.                     }
  722.                     else
  723.                     {
  724.                         $code =  $article->getObjet();
  725.                     }
  726.                     $image $article->getIconArti();
  727.                     if($article->getCodeArti() != null && $article->getCodeArti() != "")
  728.                     {
  729.                         $mission->setCodeArti($article->getCodeArti());
  730.                     }
  731.                     else
  732.                     {
  733.                         $mission->setCodeArti($code);
  734.                     }
  735.                     $mission->setImagArti($image);
  736.                 }
  737.                 $fichier->setEtatFich(1);
  738.                 $entityManager->flush();
  739.                 $response "ok";
  740.     
  741.                 
  742.             }
  743.         }
  744.         return $this->render('mission/addMission.html.twig', [
  745.             'controller_name' => 'MissionController',
  746.             'response' => $response,
  747.             'fichiers' => $fichiers,
  748.             'idFichier' => $id,
  749.             'agent' => $agent,
  750.             'fromIn' => $from,
  751.             'marches' => $marches,
  752.             'IdArticle' => $IdArticle,
  753.             'idMarcher' => $idMarcher
  754.         ]);
  755.     }
  756.     #[Route('/addMissionByCarte'name'addMissionByCarte')]
  757.     public function addMissionByCarte(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService,
  758.     MarcheRepository $marcheRepositoryMissionRepository $missionRepoDetailMissionRepository $detailMissionRepo): Response
  759.     {
  760.         $chckAccess $this->baseService->Role(117);
  761.         if($chckAccess == 0){
  762.             return $this->redirectToRoute('login');
  763.         }else if ($chckAccess == 2){
  764.             return $this->redirectToRoute('infoUtilisateur');
  765.         }
  766.         $session = new Session;
  767.         $bureau $session->get('bureauSelected');
  768.         $response ""
  769.         $idFile $request->get('idFile');
  770.         $idAgent $request->get('agent');
  771.         $file =  $entityManager->getRepository(Fichier::class)->find($idFile);
  772.         $marche =  $entityManager->getRepository(Marche::class)->find($file->getIdMarche());
  773.         $agent =  $entityManager->getRepository(Utilisateur::class)->find($idAgent);
  774.         $detail =  $entityManager->getRepository(DetailFichier::class)->findBy(['idFichier'=>$idFile]);
  775.         if($request->getMethod()=='POST')
  776.         {
  777.             $selected $request->get('checkboxvar');
  778.             $agent $request->get('agents');
  779.             $titre $request->get('titre');
  780.         
  781.             if($selected == null)
  782.             {
  783.                 $response "Veuillez selectionner !";
  784.             }
  785.             else
  786.             {
  787.                 $numero $missionRepo->getNumero($file->getIdMarche());
  788.                 $mission = new Mission();
  789.                 $mission->setIdFichier($idFile);
  790.                 $mission->setIdAgent($idAgent);
  791.                 $mission->setEtatMiss(0);
  792.                 $mission->setTitre($titre);
  793.                 $mission->setIdMarche($file->getIdMarche());
  794.                 // $mission->setDateDebut(new \DateTime());
  795.                 // $mission->setDateFin(new \DateTime());
  796.                 $mission->setDateCreation(new \DateTime());
  797.                 $mission->setNumeMiss($numero);
  798.                 $entityManager->persist($mission);
  799.                 $entityManager->flush();
  800.                 
  801.                 for($i=0;$i<count($selected);$i++)
  802.                 {
  803.                     $detail_fichier $entityManager->getRepository(DetailFichier::class)->find($selected[$i]);
  804.                     $detail_fichier->setEtatDeta(1);
  805.                     $detailNum $detailMissionRepo->getNumero($detail_fichier->getIdDetailBord());
  806.                     $detail = new DetailMission();
  807.                     $detail->setIdMission($mission->getId());
  808.                     $detail->setIdDetail($selected[$i]);
  809.                     $detail->setEtatDeta(0);
  810.                     $detail->setNumeDeta($detailNum);
  811.                     $refeDeta 'REF' str_pad($detailNum10'0'STR_PAD_LEFT);
  812.                     $detail->setRefeDeta($refeDeta);    
  813.                     $detail->setIdDetailBord($detail_fichier->getIdDetailBord());
  814.                     //$mission->setIdMarche(0);
  815.                     $detail->setDateCreation(new \DateTime());
  816.                     $detail->setTypeMarc($marche->getTypeMarc());
  817.                     $entityManager->persist($detail);
  818.                     $entityManager->flush();
  819.                 }
  820.                 if($marche->getTypeMarc() == 1)
  821.                 {
  822.                     $article $entityManager->getRepository(DetailDevis::class)->find($detail_fichier->getIdDetailBord());
  823.         
  824.                 }
  825.                 else
  826.                 {
  827.                     $article $entityManager->getRepository(DetailBord::class)->find($detail_fichier->getIdDetailBord());
  828.                 }
  829.                 if($article)
  830.                 {
  831.                     $mission->setCodeArti($article->getCodeArti());
  832.                     $mission->setImagArti($article->getIconArti());
  833.                 }
  834.         
  835.                 $file->setEtatFich(1);
  836.                 $entityManager->flush();
  837.                 $response "ok";
  838.             }
  839.         }
  840.         return $this->render('mission/addMissionByCarte.html.twig', [
  841.             'controller_name' => 'MissionController',
  842.             'idFile'=>$idFile,
  843.             'idAgent'=>$idAgent,
  844.             'detail'=>$detail
  845.             // 'response' => $response,
  846.             // 'fichiers' => $fichiers,
  847.             // 'idFichier' => $id,
  848.             // 'agent' => $agent,
  849.             // 'fromIn' => $from
  850.         ]);
  851.     }
  852.     #[Route('/ajaxAddMissions'name'ajaxAddMissions')]
  853.     public function ajaxAddBonCommande(Request $requestEntityManagerInterface $entityManagerMarcheRepository $marcheRepository ,SerializerInterface $serializer,
  854.     ValidateService $validateService): Response
  855.     {
  856.         
  857.         $session = new Session;
  858.         $user $session->get('user');
  859.         $response "";
  860.         $id=$request->get('id');
  861.         
  862.         $response "ok";
  863.         return new Response($response);
  864.     }
  865.     #[Route('/getFichierDetails/{id}/'name'getFichierDetails')]
  866.     public function getFichierDetails(Request $requestEntityManagerInterface $entityManagerSerializerInterface $serializer,$id): Response
  867.     {
  868.         ini_set('memory_limit','-1');
  869.         ini_set('memory_size','-1');
  870.         ini_set('max_execution_time','-1');
  871.         $response "";
  872.         $fichier $entityManager->getRepository(Fichier::class)->find($id);
  873.         if (!$fichier
  874.         {
  875.             $response 'Desolé, ce fichier est introuvable !';
  876.         } 
  877.         else 
  878.         {
  879.             $dataToSend =  [];
  880.             $details $entityManager->getRepository(DetailFichier::class)->findByIdFichier($id);
  881.             $modal $entityManager->getRepository(ModelFichier::class)->find($fichier->getIdModal());
  882.             $infoModal $entityManager->getRepository(InfosModelFichier::class)->findByIdModal($modal->getId());
  883.             $dataToSend[0] = $infoModal;
  884.             $dts = [];
  885.             
  886.             for($i=0;$i<count($details);$i++) {               
  887.                 $query "SELECT *
  888.                 FROM  infos_detail_fichier idf  
  889.                 WHERE idf.id_detail  = :idDetail";
  890.                 $stmt $this->conn->prepare($query);
  891.                 // $stmt->bindValue(":id",$id);
  892.                 $stmt->bindValue(":idDetail",$details[$i]->getId());
  893.                 $stmt $stmt->executeQuery();
  894.                 $liste_groupe $stmt->fetchAll();
  895.                 $dts[$i]["infosDetailFichier"] = $liste_groupe;
  896.                 $dts[$i]["etat"] =  $details[$i]->getEtatDeta();
  897.                 $dts[$i]["idDetail"] = $details[$i]->getId();
  898.             }
  899.             $dataToSend[1] = $dts;
  900.         }
  901.         $detailsFichier array_values($dataToSend);
  902.         $detailsJson $serializer->serialize($detailsFichier'json');
  903.         return new JsonResponse($detailsJson200, [], true);
  904.     }
  905.     #[Route('/getFichierDetailsForCarte/{id}/'name'getFichierDetailsForCarte')]
  906.     public function getFichierDetailsForCarte(Request $requestEntityManagerInterface $entityManagerSerializerInterface $serializer,$id): Response
  907.     {
  908.         ini_set('memory_limit','-1');
  909.         ini_set('memory_size','-1');
  910.         ini_set('max_execution_time','-1');
  911.         
  912.         $response "";
  913.         $fichier $entityManager->getRepository(Fichier::class)->find($id);
  914.         if (!$fichier
  915.         {
  916.             $response 'Desolé, ce fichier est introuvable !';
  917.         } 
  918.         else 
  919.         {
  920.             $dataToSend =  [];
  921.             $details $entityManager->getRepository(DetailFichier::class)->findByIdFichier($id);
  922.             $modal $entityManager->getRepository(ModelFichier::class)->find($fichier->getIdModal());
  923.             $infoModal $entityManager->getRepository(InfosModelFichier::class)->findByIdModal($modal->getId());
  924.             $dataToSend[0] = $infoModal;
  925.             $dts = [];
  926.             
  927.             $marche $entityManager->getRepository(Marche::class)->findOneById($fichier->getIdMarche());
  928.             $type $marche->getTypeMarc(); 
  929.             for($i=0;$i<count($details);$i++) {               
  930.                 $query "SELECT *
  931.                 FROM  infos_detail_fichier idf  
  932.                 WHERE idf.id_detail  = :idDetail";
  933.                 $stmt $this->conn->prepare($query);
  934.                 // $stmt->bindValue(":id",$id);
  935.                 $stmt->bindValue(":idDetail",$details[$i]->getId());
  936.                 $stmt $stmt->executeQuery();
  937.                 $liste_groupe $stmt->fetchAll();
  938.                 $dts[$i]["infosDetailFichier"] = $liste_groupe;
  939.                 $dts[$i]["etat"] =  $details[$i]->getEtatDeta();
  940.                 $dts[$i]["idDetail"] = $details[$i]->getId();
  941.                 $dts[$i]["longitude"] = $details[$i]->getLongitude();
  942.                 $dts[$i]["latitude"] = $details[$i]->getLatitude();
  943.                 if($type == 1){
  944.                     $detailBord $entityManager->getRepository(DetailDevis::class)->find($details[$i]->getIdDetailBord()); 
  945.                     $dts[$i]["reference"] = $detailBord->getDescDetDev().'-'.$details[$i]->getId();
  946.                 }else{
  947.                     $detailBord $entityManager->getRepository(DetailBord::class)->find($details[$i]->getIdDetailBord()); 
  948.                     $dts[$i]["reference"] = $detailBord->getObjet().'-'.$details[$i]->getId();
  949.                 }
  950.             }
  951.             $dataToSend[1] = $dts;
  952.         }
  953.         $detailsFichier array_values($dataToSend);
  954.         $detailsJson $serializer->serialize($detailsFichier'json');
  955.         return new JsonResponse($detailsJson200, [], true);
  956.     }
  957.     
  958.     #[Route('/listMissions'name'listMissions')]
  959.     public function listMissions(Request $requestEntityManagerInterface $entityManagerMissionRepository $missionsRepoUtilisateurRepository $userRepositoryMarcheRepository $marcheRepository): Response
  960.     {
  961.         $chckAccess $this->baseService->Role(82);
  962.         if($chckAccess == 0){
  963.             return $this->redirectToRoute('login');
  964.         }else if ($chckAccess == 2){
  965.             return $this->redirectToRoute('infoUtilisateur');
  966.         }
  967.         $session = new Session;
  968.         $bureauSelected $session->get('bureauSelected');
  969.         $missionsEnAttente $missionsRepo->getMissionsEnCours(0);
  970.         $missionsEncours $missionsRepo->getMissionsEnCours(1);
  971.         if($bureauSelected != 0)
  972.         {
  973.             $users $userRepository->getBureauUsers($bureauSelected);
  974.         }
  975.         else
  976.         {
  977.             $users $entityManager->getRepository(Utilisateur::class)->findAll();
  978.         }
  979.         
  980.         $years = [];
  981.         $yearsDebut 2023;
  982.         $yearsFin =  (new \DateTime())->format('Y');
  983.         for ($i $yearsDebut$i <= $yearsFin$i++) {
  984.             $years[] = $i;
  985.         }
  986.         $myYear $request->get('year');
  987.         if($myYear)
  988.         {
  989.             $yearSelect $myYear;
  990.         }
  991.         else
  992.         {
  993.             $yearSelect $yearsFin;
  994.         }
  995.         $months = [];
  996.         for ($i 1$i <= 12$i++) {
  997.             $monthNumber $i;
  998.             $monthNameFrench '';
  999.             // Assign French month names based on the numeric representation
  1000.             switch ($i) {
  1001.                 case 1:
  1002.                     $monthNameFrench 'Janvier';
  1003.                     break;
  1004.                 case 2:
  1005.                     $monthNameFrench 'Février';
  1006.                     break;
  1007.                 case 3:
  1008.                     $monthNameFrench 'Mars';
  1009.                     break;
  1010.                 case 4:
  1011.                     $monthNameFrench 'Avril';
  1012.                     break;
  1013.                 case 5:
  1014.                     $monthNameFrench 'Mai';
  1015.                     break;
  1016.                 case 6:
  1017.                     $monthNameFrench 'Juin';
  1018.                     break;
  1019.                 case 7:
  1020.                     $monthNameFrench 'Juillet';
  1021.                     break;
  1022.                 case 8:
  1023.                     $monthNameFrench 'Août';
  1024.                     break;
  1025.                 case 9:
  1026.                     $monthNameFrench 'Septembre';
  1027.                     break;
  1028.                 case 10:
  1029.                     $monthNameFrench 'Octobre';
  1030.                     break;
  1031.                 case 11:
  1032.                     $monthNameFrench 'Novembre';
  1033.                     break;
  1034.                 case 12:
  1035.                     $monthNameFrench 'Décembre';
  1036.                     break;
  1037.             }
  1038.             $months[] = ['number' => $monthNumber'name' => $monthNameFrench];
  1039.         }
  1040.         /***********Marche***********/
  1041.         $bureauSelected $session->get('bureauSelected');
  1042.         if($bureauSelected == 0)
  1043.         {
  1044.             $marches $entityManager->getRepository(Marche::class)->findAll();
  1045.         }
  1046.         else
  1047.         {
  1048.             $marches $marcheRepository->getMarches($bureauSelected);
  1049.         }
  1050.         return $this->render('mission/listMissions.html.twig', [
  1051.             'controller_name' => 'MissionController',
  1052.             'missions' => $missionsEncours,
  1053.             'yearSelect' => $yearSelect ,
  1054.             "years"=>$years,
  1055.             'months'=>$months,
  1056.             'users' => $users,
  1057.             'marches'=>$marches,
  1058.             'missionsEnAttente' => $missionsEnAttente
  1059.         ]);
  1060.     }
  1061.     /********Mission by marché********/
  1062.     #[Route('/missions/by-marche'name'missions_by_marche'methods: ['GET'])]
  1063.     public function missionsByMarche(Request $requestMissionRepository $missionsRepo): JsonResponse
  1064.     {
  1065.         $marcheId $request->query->get('marcheId');
  1066.         if ($marcheId == 0) {
  1067.             $missions $missionsRepo->getMissionsEnCours(1);
  1068.         } else {
  1069.             $missions $missionsRepo->getMissionsByMr(1,$marcheId);
  1070.         }
  1071.         $data = [];
  1072.         foreach ($missions as $m) {
  1073.             $dateDebut = isset($m['date_debut']) ? new \DateTime($m['date_debut']) : null;
  1074.             $dateFin   = isset($m['date_fin'])   ? new \DateTime($m['date_fin'])   : null;
  1075.             $data[] = [
  1076.             'id'         => $m['id'],
  1077.             'fichierNom' => $m['fichier']['nom_fich'] ?? '',
  1078.             'titre'      => $m['titre'] ?? '',
  1079.             'nume_miss'  => $m['nume_miss'] ?? '',
  1080.             'agentNom'   => ($m['agent']['nom_util'] ?? '') . ' ' . ($m['agent']['pren_util'] ?? ''),
  1081.             'date_debut' => $dateDebut $dateDebut->format('Y-m-d') : "",
  1082.             'date_fin'   => $dateFin   $dateFin->format('Y-m-d')   : "",
  1083.             'etat_miss'  => $m['etat_miss'] ?? null,
  1084.             ];
  1085.         }
  1086.         return $this->json($data);
  1087.     }
  1088.     /****************************/
  1089.     #[Route('/updateMission'name'updateMission')]
  1090.     public function updateMission(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService,
  1091.     MissionRepository $missionRepoDetailMissionRepository $detailMissionRepo): Response
  1092.     {
  1093.         $chckAccess $this->baseService->Role(84);
  1094.         if($chckAccess == 0){
  1095.             return $this->redirectToRoute('login');
  1096.         }else if ($chckAccess == 2){
  1097.             return $this->redirectToRoute('infoUtilisateur');
  1098.         }
  1099.         $response ""
  1100.         $idMission=$request->get('id');
  1101.         $mission $entityManager->getRepository(Mission::class)->find($idMission);
  1102.         $detailMissions $entityManager->getRepository(DetailMission::class)->findBy(['idMission'=>$idMission]);
  1103.         
  1104.         if($mission){
  1105.             $fichiers $entityManager->getRepository(Fichier::class)->findAll();
  1106.             $idFichier=$mission->getIdFichier();
  1107.             if($request->getMethod()=='POST')
  1108.             {
  1109.                 
  1110.                 $selected $request->get('selected');
  1111.                 $agent $request->get('agents');
  1112.                 $titre $request->get('titre');
  1113.     
  1114.                 $mission->setTitre($titre);
  1115.                 $entityManager->persist($mission);
  1116.                 $entityManager->flush();
  1117.                     
  1118.                 if($selected == null)
  1119.                 {
  1120.                     $response "veuillez selectionner";
  1121.                 }
  1122.                 else
  1123.                 {
  1124.                     $mission->setIdAgent($agent);
  1125.                     $missionRepo->miseAjourDt($idMission);
  1126.                     $idMarche $detailMissions[0]->getTypeMarc();
  1127.                     foreach($detailMissions as $dm)
  1128.                     {
  1129.                         $entityManager->remove($dm);
  1130.                     }
  1131.                     for($i=0;$i<count($selected);$i++)
  1132.                     {
  1133.                         $detail_fichier $entityManager->getRepository(DetailFichier::class)->find($selected[$i]);
  1134.                         $detail_fichier->setEtatDeta(1);
  1135.                         $detailNum $detailMissionRepo->getNumero($detail_fichier->getIdDetailBord());
  1136.                         $detail = new DetailMission();
  1137.                         $detail->setIdMission($idMission);
  1138.                         $detail->setIdDetail($selected[$i]);
  1139.                         $detail->setEtatDeta(0);
  1140.                         $detail->setNumeDeta($detailNum);
  1141.                         $refeDeta 'REF' str_pad($detailNum10'0'STR_PAD_LEFT);
  1142.                         $detail->setRefeDeta($refeDeta);    
  1143.                         $detail->setIdDetailBord($detail_fichier->getIdDetailBord());
  1144.                         //$mission->setIdMarche(0);
  1145.                         $detail->setDateCreation(new \DateTime());
  1146.                         $detail->setTypeMarc($idMarche);
  1147.                         $entityManager->persist($detail);
  1148.                         $entityManager->flush();
  1149.                     }
  1150.                     $entityManager->flush();
  1151.                     $response "ok";
  1152.                     return $this->redirect('/listMissions');
  1153.                 }
  1154.             }
  1155.         }
  1156.         else
  1157.         {
  1158.             return $this->redirect('/listMissions');
  1159.         }
  1160.         return $this->render('mission/updateMission.html.twig', [
  1161.             'controller_name' => 'MissionController',
  1162.             'response' => $response,
  1163.             'fichiers' => $fichiers,
  1164.             'idFichier' => $idFichier,
  1165.             'mission' => $mission,
  1166.             'idMission'=>$idMission,
  1167.             'agentSelected'=>$mission->getIdAgent(),
  1168.             'detailMissions' => $detailMissions
  1169.         ]);
  1170.     }
  1171.     
  1172.     
  1173.     #[Route('/updateMissionByCarte'name'updateMissionByCarte')]
  1174.     public function updateMissionByCarte(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService,MissionRepository $missionRepo): Response
  1175.     {
  1176.         $response ""
  1177.         $chckAccess $this->baseService->Role(84);
  1178.         if($chckAccess == 0){
  1179.             return $this->redirectToRoute('login');
  1180.         }else if ($chckAccess == 2){
  1181.             return $this->redirectToRoute('infoUtilisateur');
  1182.         }
  1183.         $idMission=$request->get('id');
  1184.         $mission $entityManager->getRepository(Mission::class)->find($idMission);
  1185.         $detailMissions $entityManager->getRepository(DetailMission::class)->findBy(['idMission'=>$idMission]);
  1186.         if($mission){
  1187.             $fichiers $entityManager->getRepository(Fichier::class)->findAll();
  1188.             $idFichier=$mission->getIdFichier();
  1189.             $detail =  $entityManager->getRepository(DetailFichier::class)->findBy(['idFichier'=>$idFichier]);
  1190.             if($request->getMethod()=='POST')
  1191.             {
  1192.                 $selected $request->get('selected');
  1193.                 $agent $request->get('agents');
  1194.                 if($selected == null)
  1195.                 {
  1196.                     $response "veuillez selectionner !!";
  1197.                 }
  1198.                 else
  1199.                 {
  1200.                     // $mission = new Mission();
  1201.                     // $mission->setIdFichier($idFichier);
  1202.                     $mission->setIdAgent($agent);
  1203.                     // $mission->setEtatMiss(0);
  1204.                     // $mission->setIdMarche(0);
  1205.                     // $mission->setDateDebut(new \DateTime());
  1206.                     // $mission->setDateFin(new \DateTime());
  1207.                     // $mission->setDateCreation(new \DateTime());
  1208.                     // $mission->setNumeMiss(1);
  1209.                     // $entityManager->persist($mission);
  1210.                     // $entityManager->flush();
  1211.                     // $detailsFichierSelected = $entityManager->getRepository(DetailFichier::class)->find($selected[$i]);
  1212.                     $missionRepo->miseAjourDt($idMission);
  1213.                     $idMarche $detailMissions[0]->getTypeMarc();
  1214.                     foreach($detailMissions as $dm)
  1215.                     {
  1216.                         $entityManager->remove($dm);
  1217.                     }
  1218.                     for($i=0;$i<count($selected);$i++)
  1219.                     {
  1220.                         $detail_fichier $entityManager->getRepository(DetailFichier::class)->find($selected[$i]);
  1221.                         $detail_fichier->setEtatDeta(1);
  1222.                         $detail = new DetailMission();
  1223.                         $detail->setIdMission($idMission);
  1224.                         $detail->setIdDetail($selected[$i]);
  1225.                         $detail->setEtatDeta(0);
  1226.                         $detail->setIdDetailBord($detail_fichier->getIdDetailBord());
  1227.                         //$mission->setIdMarche(0);
  1228.                         $detail->setDateCreation(new \DateTime());
  1229.                         $detail->setTypeMarc($idMarche);
  1230.                         $entityManager->persist($detail);
  1231.                     }
  1232.                     $entityManager->flush();
  1233.                     $response "ok";
  1234.                     return $this->redirect('/listMissions');
  1235.                 }
  1236.             }
  1237.         }else{
  1238.             return $this->redirect('/listMissions');
  1239.         }
  1240.         return $this->render('mission/updateMissionByCarte.html.twig', [
  1241.             'controller_name' => 'MissionController',
  1242.             'response' => $response,
  1243.             'fichiers' => $fichiers,
  1244.             'idFichier' => $idFichier,
  1245.             'idMission'=>$idMission,
  1246.             'agentSelected'=>$mission->getIdAgent(),
  1247.             'detailMissions' => $detailMissions,
  1248.             'idAgent'=>$mission->getIdAgent(),
  1249.             'idFile'=>$idFichier,
  1250.             'detail'=>$detail
  1251.         ]);
  1252.     }
  1253.     
  1254.     
  1255.     #[Route('/updateTitreMission'name'update_titre_mission'methods: ['POST'])]
  1256.     public function updateTitreMission(Request $requestEntityManagerInterface $entityManager): Response
  1257.     {
  1258.         $idMission $request->request->get('id');
  1259.         $nouveauTitre $request->request->get('titre');
  1260.         if (!$idMission || !$nouveauTitre) {
  1261.             $this->addFlash('error''ID ou titre manquant.');
  1262.             return $this->redirectToRoute('showMission', ['id' => $idMission]);
  1263.         }
  1264.         $mission $entityManager->getRepository(Mission::class)->find($idMission);
  1265.         if (!$mission) {
  1266.             $this->addFlash('error''Mission non trouvée.');
  1267.             return $this->redirectToRoute('listMissions');
  1268.         }
  1269.         $mission->setTitre($nouveauTitre);
  1270.         $entityManager->flush();
  1271.         $this->addFlash('success''Titre mis à jour avec succès.');
  1272.         return $this->redirectToRoute('showMission', ['id' => $idMission]);
  1273.     }
  1274.     
  1275.     #[Route('/liste_missions_terminee'name'liste_missions_terminee')]
  1276.     public function listMissionsTerminee(Request $requestEntityManagerInterface $entityManager MissionRepository $missionsRepo): Response
  1277.     {
  1278.         $chckAccess $this->baseService->Role(82);
  1279.         if($chckAccess == 0){
  1280.             return $this->redirectToRoute('login');
  1281.         }else if ($chckAccess == 2){
  1282.             return $this->redirectToRoute('infoUtilisateur');
  1283.         }
  1284.         $month $request->get('month');
  1285.         $year $request->get('year');
  1286.         
  1287.         // Create a DateTime object for the first day of the specified month and year
  1288.         $firstDay = new \DateTime("$year-$month-01");
  1289.         
  1290.         // Get the last day of the month by modifying the first day
  1291.         $lastDay = clone $firstDay;
  1292.         $lastDay->modify('last day of this month');
  1293.         $date_debut $firstDay->format('Y-m-d') ;
  1294.         $date_fin $lastDay->format('Y-m-d');
  1295.         
  1296.         $missions $missionsRepo->getMissionsByDate(2,$date_debut $date_fin);
  1297.         return $this->render('mission/liste_missions_terminee.html.twig', [
  1298.             'controller_name' => 'MissionController',
  1299.             'missions'=>$missions
  1300.         ]);
  1301.     }
  1302.     #[Route('/deleteMission/{id}/'name'deleteMission')]
  1303.     public function deleteMission(Request $requestEntityManagerInterface $entityManager,$id): Response
  1304.     {
  1305.         $response "";
  1306.         $chckAccess $this->baseService->Role(86);
  1307.         if($chckAccess == 0){
  1308.             $response "Vous n'avez pas accès à cette opération";
  1309.         }else if ($chckAccess == 2){
  1310.             $response "Vous n'avez pas accès à cette opération";
  1311.         }
  1312.         if( $response == ""){
  1313.             $mission $entityManager->getRepository(Mission::class)->find($id);
  1314.     
  1315.             if (!$mission
  1316.             {
  1317.                 $response 'Desolé, cette mission est introuvable !';
  1318.             } 
  1319.             else 
  1320.             {
  1321.     
  1322.                 $details $entityManager->getRepository(DetailMission::class)->findByIdMission($id);
  1323.                 foreach($details as $detail)
  1324.                 {    
  1325.                     $detail_fichier $entityManager->getRepository(DetailFichier::class)->find($detail->getIdDetail());
  1326.                     $detail_fichier->setEtatDeta(0);    
  1327.                     $entityManager->remove($detail);
  1328.                 }
  1329.     
  1330.                 // Remove the utilisateur
  1331.                 $entityManager->remove($mission);
  1332.                 $entityManager->flush();
  1333.     
  1334.     
  1335.                 $entityManager->flush();
  1336.                 $response "ok";
  1337.                 
  1338.             }
  1339.         }
  1340.         return new Response($response);
  1341.     }
  1342.     #[Route('/getMissionsByFile/{id}/'name'getMissionsByFile')]
  1343.     public function getMissionsByFile(Request $requestEntityManagerInterface $entityManagerSerializerInterface $serializer$id): Response
  1344.     {
  1345.         $response "";
  1346.         
  1347.         $fichier $entityManager->getRepository(Fichier::class)->find($id);
  1348.     
  1349.         if (!$fichier) {
  1350.             $response 'Désolé, ce fichier est introuvable !';
  1351.         } else {
  1352.             $dataToSend = [];
  1353.     
  1354.             // Use a foreach loop instead of for loop
  1355.             foreach ($entityManager->getRepository(Mission::class)->findByIdFichier($id) as $i => $mission) {
  1356.                 $dataToSend[$i]['id'] = $mission->getId();
  1357.                 $dts[$i]["agent"] = $entityManager->getRepository(Utilisateur::class)->find($mission->getIdAgent());
  1358.                 $dts[$i]["date_debut"] = $mission->getDateDebut();
  1359.                 $dts[$i]["date_fin"] = $mission->getDateFin(); // Corrected the property name
  1360.                 $dts[$i]["etat_miss"] = $mission->getEtatMiss(); // Corrected the property name
  1361.                 $dts[$i]["numer_miss"] = $mission->getNumeMiss(); // Corrected the property name
  1362.                 // Assuming you want to add these details to $dataToSend
  1363.                 $dataToSend[$i]['agent'] = $dts[$i]["agent"];
  1364.                 $dataToSend[$i]['date_debut'] = $dts[$i]["date_debut"];
  1365.                 $dataToSend[$i]['date_fin'] = $dts[$i]["date_fin"];
  1366.                 $dataToSend[$i]['etat_miss'] = $dts[$i]["etat_miss"];
  1367.                 $dataToSend[$i]['numeMiss'] = $dts[$i]["numer_miss"];
  1368.             }
  1369.         }
  1370.     
  1371.         $missionsList array_values($dataToSend);
  1372.     
  1373.         $detailsJson $serializer->serialize($missionsList'json');
  1374.         return new JsonResponse($detailsJson200, [], true);
  1375.     }
  1376.     
  1377.     #[Route('/getArticle/{id}/'name'getArticle')]
  1378.     public function getArticle(Request $requestEntityManagerInterface $entityManager$id,SerializerInterface $serializer): JsonResponse
  1379.     {
  1380.         $response = [];
  1381.         $marche $entityManager->getRepository(Marche::class)->find($id);
  1382.         if ($marche) {
  1383.             if ($marche->getTypeMarc() == 1) {
  1384.                 $dv $entityManager->getRepository(Devis::class)->find($marche->getIdDevis());
  1385.                 $articles $entityManager->getRepository(DetailDevis::class)->findBy(['idDevis' => $dv->getId()]);
  1386.             } else {
  1387.                 $dv $entityManager->getRepository(Bordereau::class)->find($marche->getIdDevis());
  1388.                 $articles $entityManager->getRepository(DetailBord::class)->findBy(['idBord' => $dv->getId()]);
  1389.             }
  1390.             // Assuming $articles is an array of Article-like entities
  1391.             $response["articles"] =  $articles;
  1392.             $response["type"] = $marche->getTypeMarc() ;
  1393.         }
  1394.         $json $serializer->serialize($response'json');
  1395.         return new JsonResponse($json);
  1396.     }
  1397.     #[Route('/confirmerMission/{id}/'name'confirmerMission')]
  1398.     public function confirmerMission(Request $requestEntityManagerInterface $entityManager,$id): Response
  1399.     {
  1400.         $response "";
  1401.         $chckAccess $this->baseService->Role(83);
  1402.         if($chckAccess == 0){
  1403.             $response "Vous n'avez pas accès à cette opération";
  1404.         }else if ($chckAccess == 2){
  1405.             $response "Vous n'avez pas accès à cette opération";
  1406.         }
  1407.         if( $response == ""){
  1408.             $mission $entityManager->getRepository(Mission::class)->find($id);
  1409.             if (!$mission
  1410.             {
  1411.                 $response 'Desolé, cette mission est introuvable !';
  1412.     
  1413.             } 
  1414.             else 
  1415.             {
  1416.                 
  1417.                 $mission->setEtatMiss(1);
  1418.                 // Remove the utilisateur
  1419.                 $entityManager->flush();
  1420.     
  1421.                 $response "ok";
  1422.                 
  1423.             }
  1424.         }
  1425.         return new Response($response);
  1426.     }
  1427.     #[Route('/reafecterMission'name'reafecterMission')]
  1428.     public function reafecterMission(Request $requestEntityManagerInterface $entityManager ,MissionRepository $missionRepoDetailMissionRepository $detailMissionRepo,BaseService $baseService): Response
  1429.     {
  1430.         $response "";
  1431.         $chckAccess $this->baseService->Role(87);
  1432.         if($chckAccess == 0){
  1433.             $response "Vous n'avez pas accès à cette opération";
  1434.         }else if ($chckAccess == 2){
  1435.             $response "Vous n'avez pas accès à cette opération";
  1436.         }
  1437.         if( $response == ""){
  1438.             $idMission $request->get('idMission');
  1439.             $idUser $request->get('idUser');
  1440.             
  1441.             $mission $entityManager->getRepository(Mission::class)->find($idMission);
  1442.             
  1443.             if (!$mission) {
  1444.                 $response 'Désolé, cette mission est introuvable !';
  1445.             } else {
  1446.                 $details $entityManager->getRepository(DetailMission::class)->findByIdMission($idMission);
  1447.                 $selectedDetails = []; // Move initialization outside the loop
  1448.             
  1449.                 foreach ($details as $detail) {
  1450.                     if ($detail->getEtatDeta() != 1) {
  1451.                         $detail->setEtatDeta(-1);
  1452.                         $selectedDetails[] = $detail// Collect details that meet the condition
  1453.                     }
  1454.                 }
  1455.                 if (count($selectedDetails) > 0) {
  1456.                     $marche $entityManager->getRepository(Marche::class)->findOneById($mission->getIdMarche());
  1457.                     $numero $missionRepo->getNumero($mission->getIdMarche());
  1458.                     $ms = new Mission();
  1459.                     $ms->setIdFichier($mission->getIdFichier());
  1460.                     $ms->setIdAgent($idUser);
  1461.                     $ms->setEtatMiss(0);
  1462.                     $ms->setIdMarche($mission->getIdMarche());
  1463.                     $ms->setCodeArti($mission->getCodeArti());
  1464.                     $ms->setImagArti($mission->getImagArti());
  1465.                     $ms->setDateCreation(new \DateTime());
  1466.                     $ms->setNumeMiss($numero);
  1467.                     $entityManager->persist($ms);
  1468.                     $entityManager->flush();
  1469.                     $text 'Veuillez consulter votre mission affectée';
  1470.                     $baseService->addNotifications($text $mission->getId() , $idUser,0);
  1471.                     foreach ($selectedDetails as $selectedDetail
  1472.                     {
  1473.                         $detailNum $detailMissionRepo->getNumero($details[0]->getIdDetailBord());
  1474.                         $detail = new DetailMission();
  1475.                         $detail->setIdMission($ms->getId());
  1476.                         $detail->setIdDetail($selectedDetail->getIdDetail());
  1477.                         $detail->setEtatDeta(0);
  1478.                         $detail->setNumeDeta($detailNum);
  1479.                         $refeDeta 'REF' str_pad($detailNum10'0'STR_PAD_LEFT);
  1480.                         $detail->setRefeDeta($refeDeta);    
  1481.                         $detail->setIdDetailBord($selectedDetail->getIdDetailBord());
  1482.                         $detail->setDateCreation(new \DateTime());
  1483.                         $detail->setTypeMarc($marche->getTypeMarc());
  1484.                         $entityManager->persist($detail);
  1485.                         $entityManager->flush();
  1486.                     }
  1487.                     if($marche->getTypeMarc() == 1)
  1488.                     {
  1489.                         $article $entityManager->getRepository(DetailDevis::class)->find($selectedDetails[0]->getIdDetailBord());
  1490.             
  1491.                     }
  1492.                     else
  1493.                     {
  1494.                         $article $entityManager->getRepository(DetailBord::class)->find($selectedDetails[0]->getIdDetailBord());
  1495.                     }
  1496.                     if($article)
  1497.                     {
  1498.                         $mission->setCodeArti($article->getCodeArti());
  1499.                         $mission->setImagArti($article->getIconArti());
  1500.                     }
  1501.                     $mission->setEtatMiss(2);
  1502.                     $entityManager->flush();
  1503.                     $response "ok";
  1504.                 } else {
  1505.                     $response "Il n'y a aucun détail à réaffecter à un autre agent.";
  1506.                 }
  1507.             }
  1508.         }
  1509.         return new Response($response);
  1510.         
  1511.     }
  1512.     #[Route('/getImageDetails/{id}/'name'getImageDetails')]
  1513.     public function getImageDetails(Request $requestEntityManagerInterface $entityManagerSerializerInterface $serializer,$id): Response
  1514.     {
  1515.         $chckAccess $this->baseService->Role(16);
  1516.         if($chckAccess == 0){
  1517.             return $this->redirectToRoute('login');
  1518.         }else if ($chckAccess == 2){
  1519.             return $this->redirectToRoute('infoUtilisateur');
  1520.         }
  1521.         $response "";
  1522.         $bonsLivraison $entityManager->getRepository(Images::class)->findByIdDetailFichier($id);
  1523.         if (!$bonsLivraison) {
  1524.             $response "Desolé, il n'ya aucune images introuvale !";
  1525.             return new JsonResponse(['error' => $response], 200);
  1526.         }
  1527.         
  1528.         $bons array_values($bonsLivraison);
  1529.         $bonsJson $serializer->serialize($bons'json');
  1530.         
  1531.         // Return a JSON response with the data
  1532.         return new JsonResponse($bonsJson200, [], true);
  1533.         
  1534.     }
  1535.     #[Route('/showMission'name'showMission')]
  1536.     public function showMission(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService,MissionRepository $missionRepo): Response
  1537.     {
  1538.         $chckAccess $this->baseService->Role(82);
  1539.         if($chckAccess == 0){
  1540.             return $this->redirectToRoute('login');
  1541.         }else if ($chckAccess == 2){
  1542.             return $this->redirectToRoute('infoUtilisateur');
  1543.         }
  1544.         $response ""
  1545.         $idMission=$request->get('id');
  1546.         $mission $entityManager->getRepository(Mission::class)->find($idMission);
  1547.         if($mission)
  1548.         {
  1549.             $detailMissions $entityManager->getRepository(DetailMission::class)->findBy(['idMission'=>$idMission]);
  1550.             $agent $entityManager->getRepository(Utilisateur::class)->find($mission->getIdAgent());
  1551.         }
  1552.         else
  1553.         {
  1554.             return $this->redirect('/listMissions');
  1555.         }
  1556.         return $this->render('mission/showMission.html.twig', [
  1557.             'controller_name' => 'MissionController',
  1558.             'response' => $response,
  1559.             'mission'=>$mission,
  1560.             'detailMissions' => $detailMissions,
  1561.             'utilisateur' => $agent
  1562.         ]);
  1563.     }
  1564.     #[Route('/saisieMission'name'saisieMission')]
  1565.     public function saisieMission(Request $requestEntityManagerInterface $entityManager,
  1566.     DetailMissionRepository $detailMissionRepo): Response
  1567.     {
  1568.     
  1569.         $response "";
  1570.         $chckAccess $this->baseService->Role(118);
  1571.         if($chckAccess == 0){
  1572.             return $this->redirectToRoute('login');
  1573.         }else if ($chckAccess == 2){
  1574.             return $this->redirectToRoute('infoUtilisateur');
  1575.         }
  1576.         $idFichier $request->get('idFichier');
  1577.         $idMission $request->get('idMission');
  1578.         $nomFichier $request->get('nomFichier');
  1579.         $idArticle $request->get('idArticle');
  1580.         $idMarcher $request->get('idMarcher');
  1581.         $Obligatoire true;
  1582.         $fichier $entityManager->getRepository(Fichier::class)->find($idFichier);
  1583.         if($idMission)
  1584.             $mission $entityManager->getRepository(Mission::class)->find($idMission);
  1585.         if($fichier)
  1586.         {
  1587.             $array = array();
  1588.             $form $entityManager->getRepository(InfosModelFichier::class)->findBy(array('idModal' => $fichier->getIdModal()));
  1589.             for ($i=0$i count($form); $i++) { 
  1590.                 $array[$i]['array'] = $form[$i];
  1591.                 $array[$i]['option'] = $entityManager->getRepository(DetailsOptionModel::class)->findBy(array('id_model' => $form[$i]->getId()));
  1592.             }
  1593.             
  1594.             foreach ($form as $info) {
  1595.                 if ($info->getIsObligatoire() == 1) {
  1596.                     $Obligatoire true;
  1597.                     $value $request->get($info->getNomInfo());
  1598.     
  1599.                     if (empty($value)) {
  1600.                         $Obligatoire false;
  1601.                     }
  1602.                 }
  1603.             }
  1604.             
  1605.             $lastDetail $entityManager->getRepository(DetailFichier::class)->findOneBy(array('idModal' => $fichier->getIdModal(),'idFichier' => $idFichier), array('id' => 'DESC'));
  1606.             $marche $entityManager->getRepository(Marche::class)->findOneById($fichier->getIdMarche());
  1607.             if(!$lastDetail){
  1608.                 $lastNum 0;
  1609.                 $idArticle $idArticle;
  1610.             }
  1611.             else{
  1612.                 $lastNum = (int)$lastDetail->getNumeDeta();
  1613.                 $idArticle $lastDetail->getIdDetailBord();
  1614.             }
  1615.                 
  1616.             if($request->getMethod()=='POST')
  1617.             {
  1618.                 if(!$Obligatoire){
  1619.                     $response 'un des champs obligatoires vides';
  1620.                 }
  1621.                 else{
  1622.                     $detail = new DetailFichier();
  1623.                     $detail->setIdModal($fichier->getIdModal());
  1624.                     $detail->setIdFichier($idFichier);
  1625.                     $detail->setNumeDeta($lastNum+1);
  1626.                     if (isset($idMission) && $mission)
  1627.                     {
  1628.                         $detail->setEtatDeta(1);
  1629.                     } 
  1630.                     else
  1631.                     {
  1632.                         $detail->setEtatDeta(0);
  1633.                     }
  1634.                     $detail->setIdDetailBord($idArticle);
  1635.                     $entityManager->persist($detail);
  1636.                     $entityManager->flush();
  1637.                     foreach($form as $f)
  1638.                     {
  1639.                         $value=$request->get($f->getNomInfo());
  1640.                         $info = new InfosDetailFichier();
  1641.                         $info->setIdDetail($detail->getId());
  1642.                         $info->setIdInfo($f->getId());
  1643.                         $info->setValueInfo($value);
  1644.                         $info->setIdFichier($idFichier);
  1645.                         $entityManager->persist($info);
  1646.                         $entityManager->flush();
  1647.         
  1648.                     }
  1649.                     if (isset($idMission) && $mission
  1650.                     {
  1651.                         $detailNum $detailMissionRepo->getNumero($lastDetail->getIdDetailBord());
  1652.                         $detMiss = new DetailMission();
  1653.                         $detMiss->setIdDetail($detail->getId());
  1654.                         $detMiss->setIdMission($idMission);
  1655.                         $detMiss->setEtatDeta(0);
  1656.                         $detMiss->setNumeDeta($detailNum);
  1657.                         $refeDeta 'REF' str_pad($detailNum10'0'STR_PAD_LEFT);
  1658.                         $detMiss->setRefeDeta($refeDeta);    
  1659.                         $detMiss->setDateCreation(new \DateTime());
  1660.                         $detMiss->setIdDetailBord($idArticle);
  1661.                         $detMiss->setTypeMarc($marche->getTypeMarc());
  1662.                         $entityManager->persist($detMiss);
  1663.                         $entityManager->flush();
  1664.                     }
  1665.                     $response 'ok';
  1666.                 }
  1667.             }
  1668.         }
  1669.         else
  1670.         {
  1671.             $response 'Desolé, ce fichier est introuvable !';
  1672.         }
  1673.         
  1674.         return $this->render('mission/saisieMission.html.twig', [
  1675.             'controller_name' => 'MissionController',
  1676.             'response' => $response,
  1677.             'form' => $form,
  1678.             'array'=>$array,
  1679.             'idFichier'=>$idFichier
  1680.         ]);
  1681.     
  1682.         
  1683.     }
  1684.     #[Route('/deleteDetailMission/{id}/'name'deleteDetailMission')]
  1685.     public function deleteDetailMission(Request $requestEntityManagerInterface $entityManager,$id): Response
  1686.     {
  1687.         $response ""
  1688.         $chckAccess $this->baseService->Role(86);
  1689.         if($chckAccess == 0){
  1690.             $response "Vous n'avez pas accès à cette opération";
  1691.         }else if ($chckAccess == 2){
  1692.             $response "Vous n'avez pas accès à cette opération";
  1693.         }
  1694.         if( $response == ""){ 
  1695.             $detailMission $entityManager->getRepository(DetailMission::class)->find($id);
  1696.             if (!$detailMission
  1697.             {
  1698.             
  1699.                 $response 'Desolé, ce detail est introuvable !';
  1700.             } 
  1701.             else 
  1702.             {
  1703.                 $detailFichier $entityManager->getRepository(DetailFichier::class)->find($detailMission->getIdDetail());
  1704.                 $detailFichier->setEtatDeta(0);
  1705.                 // Remove the detail
  1706.                 $entityManager->remove($detailMission);
  1707.                 $entityManager->flush();
  1708.                 $response "ok";
  1709.                 
  1710.             }
  1711.         }
  1712.         return new Response($response);
  1713.     }
  1714.     #[Route('/getFormDetaile/{id}/'name'getFormDetaile')]
  1715.     public function getFormDetaile(Request $requestEntityManagerInterface $entityManager$idSerializerInterface $serializer): Response
  1716.     {
  1717.         $response = [];
  1718.         $response['error'] = 'ok';
  1719.         $detailMission $entityManager->getRepository(DetailMission::class)->find($id);
  1720.         if (!$detailMission
  1721.         {
  1722.             $response['error'] = 'Désolé, ce détail de mission est introuvable !';
  1723.         } 
  1724.         else 
  1725.         {
  1726.             $detailFichier $entityManager->getRepository(DetailFichier::class)->find($detailMission->getIdDetail());
  1727.             if ($detailFichier
  1728.             {
  1729.                 $infosModal $entityManager->getRepository(InfosModelFichier::class)->findBy(array("idModal" => $detailFichier->getIdModal()));
  1730.                 $infosdetail $entityManager->getRepository(InfosDetailFichier::class)->findBy(array("idDetail" => $detailFichier->getId()));
  1731.     
  1732.                 $response['infosModal'] = $infosModal;
  1733.                 $response['infosdetail'] = $infosdetail;
  1734.             } 
  1735.             else 
  1736.             {
  1737.                 $response['error'] = 'Désolé, ce détail de fichier est introuvable !';
  1738.             }
  1739.         }
  1740.     
  1741.         $json $serializer->serialize($response'json');
  1742.     
  1743.         return new JsonResponse($json);
  1744.     }
  1745.     
  1746.     #[Route('/updateDetail'name'updateDetail')]
  1747.     public function updateDetail(Request $requestEntityManagerInterface $entityManager): Response
  1748.     {
  1749.         $response "";
  1750.         $idDetail=$request->get('idDetail');
  1751.         $detailFichier $entityManager->getRepository(DetailFichier::class)->find($idDetail);
  1752.         if ($detailFichier
  1753.         {
  1754.             $infosModal $entityManager->getRepository(InfosModelFichier::class)->findBy(array("idModal" => $detailFichier->getIdModal()));
  1755.             
  1756.             foreach($infosModal as $info)
  1757.             {
  1758.                 $value=$request->get('info_'.$info->getId());
  1759.                 $infodetail $entityManager->getRepository(InfosDetailFichier::class)->findOneBy(array("idDetail" => $idDetail,"idInfo" => $info->getId()));
  1760.                 if($infodetail)
  1761.                 {
  1762.                     $infodetail->setValueInfo($value);
  1763.                 }
  1764.             }
  1765.             $entityManager->flush();
  1766.             $response "ok";
  1767.         }
  1768.         else
  1769.         {
  1770.             $response "Desolé, ce detail est introuvable !";
  1771.         }
  1772.         return new Response($response);
  1773.     }
  1774.     #[Route('/finaliserDetailMission/{id}/'name'finaliserDetailMission')]
  1775.     public function finaliserDetailMission(Request $requestEntityManagerInterface $entityManager,$id): Response
  1776.     {
  1777.         $response "";
  1778.         $chckAccess $this->baseService->Role(88);
  1779.         if($chckAccess == 0){
  1780.             $response "Vous n'avez pas accès à cette opération";
  1781.         }else if ($chckAccess == 2){
  1782.             $response "Vous n'avez pas accès à cette opération";
  1783.         }
  1784.         if( $response == ""){
  1785.             $detailMission $entityManager->getRepository(DetailMission::class)->find($id);
  1786.     
  1787.             if (!$detailMission
  1788.             {
  1789.                
  1790.                 $response 'Desolé, ce detail est introuvable !';
  1791.     
  1792.             } 
  1793.             else 
  1794.             {
  1795.     
  1796.                 $detailFichier $entityManager->getRepository(DetailFichier::class)->find($detailMission->getIdDetail());
  1797.                 $detailMission->setEtatDeta(1);
  1798.                 // Remove the detail
  1799.                 $detailFichier->setEtatDeta(2);
  1800.                 $entityManager->flush();
  1801.                 $response "ok";
  1802.                 
  1803.             }
  1804.         }
  1805.         return new Response($response);
  1806.     }
  1807.     #[Route('/finaliserMission/{id}/'name'finaliserMission')]
  1808.     public function finaliserMission(Request $requestEntityManagerInterface $entityManager,$id): Response
  1809.     {
  1810.         $response "";
  1811.         $chckAccess $this->baseService->Role(88);
  1812.         if($chckAccess == 0){
  1813.             $response "Vous n'avez pas accès à cette opération";
  1814.         }else if ($chckAccess == 2){
  1815.             $response "Vous n'avez pas accès à cette opération";
  1816.         }
  1817.         if( $response == ""){
  1818.             $mission $entityManager->getRepository(Mission::class)->find($id);
  1819.     
  1820.             if (!$mission
  1821.             {
  1822.                
  1823.                 $response 'Desolé, cette mission est introuvable !';
  1824.     
  1825.             } 
  1826.             else 
  1827.             {
  1828.     
  1829.                 $detailsMission $entityManager->getRepository(DetailMission::class)->findBy(array("idMission" => $mission->getId()));
  1830.     
  1831.                 foreach($detailsMission as $detailMission)
  1832.                 {
  1833.                     $detailFichier $entityManager->getRepository(DetailFichier::class)->find($detailMission->getIdDetail());
  1834.                     $detailMission->setEtatDeta(1);
  1835.                     $detailFichier->setEtatDeta(2);    
  1836.                 }
  1837.     
  1838.                 $mission->setEtatMiss(2);
  1839.                 $stockMission $entityManager->getRepository(StockMission::class)->findBy(array("idMission" => $mission->getId()));
  1840.                 foreach($stockMission as $stock)
  1841.                 {
  1842.                     if($stock->getQte() > 0)
  1843.                     {
  1844.                         $mouvement = new MouvementStock();
  1845.                         $mouvement->setIdPiec($stock->getIdPiece());
  1846.                         $mouvement->setDateMouv(new \DateTime());
  1847.                         $mouvement->setToStock($stock->getFromStock());
  1848.                         $mouvement->setQte($stock->getQte());
  1849.                         $mouvement->setFromStock(-1);
  1850.                         $mouvement->setMotifMouv('Retroure de stock mission');
  1851.                         $mouvement->setEtatMouv(0);
  1852.                         $entityManager->persist($mouvement);
  1853.                         $entityManager->flush();
  1854.         
  1855.                         if($stock->getFromStock() == 0)
  1856.                         {
  1857.                             $article $entityManager->getRepository(Piece::class)->find($stock->getIdPiece());
  1858.                             $inStokc $article->getInStock();
  1859.                             $qteArticle $inStokc $stock->getQte();
  1860.                             $article->setInStock($qteArticle);
  1861.                         }
  1862.                         else
  1863.                         {
  1864.                             $stockR = new StockReception();
  1865.                             $stockR->setIdBure($stock->getFromStock());
  1866.                             $stockR->setIdPiec($stock->getIdPiece());
  1867.                             $stockR->setQte($stock->getQte());
  1868.                             $stockR->setIdMouv($mouvement->getId());
  1869.                             $entityManager->persist($stockR);
  1870.         
  1871.                         }
  1872.     
  1873.                     }
  1874.     
  1875.                 }
  1876.                 $entityManager->flush();
  1877.                 $response "ok";
  1878.                 
  1879.             }
  1880.         }
  1881.         return new Response($response);
  1882.     }
  1883.     #[Route('/getModalArticle'name'getModalArticle')]
  1884.     public function getModalArticle(Request $requestEntityManagerInterface $entityManagerBaseService $baseServiceSerializerInterface $serializer): Response
  1885.     {
  1886.         $response "";
  1887.         $articleId $request->get('ArticleId');
  1888.         $detailBord $entityManager->getRepository(DetailBord::class)->findOneById($articleId);
  1889.         $detailDevis $entityManager->getRepository(DetailDevis::class)->findOneById($articleId);
  1890.         if ($detailBord) {
  1891.             $idModal $detailBord->getIdModalFich();
  1892.         } elseif ($detailDevis) {
  1893.             $idModal $detailDevis->getIdModalFich();
  1894.         }
  1895.         $modeles $entityManager->getRepository(InfosModelFichier::class)->findByIdModal($idModal);
  1896.         
  1897.         $resultModeles array_values($modeles);
  1898.         
  1899.         $modelesJson $serializer->serialize($resultModeles'json');
  1900.         return new JsonResponse($modelesJson200, [], true);
  1901.     }
  1902.     #[Route('/CreateNewFichier'name'CreateNewFichier')]
  1903.     public function CreateNewFichier(Request $requestEntityManagerInterface $entityManagerBaseService $baseServiceSerializerInterface $serializer): Response
  1904.     {
  1905.         $response = [];
  1906.         $response['error'] = 'Ok';
  1907.         $idFichier $request->get('idFichier');
  1908.         $idMission $request->get('idMission');
  1909.         $nomFichier $request->get('nomFichier');
  1910.         $idArticle $request->get('idArticle');
  1911.         $idMarcher $request->get('idMarcher');
  1912.         $detailBord $entityManager->getRepository(DetailBord::class)->findOneById($idArticle);
  1913.         $detailDevis $entityManager->getRepository(DetailDevis::class)->findOneById($idArticle);
  1914.         if ($detailBord) {
  1915.             $idModal $detailBord->getIdModalFich();
  1916.         } elseif ($detailDevis) {
  1917.             $idModal $detailDevis->getIdModalFich();
  1918.         }
  1919.         
  1920.         $Obligatoire true;
  1921.         if($idFichier == -1)
  1922.         {
  1923.             $response['form'] =  1;
  1924.         }
  1925.         else 
  1926.         {
  1927.             $response['form'] =  2;
  1928.         }
  1929.         
  1930.         if($idFichier == -1){
  1931.             $fichier = new Fichier();
  1932.             $fichier->setNomFich($nomFichier);
  1933.             $fichier->setDateCreation(new \DateTime());
  1934.             $fichier->setIdModal($idModal);
  1935.             $fichier->setIdMarche($idMarcher);
  1936.             $fichier->setEtatFich(0);
  1937.             $fichier->setUrlFich('');
  1938.             $entityManager->persist($fichier);
  1939.             $entityManager->flush();
  1940.             $idNewFichier =$fichier->getId();
  1941.             $response['idFichier'] = $idNewFichier;
  1942.         }
  1943.         else{
  1944.             $fichier $entityManager->getRepository(Fichier::class)->find($idFichier);
  1945.         }
  1946.         
  1947.         $array = array();
  1948.         $form $entityManager->getRepository(InfosModelFichier::class)->findBy(array('idModal' => $fichier->getIdModal()));
  1949.         for ($i=0$i count($form); $i++) { 
  1950.             $array[$i]['array'] = $form[$i];
  1951.             $array[$i]['option'] = $entityManager->getRepository(DetailsOptionModel::class)->findBy(array('id_model' => $form[$i]->getId()));
  1952.             if($form[$i]->getIsObligatoire() == 1){
  1953.                 $Obligatoire false;
  1954.             }
  1955.         }
  1956.         $json $serializer->serialize($response'json');
  1957.     
  1958.         return new JsonResponse($json);
  1959.         
  1960.     }
  1961. }