src/Controller/Marches/MissionController.php line 586

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 $userRepository): 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.         return $this->render('mission/listMissions.html.twig', [
  1041.             'controller_name' => 'MissionController',
  1042.             'missions' => $missionsEncours,
  1043.             'yearSelect' => $yearSelect ,
  1044.             "years"=>$years,
  1045.             'months'=>$months,
  1046.             'users' => $users,
  1047.             'missionsEnAttente' => $missionsEnAttente
  1048.         ]);
  1049.     }
  1050.     #[Route('/updateMission'name'updateMission')]
  1051.     public function updateMission(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService,
  1052.     MissionRepository $missionRepoDetailMissionRepository $detailMissionRepo): Response
  1053.     {
  1054.         $chckAccess $this->baseService->Role(84);
  1055.         if($chckAccess == 0){
  1056.             return $this->redirectToRoute('login');
  1057.         }else if ($chckAccess == 2){
  1058.             return $this->redirectToRoute('infoUtilisateur');
  1059.         }
  1060.         $response ""
  1061.         $idMission=$request->get('id');
  1062.         $mission $entityManager->getRepository(Mission::class)->find($idMission);
  1063.         $detailMissions $entityManager->getRepository(DetailMission::class)->findBy(['idMission'=>$idMission]);
  1064.         
  1065.         if($mission){
  1066.             $fichiers $entityManager->getRepository(Fichier::class)->findAll();
  1067.             $idFichier=$mission->getIdFichier();
  1068.             if($request->getMethod()=='POST')
  1069.             {
  1070.                 
  1071.                 $selected $request->get('selected');
  1072.                 $agent $request->get('agents');
  1073.                 $titre $request->get('titre');
  1074.     
  1075.                 $mission->setTitre($titre);
  1076.                 $entityManager->persist($mission);
  1077.                 $entityManager->flush();
  1078.                     
  1079.                 if($selected == null)
  1080.                 {
  1081.                     $response "veuillez selectionner";
  1082.                 }
  1083.                 else
  1084.                 {
  1085.                     $mission->setIdAgent($agent);
  1086.                     $missionRepo->miseAjourDt($idMission);
  1087.                     $idMarche $detailMissions[0]->getTypeMarc();
  1088.                     foreach($detailMissions as $dm)
  1089.                     {
  1090.                         $entityManager->remove($dm);
  1091.                     }
  1092.                     for($i=0;$i<count($selected);$i++)
  1093.                     {
  1094.                         $detail_fichier $entityManager->getRepository(DetailFichier::class)->find($selected[$i]);
  1095.                         $detail_fichier->setEtatDeta(1);
  1096.                         $detailNum $detailMissionRepo->getNumero($detail_fichier->getIdDetailBord());
  1097.                         $detail = new DetailMission();
  1098.                         $detail->setIdMission($idMission);
  1099.                         $detail->setIdDetail($selected[$i]);
  1100.                         $detail->setEtatDeta(0);
  1101.                         $detail->setNumeDeta($detailNum);
  1102.                         $refeDeta 'REF' str_pad($detailNum10'0'STR_PAD_LEFT);
  1103.                         $detail->setRefeDeta($refeDeta);    
  1104.                         $detail->setIdDetailBord($detail_fichier->getIdDetailBord());
  1105.                         //$mission->setIdMarche(0);
  1106.                         $detail->setDateCreation(new \DateTime());
  1107.                         $detail->setTypeMarc($idMarche);
  1108.                         $entityManager->persist($detail);
  1109.                         $entityManager->flush();
  1110.                     }
  1111.                     $entityManager->flush();
  1112.                     $response "ok";
  1113.                     return $this->redirect('/listMissions');
  1114.                 }
  1115.             }
  1116.         }
  1117.         else
  1118.         {
  1119.             return $this->redirect('/listMissions');
  1120.         }
  1121.         return $this->render('mission/updateMission.html.twig', [
  1122.             'controller_name' => 'MissionController',
  1123.             'response' => $response,
  1124.             'fichiers' => $fichiers,
  1125.             'idFichier' => $idFichier,
  1126.             'mission' => $mission,
  1127.             'idMission'=>$idMission,
  1128.             'agentSelected'=>$mission->getIdAgent(),
  1129.             'detailMissions' => $detailMissions
  1130.         ]);
  1131.     }
  1132.     
  1133.     
  1134.     #[Route('/updateMissionByCarte'name'updateMissionByCarte')]
  1135.     public function updateMissionByCarte(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService,MissionRepository $missionRepo): Response
  1136.     {
  1137.         $response ""
  1138.         $chckAccess $this->baseService->Role(84);
  1139.         if($chckAccess == 0){
  1140.             return $this->redirectToRoute('login');
  1141.         }else if ($chckAccess == 2){
  1142.             return $this->redirectToRoute('infoUtilisateur');
  1143.         }
  1144.         $idMission=$request->get('id');
  1145.         $mission $entityManager->getRepository(Mission::class)->find($idMission);
  1146.         $detailMissions $entityManager->getRepository(DetailMission::class)->findBy(['idMission'=>$idMission]);
  1147.         if($mission){
  1148.             $fichiers $entityManager->getRepository(Fichier::class)->findAll();
  1149.             $idFichier=$mission->getIdFichier();
  1150.             $detail =  $entityManager->getRepository(DetailFichier::class)->findBy(['idFichier'=>$idFichier]);
  1151.             if($request->getMethod()=='POST')
  1152.             {
  1153.                 $selected $request->get('selected');
  1154.                 $agent $request->get('agents');
  1155.                 if($selected == null)
  1156.                 {
  1157.                     $response "veuillez selectionner !!";
  1158.                 }
  1159.                 else
  1160.                 {
  1161.                     // $mission = new Mission();
  1162.                     // $mission->setIdFichier($idFichier);
  1163.                     $mission->setIdAgent($agent);
  1164.                     // $mission->setEtatMiss(0);
  1165.                     // $mission->setIdMarche(0);
  1166.                     // $mission->setDateDebut(new \DateTime());
  1167.                     // $mission->setDateFin(new \DateTime());
  1168.                     // $mission->setDateCreation(new \DateTime());
  1169.                     // $mission->setNumeMiss(1);
  1170.                     // $entityManager->persist($mission);
  1171.                     // $entityManager->flush();
  1172.                     // $detailsFichierSelected = $entityManager->getRepository(DetailFichier::class)->find($selected[$i]);
  1173.                     $missionRepo->miseAjourDt($idMission);
  1174.                     $idMarche $detailMissions[0]->getTypeMarc();
  1175.                     foreach($detailMissions as $dm)
  1176.                     {
  1177.                         $entityManager->remove($dm);
  1178.                     }
  1179.                     for($i=0;$i<count($selected);$i++)
  1180.                     {
  1181.                         $detail_fichier $entityManager->getRepository(DetailFichier::class)->find($selected[$i]);
  1182.                         $detail_fichier->setEtatDeta(1);
  1183.                         $detail = new DetailMission();
  1184.                         $detail->setIdMission($idMission);
  1185.                         $detail->setIdDetail($selected[$i]);
  1186.                         $detail->setEtatDeta(0);
  1187.                         $detail->setIdDetailBord($detail_fichier->getIdDetailBord());
  1188.                         //$mission->setIdMarche(0);
  1189.                         $detail->setDateCreation(new \DateTime());
  1190.                         $detail->setTypeMarc($idMarche);
  1191.                         $entityManager->persist($detail);
  1192.                     }
  1193.                     $entityManager->flush();
  1194.                     $response "ok";
  1195.                     return $this->redirect('/listMissions');
  1196.                 }
  1197.             }
  1198.         }else{
  1199.             return $this->redirect('/listMissions');
  1200.         }
  1201.         return $this->render('mission/updateMissionByCarte.html.twig', [
  1202.             'controller_name' => 'MissionController',
  1203.             'response' => $response,
  1204.             'fichiers' => $fichiers,
  1205.             'idFichier' => $idFichier,
  1206.             'idMission'=>$idMission,
  1207.             'agentSelected'=>$mission->getIdAgent(),
  1208.             'detailMissions' => $detailMissions,
  1209.             'idAgent'=>$mission->getIdAgent(),
  1210.             'idFile'=>$idFichier,
  1211.             'detail'=>$detail
  1212.         ]);
  1213.     }
  1214.     
  1215.     
  1216.     #[Route('/updateTitreMission'name'update_titre_mission'methods: ['POST'])]
  1217.     public function updateTitreMission(Request $requestEntityManagerInterface $entityManager): Response
  1218.     {
  1219.         $idMission $request->request->get('id');
  1220.         $nouveauTitre $request->request->get('titre');
  1221.         if (!$idMission || !$nouveauTitre) {
  1222.             $this->addFlash('error''ID ou titre manquant.');
  1223.             return $this->redirectToRoute('showMission', ['id' => $idMission]);
  1224.         }
  1225.         $mission $entityManager->getRepository(Mission::class)->find($idMission);
  1226.         if (!$mission) {
  1227.             $this->addFlash('error''Mission non trouvée.');
  1228.             return $this->redirectToRoute('listMissions');
  1229.         }
  1230.         $mission->setTitre($nouveauTitre);
  1231.         $entityManager->flush();
  1232.         $this->addFlash('success''Titre mis à jour avec succès.');
  1233.         return $this->redirectToRoute('showMission', ['id' => $idMission]);
  1234.     }
  1235.     
  1236.     #[Route('/liste_missions_terminee'name'liste_missions_terminee')]
  1237.     public function listMissionsTerminee(Request $requestEntityManagerInterface $entityManager MissionRepository $missionsRepo): Response
  1238.     {
  1239.         $chckAccess $this->baseService->Role(82);
  1240.         if($chckAccess == 0){
  1241.             return $this->redirectToRoute('login');
  1242.         }else if ($chckAccess == 2){
  1243.             return $this->redirectToRoute('infoUtilisateur');
  1244.         }
  1245.         $month $request->get('month');
  1246.         $year $request->get('year');
  1247.         
  1248.         // Create a DateTime object for the first day of the specified month and year
  1249.         $firstDay = new \DateTime("$year-$month-01");
  1250.         
  1251.         // Get the last day of the month by modifying the first day
  1252.         $lastDay = clone $firstDay;
  1253.         $lastDay->modify('last day of this month');
  1254.         $date_debut $firstDay->format('Y-m-d') ;
  1255.         $date_fin $lastDay->format('Y-m-d');
  1256.         
  1257.         $missions $missionsRepo->getMissionsByDate(2,$date_debut $date_fin);
  1258.         return $this->render('mission/liste_missions_terminee.html.twig', [
  1259.             'controller_name' => 'MissionController',
  1260.             'missions'=>$missions
  1261.         ]);
  1262.     }
  1263.     #[Route('/deleteMission/{id}/'name'deleteMission')]
  1264.     public function deleteMission(Request $requestEntityManagerInterface $entityManager,$id): Response
  1265.     {
  1266.         $response "";
  1267.         $chckAccess $this->baseService->Role(86);
  1268.         if($chckAccess == 0){
  1269.             $response "Vous n'avez pas accès à cette opération";
  1270.         }else if ($chckAccess == 2){
  1271.             $response "Vous n'avez pas accès à cette opération";
  1272.         }
  1273.         if( $response == ""){
  1274.             $mission $entityManager->getRepository(Mission::class)->find($id);
  1275.     
  1276.             if (!$mission
  1277.             {
  1278.                 $response 'Desolé, cette mission est introuvable !';
  1279.             } 
  1280.             else 
  1281.             {
  1282.     
  1283.                 $details $entityManager->getRepository(DetailMission::class)->findByIdMission($id);
  1284.                 foreach($details as $detail)
  1285.                 {    
  1286.                     $detail_fichier $entityManager->getRepository(DetailFichier::class)->find($detail->getIdDetail());
  1287.                     $detail_fichier->setEtatDeta(0);    
  1288.                     $entityManager->remove($detail);
  1289.                 }
  1290.     
  1291.                 // Remove the utilisateur
  1292.                 $entityManager->remove($mission);
  1293.                 $entityManager->flush();
  1294.     
  1295.     
  1296.                 $entityManager->flush();
  1297.                 $response "ok";
  1298.                 
  1299.             }
  1300.         }
  1301.         return new Response($response);
  1302.     }
  1303.     #[Route('/getMissionsByFile/{id}/'name'getMissionsByFile')]
  1304.     public function getMissionsByFile(Request $requestEntityManagerInterface $entityManagerSerializerInterface $serializer$id): Response
  1305.     {
  1306.         $response "";
  1307.         
  1308.         $fichier $entityManager->getRepository(Fichier::class)->find($id);
  1309.     
  1310.         if (!$fichier) {
  1311.             $response 'Désolé, ce fichier est introuvable !';
  1312.         } else {
  1313.             $dataToSend = [];
  1314.     
  1315.             // Use a foreach loop instead of for loop
  1316.             foreach ($entityManager->getRepository(Mission::class)->findByIdFichier($id) as $i => $mission) {
  1317.                 $dataToSend[$i]['id'] = $mission->getId();
  1318.                 $dts[$i]["agent"] = $entityManager->getRepository(Utilisateur::class)->find($mission->getIdAgent());
  1319.                 $dts[$i]["date_debut"] = $mission->getDateDebut();
  1320.                 $dts[$i]["date_fin"] = $mission->getDateFin(); // Corrected the property name
  1321.                 $dts[$i]["etat_miss"] = $mission->getEtatMiss(); // Corrected the property name
  1322.                 $dts[$i]["numer_miss"] = $mission->getNumeMiss(); // Corrected the property name
  1323.                 // Assuming you want to add these details to $dataToSend
  1324.                 $dataToSend[$i]['agent'] = $dts[$i]["agent"];
  1325.                 $dataToSend[$i]['date_debut'] = $dts[$i]["date_debut"];
  1326.                 $dataToSend[$i]['date_fin'] = $dts[$i]["date_fin"];
  1327.                 $dataToSend[$i]['etat_miss'] = $dts[$i]["etat_miss"];
  1328.                 $dataToSend[$i]['numeMiss'] = $dts[$i]["numer_miss"];
  1329.             }
  1330.         }
  1331.     
  1332.         $missionsList array_values($dataToSend);
  1333.     
  1334.         $detailsJson $serializer->serialize($missionsList'json');
  1335.         return new JsonResponse($detailsJson200, [], true);
  1336.     }
  1337.     
  1338.     #[Route('/getArticle/{id}/'name'getArticle')]
  1339.     public function getArticle(Request $requestEntityManagerInterface $entityManager$id,SerializerInterface $serializer): JsonResponse
  1340.     {
  1341.         $response = [];
  1342.         $marche $entityManager->getRepository(Marche::class)->find($id);
  1343.         if ($marche) {
  1344.             if ($marche->getTypeMarc() == 1) {
  1345.                 $dv $entityManager->getRepository(Devis::class)->find($marche->getIdDevis());
  1346.                 $articles $entityManager->getRepository(DetailDevis::class)->findBy(['idDevis' => $dv->getId()]);
  1347.             } else {
  1348.                 $dv $entityManager->getRepository(Bordereau::class)->find($marche->getIdDevis());
  1349.                 $articles $entityManager->getRepository(DetailBord::class)->findBy(['idBord' => $dv->getId()]);
  1350.             }
  1351.             // Assuming $articles is an array of Article-like entities
  1352.             $response["articles"] =  $articles;
  1353.             $response["type"] = $marche->getTypeMarc() ;
  1354.         }
  1355.         $json $serializer->serialize($response'json');
  1356.         return new JsonResponse($json);
  1357.     }
  1358.     #[Route('/confirmerMission/{id}/'name'confirmerMission')]
  1359.     public function confirmerMission(Request $requestEntityManagerInterface $entityManager,$id): Response
  1360.     {
  1361.         $response "";
  1362.         $chckAccess $this->baseService->Role(83);
  1363.         if($chckAccess == 0){
  1364.             $response "Vous n'avez pas accès à cette opération";
  1365.         }else if ($chckAccess == 2){
  1366.             $response "Vous n'avez pas accès à cette opération";
  1367.         }
  1368.         if( $response == ""){
  1369.             $mission $entityManager->getRepository(Mission::class)->find($id);
  1370.             if (!$mission
  1371.             {
  1372.                 $response 'Desolé, cette mission est introuvable !';
  1373.     
  1374.             } 
  1375.             else 
  1376.             {
  1377.                 
  1378.                 $mission->setEtatMiss(1);
  1379.                 // Remove the utilisateur
  1380.                 $entityManager->flush();
  1381.     
  1382.                 $response "ok";
  1383.                 
  1384.             }
  1385.         }
  1386.         return new Response($response);
  1387.     }
  1388.     #[Route('/reafecterMission'name'reafecterMission')]
  1389.     public function reafecterMission(Request $requestEntityManagerInterface $entityManager ,MissionRepository $missionRepoDetailMissionRepository $detailMissionRepo,BaseService $baseService): Response
  1390.     {
  1391.         $response "";
  1392.         $chckAccess $this->baseService->Role(87);
  1393.         if($chckAccess == 0){
  1394.             $response "Vous n'avez pas accès à cette opération";
  1395.         }else if ($chckAccess == 2){
  1396.             $response "Vous n'avez pas accès à cette opération";
  1397.         }
  1398.         if( $response == ""){
  1399.             $idMission $request->get('idMission');
  1400.             $idUser $request->get('idUser');
  1401.             
  1402.             $mission $entityManager->getRepository(Mission::class)->find($idMission);
  1403.             
  1404.             if (!$mission) {
  1405.                 $response 'Désolé, cette mission est introuvable !';
  1406.             } else {
  1407.                 $details $entityManager->getRepository(DetailMission::class)->findByIdMission($idMission);
  1408.                 $selectedDetails = []; // Move initialization outside the loop
  1409.             
  1410.                 foreach ($details as $detail) {
  1411.                     if ($detail->getEtatDeta() != 1) {
  1412.                         $detail->setEtatDeta(-1);
  1413.                         $selectedDetails[] = $detail// Collect details that meet the condition
  1414.                     }
  1415.                 }
  1416.                 if (count($selectedDetails) > 0) {
  1417.                     $marche $entityManager->getRepository(Marche::class)->findOneById($mission->getIdMarche());
  1418.                     $numero $missionRepo->getNumero($mission->getIdMarche());
  1419.                     $ms = new Mission();
  1420.                     $ms->setIdFichier($mission->getIdFichier());
  1421.                     $ms->setIdAgent($idUser);
  1422.                     $ms->setEtatMiss(0);
  1423.                     $ms->setIdMarche($mission->getIdMarche());
  1424.                     $ms->setCodeArti($mission->getCodeArti());
  1425.                     $ms->setImagArti($mission->getImagArti());
  1426.                     $ms->setDateCreation(new \DateTime());
  1427.                     $ms->setNumeMiss($numero);
  1428.                     $entityManager->persist($ms);
  1429.                     $entityManager->flush();
  1430.                     $text 'Veuillez consulter votre mission affectée';
  1431.                     $baseService->addNotifications($text $mission->getId() , $idUser,0);
  1432.                     foreach ($selectedDetails as $selectedDetail
  1433.                     {
  1434.                         $detailNum $detailMissionRepo->getNumero($details[0]->getIdDetailBord());
  1435.                         $detail = new DetailMission();
  1436.                         $detail->setIdMission($ms->getId());
  1437.                         $detail->setIdDetail($selectedDetail->getIdDetail());
  1438.                         $detail->setEtatDeta(0);
  1439.                         $detail->setNumeDeta($detailNum);
  1440.                         $refeDeta 'REF' str_pad($detailNum10'0'STR_PAD_LEFT);
  1441.                         $detail->setRefeDeta($refeDeta);    
  1442.                         $detail->setIdDetailBord($selectedDetail->getIdDetailBord());
  1443.                         $detail->setDateCreation(new \DateTime());
  1444.                         $detail->setTypeMarc($marche->getTypeMarc());
  1445.                         $entityManager->persist($detail);
  1446.                         $entityManager->flush();
  1447.                     }
  1448.                     if($marche->getTypeMarc() == 1)
  1449.                     {
  1450.                         $article $entityManager->getRepository(DetailDevis::class)->find($selectedDetails[0]->getIdDetailBord());
  1451.             
  1452.                     }
  1453.                     else
  1454.                     {
  1455.                         $article $entityManager->getRepository(DetailBord::class)->find($selectedDetails[0]->getIdDetailBord());
  1456.                     }
  1457.                     if($article)
  1458.                     {
  1459.                         $mission->setCodeArti($article->getCodeArti());
  1460.                         $mission->setImagArti($article->getIconArti());
  1461.                     }
  1462.                     $mission->setEtatMiss(2);
  1463.                     $entityManager->flush();
  1464.                     $response "ok";
  1465.                 } else {
  1466.                     $response "Il n'y a aucun détail à réaffecter à un autre agent.";
  1467.                 }
  1468.             }
  1469.         }
  1470.         return new Response($response);
  1471.         
  1472.     }
  1473.     #[Route('/getImageDetails/{id}/'name'getImageDetails')]
  1474.     public function getImageDetails(Request $requestEntityManagerInterface $entityManagerSerializerInterface $serializer,$id): Response
  1475.     {
  1476.         $chckAccess $this->baseService->Role(16);
  1477.         if($chckAccess == 0){
  1478.             return $this->redirectToRoute('login');
  1479.         }else if ($chckAccess == 2){
  1480.             return $this->redirectToRoute('infoUtilisateur');
  1481.         }
  1482.         $response "";
  1483.         $bonsLivraison $entityManager->getRepository(Images::class)->findByIdDetailFichier($id);
  1484.         if (!$bonsLivraison) {
  1485.             $response "Desolé, il n'ya aucune images introuvale !";
  1486.             return new JsonResponse(['error' => $response], 200);
  1487.         }
  1488.         
  1489.         $bons array_values($bonsLivraison);
  1490.         $bonsJson $serializer->serialize($bons'json');
  1491.         
  1492.         // Return a JSON response with the data
  1493.         return new JsonResponse($bonsJson200, [], true);
  1494.         
  1495.     }
  1496.     #[Route('/showMission'name'showMission')]
  1497.     public function showMission(Request $requestEntityManagerInterface $entityManager,ValidateService $validateService,MissionRepository $missionRepo): Response
  1498.     {
  1499.         $chckAccess $this->baseService->Role(82);
  1500.         if($chckAccess == 0){
  1501.             return $this->redirectToRoute('login');
  1502.         }else if ($chckAccess == 2){
  1503.             return $this->redirectToRoute('infoUtilisateur');
  1504.         }
  1505.         $response ""
  1506.         $idMission=$request->get('id');
  1507.         $mission $entityManager->getRepository(Mission::class)->find($idMission);
  1508.         if($mission)
  1509.         {
  1510.             $detailMissions $entityManager->getRepository(DetailMission::class)->findBy(['idMission'=>$idMission]);
  1511.             $agent $entityManager->getRepository(Utilisateur::class)->find($mission->getIdAgent());
  1512.         }
  1513.         else
  1514.         {
  1515.             return $this->redirect('/listMissions');
  1516.         }
  1517.         return $this->render('mission/showMission.html.twig', [
  1518.             'controller_name' => 'MissionController',
  1519.             'response' => $response,
  1520.             'mission'=>$mission,
  1521.             'detailMissions' => $detailMissions,
  1522.             'utilisateur' => $agent
  1523.         ]);
  1524.     }
  1525.     #[Route('/saisieMission'name'saisieMission')]
  1526.     public function saisieMission(Request $requestEntityManagerInterface $entityManager,
  1527.     DetailMissionRepository $detailMissionRepo): Response
  1528.     {
  1529.     
  1530.         $response "";
  1531.         $chckAccess $this->baseService->Role(118);
  1532.         if($chckAccess == 0){
  1533.             return $this->redirectToRoute('login');
  1534.         }else if ($chckAccess == 2){
  1535.             return $this->redirectToRoute('infoUtilisateur');
  1536.         }
  1537.         $idFichier $request->get('idFichier');
  1538.         $idMission $request->get('idMission');
  1539.         $nomFichier $request->get('nomFichier');
  1540.         $idArticle $request->get('idArticle');
  1541.         $idMarcher $request->get('idMarcher');
  1542.         $Obligatoire true;
  1543.         $fichier $entityManager->getRepository(Fichier::class)->find($idFichier);
  1544.         if($idMission)
  1545.             $mission $entityManager->getRepository(Mission::class)->find($idMission);
  1546.         if($fichier)
  1547.         {
  1548.             $array = array();
  1549.             $form $entityManager->getRepository(InfosModelFichier::class)->findBy(array('idModal' => $fichier->getIdModal()));
  1550.             for ($i=0$i count($form); $i++) { 
  1551.                 $array[$i]['array'] = $form[$i];
  1552.                 $array[$i]['option'] = $entityManager->getRepository(DetailsOptionModel::class)->findBy(array('id_model' => $form[$i]->getId()));
  1553.             }
  1554.             
  1555.             foreach ($form as $info) {
  1556.                 if ($info->getIsObligatoire() == 1) {
  1557.                     $Obligatoire true;
  1558.                     $value $request->get($info->getNomInfo());
  1559.     
  1560.                     if (empty($value)) {
  1561.                         $Obligatoire false;
  1562.                     }
  1563.                 }
  1564.             }
  1565.             
  1566.             $lastDetail $entityManager->getRepository(DetailFichier::class)->findOneBy(array('idModal' => $fichier->getIdModal(),'idFichier' => $idFichier), array('id' => 'DESC'));
  1567.             $marche $entityManager->getRepository(Marche::class)->findOneById($fichier->getIdMarche());
  1568.             if(!$lastDetail){
  1569.                 $lastNum 0;
  1570.                 $idArticle $idArticle;
  1571.             }
  1572.             else{
  1573.                 $lastNum = (int)$lastDetail->getNumeDeta();
  1574.                 $idArticle $lastDetail->getIdDetailBord();
  1575.             }
  1576.                 
  1577.             if($request->getMethod()=='POST')
  1578.             {
  1579.                 if(!$Obligatoire){
  1580.                     $response 'un des champs obligatoires vides';
  1581.                 }
  1582.                 else{
  1583.                     $detail = new DetailFichier();
  1584.                     $detail->setIdModal($fichier->getIdModal());
  1585.                     $detail->setIdFichier($idFichier);
  1586.                     $detail->setNumeDeta($lastNum+1);
  1587.                     if (isset($idMission) && $mission)
  1588.                     {
  1589.                         $detail->setEtatDeta(1);
  1590.                     } 
  1591.                     else
  1592.                     {
  1593.                         $detail->setEtatDeta(0);
  1594.                     }
  1595.                     $detail->setIdDetailBord($idArticle);
  1596.                     $entityManager->persist($detail);
  1597.                     $entityManager->flush();
  1598.                     foreach($form as $f)
  1599.                     {
  1600.                         $value=$request->get($f->getNomInfo());
  1601.                         $info = new InfosDetailFichier();
  1602.                         $info->setIdDetail($detail->getId());
  1603.                         $info->setIdInfo($f->getId());
  1604.                         $info->setValueInfo($value);
  1605.                         $info->setIdFichier($idFichier);
  1606.                         $entityManager->persist($info);
  1607.                         $entityManager->flush();
  1608.         
  1609.                     }
  1610.                     if (isset($idMission) && $mission
  1611.                     {
  1612.                         $detailNum $detailMissionRepo->getNumero($lastDetail->getIdDetailBord());
  1613.                         $detMiss = new DetailMission();
  1614.                         $detMiss->setIdDetail($detail->getId());
  1615.                         $detMiss->setIdMission($idMission);
  1616.                         $detMiss->setEtatDeta(0);
  1617.                         $detMiss->setNumeDeta($detailNum);
  1618.                         $refeDeta 'REF' str_pad($detailNum10'0'STR_PAD_LEFT);
  1619.                         $detMiss->setRefeDeta($refeDeta);    
  1620.                         $detMiss->setDateCreation(new \DateTime());
  1621.                         $detMiss->setIdDetailBord($idArticle);
  1622.                         $detMiss->setTypeMarc($marche->getTypeMarc());
  1623.                         $entityManager->persist($detMiss);
  1624.                         $entityManager->flush();
  1625.                     }
  1626.                     $response 'ok';
  1627.                 }
  1628.             }
  1629.         }
  1630.         else
  1631.         {
  1632.             $response 'Desolé, ce fichier est introuvable !';
  1633.         }
  1634.         
  1635.         return $this->render('mission/saisieMission.html.twig', [
  1636.             'controller_name' => 'MissionController',
  1637.             'response' => $response,
  1638.             'form' => $form,
  1639.             'array'=>$array,
  1640.             'idFichier'=>$idFichier
  1641.         ]);
  1642.     
  1643.         
  1644.     }
  1645.     #[Route('/deleteDetailMission/{id}/'name'deleteDetailMission')]
  1646.     public function deleteDetailMission(Request $requestEntityManagerInterface $entityManager,$id): Response
  1647.     {
  1648.         $response ""
  1649.         $chckAccess $this->baseService->Role(86);
  1650.         if($chckAccess == 0){
  1651.             $response "Vous n'avez pas accès à cette opération";
  1652.         }else if ($chckAccess == 2){
  1653.             $response "Vous n'avez pas accès à cette opération";
  1654.         }
  1655.         if( $response == ""){ 
  1656.             $detailMission $entityManager->getRepository(DetailMission::class)->find($id);
  1657.             if (!$detailMission
  1658.             {
  1659.             
  1660.                 $response 'Desolé, ce detail est introuvable !';
  1661.             } 
  1662.             else 
  1663.             {
  1664.                 $detailFichier $entityManager->getRepository(DetailFichier::class)->find($detailMission->getIdDetail());
  1665.                 $detailFichier->setEtatDeta(0);
  1666.                 // Remove the detail
  1667.                 $entityManager->remove($detailMission);
  1668.                 $entityManager->flush();
  1669.                 $response "ok";
  1670.                 
  1671.             }
  1672.         }
  1673.         return new Response($response);
  1674.     }
  1675.     #[Route('/getFormDetaile/{id}/'name'getFormDetaile')]
  1676.     public function getFormDetaile(Request $requestEntityManagerInterface $entityManager$idSerializerInterface $serializer): Response
  1677.     {
  1678.         $response = [];
  1679.         $response['error'] = 'ok';
  1680.         $detailMission $entityManager->getRepository(DetailMission::class)->find($id);
  1681.         if (!$detailMission
  1682.         {
  1683.             $response['error'] = 'Désolé, ce détail de mission est introuvable !';
  1684.         } 
  1685.         else 
  1686.         {
  1687.             $detailFichier $entityManager->getRepository(DetailFichier::class)->find($detailMission->getIdDetail());
  1688.             if ($detailFichier
  1689.             {
  1690.                 $infosModal $entityManager->getRepository(InfosModelFichier::class)->findBy(array("idModal" => $detailFichier->getIdModal()));
  1691.                 $infosdetail $entityManager->getRepository(InfosDetailFichier::class)->findBy(array("idDetail" => $detailFichier->getId()));
  1692.     
  1693.                 $response['infosModal'] = $infosModal;
  1694.                 $response['infosdetail'] = $infosdetail;
  1695.             } 
  1696.             else 
  1697.             {
  1698.                 $response['error'] = 'Désolé, ce détail de fichier est introuvable !';
  1699.             }
  1700.         }
  1701.     
  1702.         $json $serializer->serialize($response'json');
  1703.     
  1704.         return new JsonResponse($json);
  1705.     }
  1706.     
  1707.     #[Route('/updateDetail'name'updateDetail')]
  1708.     public function updateDetail(Request $requestEntityManagerInterface $entityManager): Response
  1709.     {
  1710.         $response "";
  1711.         $idDetail=$request->get('idDetail');
  1712.         $detailFichier $entityManager->getRepository(DetailFichier::class)->find($idDetail);
  1713.         if ($detailFichier
  1714.         {
  1715.             $infosModal $entityManager->getRepository(InfosModelFichier::class)->findBy(array("idModal" => $detailFichier->getIdModal()));
  1716.             
  1717.             foreach($infosModal as $info)
  1718.             {
  1719.                 $value=$request->get('info_'.$info->getId());
  1720.                 $infodetail $entityManager->getRepository(InfosDetailFichier::class)->findOneBy(array("idDetail" => $idDetail,"idInfo" => $info->getId()));
  1721.                 if($infodetail)
  1722.                 {
  1723.                     $infodetail->setValueInfo($value);
  1724.                 }
  1725.             }
  1726.             $entityManager->flush();
  1727.             $response "ok";
  1728.         }
  1729.         else
  1730.         {
  1731.             $response "Desolé, ce detail est introuvable !";
  1732.         }
  1733.         return new Response($response);
  1734.     }
  1735.     #[Route('/finaliserDetailMission/{id}/'name'finaliserDetailMission')]
  1736.     public function finaliserDetailMission(Request $requestEntityManagerInterface $entityManager,$id): Response
  1737.     {
  1738.         $response "";
  1739.         $chckAccess $this->baseService->Role(88);
  1740.         if($chckAccess == 0){
  1741.             $response "Vous n'avez pas accès à cette opération";
  1742.         }else if ($chckAccess == 2){
  1743.             $response "Vous n'avez pas accès à cette opération";
  1744.         }
  1745.         if( $response == ""){
  1746.             $detailMission $entityManager->getRepository(DetailMission::class)->find($id);
  1747.     
  1748.             if (!$detailMission
  1749.             {
  1750.                
  1751.                 $response 'Desolé, ce detail est introuvable !';
  1752.     
  1753.             } 
  1754.             else 
  1755.             {
  1756.     
  1757.                 $detailFichier $entityManager->getRepository(DetailFichier::class)->find($detailMission->getIdDetail());
  1758.                 $detailMission->setEtatDeta(1);
  1759.                 // Remove the detail
  1760.                 $detailFichier->setEtatDeta(2);
  1761.                 $entityManager->flush();
  1762.                 $response "ok";
  1763.                 
  1764.             }
  1765.         }
  1766.         return new Response($response);
  1767.     }
  1768.     #[Route('/finaliserMission/{id}/'name'finaliserMission')]
  1769.     public function finaliserMission(Request $requestEntityManagerInterface $entityManager,$id): Response
  1770.     {
  1771.         $response "";
  1772.         $chckAccess $this->baseService->Role(88);
  1773.         if($chckAccess == 0){
  1774.             $response "Vous n'avez pas accès à cette opération";
  1775.         }else if ($chckAccess == 2){
  1776.             $response "Vous n'avez pas accès à cette opération";
  1777.         }
  1778.         if( $response == ""){
  1779.             $mission $entityManager->getRepository(Mission::class)->find($id);
  1780.     
  1781.             if (!$mission
  1782.             {
  1783.                
  1784.                 $response 'Desolé, cette mission est introuvable !';
  1785.     
  1786.             } 
  1787.             else 
  1788.             {
  1789.     
  1790.                 $detailsMission $entityManager->getRepository(DetailMission::class)->findBy(array("idMission" => $mission->getId()));
  1791.     
  1792.                 foreach($detailsMission as $detailMission)
  1793.                 {
  1794.                     $detailFichier $entityManager->getRepository(DetailFichier::class)->find($detailMission->getIdDetail());
  1795.                     $detailMission->setEtatDeta(1);
  1796.                     $detailFichier->setEtatDeta(2);    
  1797.                 }
  1798.     
  1799.                 $mission->setEtatMiss(2);
  1800.                 $stockMission $entityManager->getRepository(StockMission::class)->findBy(array("idMission" => $mission->getId()));
  1801.                 foreach($stockMission as $stock)
  1802.                 {
  1803.                     if($stock->getQte() > 0)
  1804.                     {
  1805.                         $mouvement = new MouvementStock();
  1806.                         $mouvement->setIdPiec($stock->getIdPiece());
  1807.                         $mouvement->setDateMouv(new \DateTime());
  1808.                         $mouvement->setToStock($stock->getFromStock());
  1809.                         $mouvement->setQte($stock->getQte());
  1810.                         $mouvement->setFromStock(-1);
  1811.                         $mouvement->setMotifMouv('Retroure de stock mission');
  1812.                         $mouvement->setEtatMouv(0);
  1813.                         $entityManager->persist($mouvement);
  1814.                         $entityManager->flush();
  1815.         
  1816.                         if($stock->getFromStock() == 0)
  1817.                         {
  1818.                             $article $entityManager->getRepository(Piece::class)->find($stock->getIdPiece());
  1819.                             $inStokc $article->getInStock();
  1820.                             $qteArticle $inStokc $stock->getQte();
  1821.                             $article->setInStock($qteArticle);
  1822.                         }
  1823.                         else
  1824.                         {
  1825.                             $stockR = new StockReception();
  1826.                             $stockR->setIdBure($stock->getFromStock());
  1827.                             $stockR->setIdPiec($stock->getIdPiece());
  1828.                             $stockR->setQte($stock->getQte());
  1829.                             $stockR->setIdMouv($mouvement->getId());
  1830.                             $entityManager->persist($stockR);
  1831.         
  1832.                         }
  1833.     
  1834.                     }
  1835.     
  1836.                 }
  1837.                 $entityManager->flush();
  1838.                 $response "ok";
  1839.                 
  1840.             }
  1841.         }
  1842.         return new Response($response);
  1843.     }
  1844.     #[Route('/getModalArticle'name'getModalArticle')]
  1845.     public function getModalArticle(Request $requestEntityManagerInterface $entityManagerBaseService $baseServiceSerializerInterface $serializer): Response
  1846.     {
  1847.         $response "";
  1848.         $articleId $request->get('ArticleId');
  1849.         $detailBord $entityManager->getRepository(DetailBord::class)->findOneById($articleId);
  1850.         $detailDevis $entityManager->getRepository(DetailDevis::class)->findOneById($articleId);
  1851.         if ($detailBord) {
  1852.             $idModal $detailBord->getIdModalFich();
  1853.         } elseif ($detailDevis) {
  1854.             $idModal $detailDevis->getIdModalFich();
  1855.         }
  1856.         $modeles $entityManager->getRepository(InfosModelFichier::class)->findByIdModal($idModal);
  1857.         
  1858.         $resultModeles array_values($modeles);
  1859.         
  1860.         $modelesJson $serializer->serialize($resultModeles'json');
  1861.         return new JsonResponse($modelesJson200, [], true);
  1862.     }
  1863.     #[Route('/CreateNewFichier'name'CreateNewFichier')]
  1864.     public function CreateNewFichier(Request $requestEntityManagerInterface $entityManagerBaseService $baseServiceSerializerInterface $serializer): Response
  1865.     {
  1866.         $response = [];
  1867.         $response['error'] = 'Ok';
  1868.         $idFichier $request->get('idFichier');
  1869.         $idMission $request->get('idMission');
  1870.         $nomFichier $request->get('nomFichier');
  1871.         $idArticle $request->get('idArticle');
  1872.         $idMarcher $request->get('idMarcher');
  1873.         $detailBord $entityManager->getRepository(DetailBord::class)->findOneById($idArticle);
  1874.         $detailDevis $entityManager->getRepository(DetailDevis::class)->findOneById($idArticle);
  1875.         if ($detailBord) {
  1876.             $idModal $detailBord->getIdModalFich();
  1877.         } elseif ($detailDevis) {
  1878.             $idModal $detailDevis->getIdModalFich();
  1879.         }
  1880.         
  1881.         $Obligatoire true;
  1882.         if($idFichier == -1)
  1883.         {
  1884.             $response['form'] =  1;
  1885.         }
  1886.         else 
  1887.         {
  1888.             $response['form'] =  2;
  1889.         }
  1890.         
  1891.         if($idFichier == -1){
  1892.             $fichier = new Fichier();
  1893.             $fichier->setNomFich($nomFichier);
  1894.             $fichier->setDateCreation(new \DateTime());
  1895.             $fichier->setIdModal($idModal);
  1896.             $fichier->setIdMarche($idMarcher);
  1897.             $fichier->setEtatFich(0);
  1898.             $fichier->setUrlFich('');
  1899.             $entityManager->persist($fichier);
  1900.             $entityManager->flush();
  1901.             $idNewFichier =$fichier->getId();
  1902.             $response['idFichier'] = $idNewFichier;
  1903.         }
  1904.         else{
  1905.             $fichier $entityManager->getRepository(Fichier::class)->find($idFichier);
  1906.         }
  1907.         
  1908.         $array = array();
  1909.         $form $entityManager->getRepository(InfosModelFichier::class)->findBy(array('idModal' => $fichier->getIdModal()));
  1910.         for ($i=0$i count($form); $i++) { 
  1911.             $array[$i]['array'] = $form[$i];
  1912.             $array[$i]['option'] = $entityManager->getRepository(DetailsOptionModel::class)->findBy(array('id_model' => $form[$i]->getId()));
  1913.             if($form[$i]->getIsObligatoire() == 1){
  1914.                 $Obligatoire false;
  1915.             }
  1916.         }
  1917.         $json $serializer->serialize($response'json');
  1918.     
  1919.         return new JsonResponse($json);
  1920.         
  1921.     }
  1922. }