src/Controller/ImportationController.php line 163

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Article;
  4. use App\Entity\ArticleProd;
  5. use App\Entity\Bpu;
  6. use App\Entity\BpuProd;
  7. use App\Entity\BpuValeur;
  8. use App\Entity\BpuValeurProdArticle;
  9. use App\Entity\BpuValueSav;
  10. use App\Entity\Etr;
  11. use App\Entity\EtrMois;
  12. use App\Entity\EtrProd;
  13. use App\Entity\FichierPenalites;
  14. use App\Entity\Infra;
  15. use App\Entity\InterventionProduction;
  16. use App\Entity\InterventionSav;
  17. use App\Entity\MoisEtr;
  18. use App\Entity\MoisIntervention;
  19. use App\Entity\MoisInterventionsProd;
  20. use App\Entity\Penalite;
  21. use App\Entity\PlanningEtr;
  22. use App\Entity\PlanningEtrProd;
  23. use App\Filter\ChunkReadFilter;
  24. use App\Form\EtrProdType;
  25. use App\Form\EtrType;
  26. use App\Repository\ArticleProdRepository;
  27. use App\Repository\ArticleRepository;
  28. use App\Repository\BpuProdRepository;
  29. use App\Repository\BpuRepository;
  30. use App\Repository\BpuValeurProdArticleRepository;
  31. use App\Repository\BpuValeurRepository;
  32. use App\Repository\BpuValueSavRepository;
  33. use App\Repository\EtrMoisRepository;
  34. use App\Repository\EtrProdRepository;
  35. use App\Repository\EtrRepository;
  36. use App\Repository\FichierPenalitesRepository;
  37. use App\Repository\InfraRepository;
  38. use App\Repository\InterventionProductionRepository;
  39. use App\Repository\InterventionSavRepository;
  40. use App\Repository\MoisEtrRepository;
  41. use App\Repository\MoisInterventionRepository;
  42. use App\Repository\MoisInterventionsProdRepository;
  43. use App\Repository\PenaliteRepository;
  44. use App\Repository\PlanningEtrProdRepository;
  45. use App\Repository\PlanningEtrRepository;
  46. use App\Repository\SocieteRepository;
  47. use DateTime;
  48. use DateTimeImmutable;
  49. use Exception;
  50. use PhpOffice\PhpSpreadsheet\IOFactory;
  51. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  52. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  53. use Symfony\Component\HttpFoundation\Request;
  54. use Symfony\Component\HttpFoundation\Response;
  55. use Symfony\Component\Routing\Annotation\Route;
  56. /*
  57.     Creer par b.labdaa
  58.     -L'importation des donnees sous format Excel(Intervention-SH.COM - Original)
  59.     Detecter les techniciens et les articles avec leur prix"
  60. */
  61. /*
  62.     utiliser la bubliotheque phpoffice/phpspreadsheet pour lire et ecrire dans les fichiers Excel
  63.     https://packagist.org/packages/phpoffice/phpspreadsheet
  64.  */
  65. use PhpOffice\PhpSpreadsheet\Reader\Csv;
  66. use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
  67. use Symfony\Component\HttpFoundation\JsonResponse;
  68. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  69. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  70. use Symfony\Component\HttpFoundation\StreamedResponse;
  71. class ImportationController extends AbstractController
  72. {
  73.     private $moisInterventionRepository;
  74.     private $interventionSavRepository;
  75.     private $planningEtrRepository;
  76.     private $articleRepository;
  77.     private $bpuRepository;
  78.     private $etrRepository;
  79.     private $etrMoisRepository;
  80.     private $bpuValueSavRepository;
  81.     private $interventionProductionRepository;
  82.     private $articleProdRepository;
  83.     private $bpuProdRepository;
  84.     private $bpuValeurRepository;
  85.     private $etrProdRepository;
  86.     private $infraRepository;
  87.     private $moisEtrRepository;
  88.     private $moisInterventionsProdRepository;
  89.     private $planningEtrProdRepository;
  90.     private $societeRepository;
  91.     private $bpuValeurProdArticleRepository;
  92.     private $penaliteRepository;
  93.     private $fichierPenalitesRepository;
  94.     public function __construct(MoisInterventionRepository $moisInterventionRepository,
  95.                                 InterventionSavRepository $interventionSavRepository,
  96.                                 PlanningEtrRepository $planningEtrRepository,
  97.                                 ArticleRepository $articleRepository,
  98.                                 BpuRepository $bpuRepository,
  99.                                 EtrRepository $etrRepository,
  100.                                 EtrMoisRepository $etrMoisRepository,
  101.                                 BpuValueSavRepository $bpuValueSavRepository,
  102.                                 // Prod
  103.                                 InterventionProductionRepository $interventionProductionRepository,
  104.                                 ArticleProdRepository $articleProdRepository,
  105.                                 BpuProdRepository $bpuProdRepository,
  106.                                 BpuValeurRepository $bpuValeurRepository,
  107.                                 EtrProdRepository $etrProdRepository,
  108.                                 InfraRepository $infraRepository,
  109.                                 MoisEtrRepository $moisEtrRepository,
  110.                                 MoisInterventionsProdRepository $moisInterventionsProdRepository,
  111.                                 PlanningEtrProdRepository $planningEtrProdRepository,
  112.                                 SocieteRepository $societeRepository,
  113.                                 BpuValeurProdArticleRepository $bpuValeurProdArticleRepository,
  114.                                 PenaliteRepository $penaliteRepository,
  115.                                 FichierPenalitesRepository $fichierPenalitesRepository
  116.                                 )
  117.     {
  118.         $this->moisInterventionRepository=$moisInterventionRepository;
  119.         $this->interventionSavRepository=$interventionSavRepository;
  120.         $this->planningEtrRepository=$planningEtrRepository;
  121.         $this->articleRepository=$articleRepository;
  122.         $this->bpuRepository=$bpuRepository;
  123.         $this->etrRepository=$etrRepository;
  124.         $this->etrMoisRepository=$etrMoisRepository;
  125.         $this->bpuValueSavRepository=$bpuValueSavRepository;
  126.         // Prod
  127.         $this->interventionProductionRepository=$interventionProductionRepository;
  128.         $this->articleProdRepository=$articleProdRepository;
  129.         $this->bpuProdRepository=$bpuProdRepository;
  130.         $this->bpuValeurRepository=$bpuValeurRepository;
  131.         $this->etrProdRepository=$etrProdRepository;
  132.         $this->infraRepository=$infraRepository;
  133.         $this->moisEtrRepository=$moisEtrRepository;
  134.         $this->moisInterventionsProdRepository=$moisInterventionsProdRepository;
  135.         $this->planningEtrProdRepository=$planningEtrProdRepository;
  136.         $this->societeRepository=$societeRepository;
  137.         $this->bpuValeurProdArticleRepository=$bpuValeurProdArticleRepository;
  138.         $this->penaliteRepository=$penaliteRepository;
  139.         $this->fichierPenalitesRepository=$fichierPenalitesRepository;
  140.     }
  141.     #[Route('/app_redirect/{contenu?0}/{file_name?}/{extension_file?}/{debutCount?0}/{idMois?}/{delete?}'name'app_redirect',methods:["POST","GET"])]
  142.     public function app_redirect(Request $request,$contenu,$file_name,$extension_file,$debutCount,$idMois): Response
  143.     {
  144.         return $this->render('importation/redirect.html.twig', [
  145.             'contenu'=>1,
  146.             'file_name'=>$file_name,
  147.             'extension_file'=>$extension_file,
  148.             'debutCount'=>$debutCount,
  149.             'idMois'=>$idMois
  150.         ]);
  151.     }
  152.     #[Route('/importation/{contenu?0}/{file_name?}/{extension_file?}/{debutCount?1}/{idMois?}/{delete?}'name'app_importation',methods:["POST","GET"])]
  153.     public function index(Request $request,$contenu,$file_name,$extension_file,int $debutCount,$idMois,$delete,SessionInterface $session): Response
  154.     {
  155.         //Verifier la memoire de serveur
  156.         //$memory_limit = ini_get('memory_limit');
  157.         $longeurTraiter=500;
  158.         $countFichier=0;
  159.         $avancement=2000;
  160.         $listeNouveauxTechniciens=[];
  161.         $listeNouveauxTechniciensId=[];
  162.         $listeEntreprise=[];
  163.         $typeIntervention='';
  164.         $inputFileType '';
  165.         // Remplir un tableau avec les colonne oblegatoire existe dans le fichier
  166.         $colonnesFichier=[];
  167.         $firstBoocle=true;
  168.         //try{
  169.         if($contenu=="0"){
  170.             $excelFichier=$request->files->get('excelFichier');
  171.             $extension=$excelFichier->guessExtension();
  172.             $filename pathinfo($excelFichier->getClientOriginalName(), PATHINFO_FILENAME );
  173.             $newFilename $filename.'-'.uniqid().'.'.$extension;
  174.             try {
  175.                 $excelFichier->move(
  176.                     $this->getParameter('path_files'),
  177.                     $newFilename
  178.                 );
  179.             } catch (FileException $e) {}
  180.             /* Les entree de type xlsx */
  181.             if($extension == 'xlsx') {
  182.                 $reader = new Xlsx();
  183.                 $inputFileType 'Xlsx';
  184.             } else {
  185.                 /* Les entree de type csv */
  186.                 $reader = new Csv();
  187.                 $inputFileType 'Csv';
  188.             }
  189.         }else{
  190.             $newFilename=$file_name;
  191.             $extension=$extension_file;
  192.             if($extension_file == 'xlsx') {
  193.                 $reader = new Xlsx();
  194.                 $inputFileType 'Xlsx';
  195.             } else {
  196.                 $this->addFlash('erreur','Veuillez importer un fichier avec l\'extention xlsx');
  197.                 return $this->redirect($request->headers->get('referer'));
  198.                 /* Les entree de type csv */
  199.                 $reader = new Csv();
  200.                 $inputFileType 'Csv';
  201.             }
  202.         }
  203.         if($debutCount==1){
  204.             $session->set('listeNouveauxTechniciens',[]);
  205.             $session->set('listeNouveauxTechniciensId',[]);
  206.             $session->set('listeEntreprise',[]);
  207.             $session->set('colonnesFichier',[]);
  208.             $session->set('typeIntervention','');
  209.         }else{
  210.             $listeNouveauxTechniciens=(array)$session->get('listeNouveauxTechniciens');
  211.             $listeNouveauxTechniciensId=(array)$session->get('listeNouveauxTechniciensId');
  212.             $listeEntreprise=(array)$session->get('listeEntreprise');
  213.             $colonnesFichier=(array)$session->get('colonnesFichier');
  214.             $session->set('mois',$idMois);
  215.             //$typeIntervention=$session->get('typeIntervention');
  216.         }
  217.         // Definir la date de prestation
  218.         $dateInterventionFichie=new DateTime();
  219.         $dateInterventionFichie->setDate((int)$request->get('annee'), (int)$request->get('mois'), 1);
  220.         $reader \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
  221.         $chunkFilter = new ChunkReadFilter();
  222.         $reader->setReadEmptyCells(false);
  223.         $reader->setReadFilter($chunkFilter);
  224.         for ($startRow $debutCount+1$startRow $avancement+$debutCount+$startRow += $longeurTraiter) {//65536
  225.             $chunkFilter->setRows($startRow,$longeurTraiter);
  226.             $spreadsheet $reader->load('fichier_importe/'.$newFilename);
  227.             $feuilleInterventions $spreadsheet->getActiveSheet();
  228.             $countFichier=$feuilleInterventions->getHighestRow();
  229.             //Definir le type de fichier
  230.             if($typeIntervention==""){
  231.                 foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  232.                     $cellIterator $row->getCellIterator();
  233.                     $cellIterator->setIterateOnlyExistingCells(FALSE);
  234.                     if ($key==1) {
  235.                         foreach ($cellIterator as $keyCell=> $cell) {
  236.                             $colonnesFichier[$keyCell]=$cell->getValue();
  237.                         }
  238.                         $session->set('colonnesFichier',$colonnesFichier);
  239.                     }
  240.                     if ($key==2) {
  241.                         if (in_array('InterventionID',$colonnesFichier)==true) {
  242.                             $typeIntervention='sav';
  243.                             $nb=$this->planningEtrRepository->count(['annee'=>(int)$request->get('annee'),'mois'=>(int)$request->get('mois')]);
  244.                             if($nb==0){
  245.                                 return $this->render('importation/erreur.html.twig',[
  246.                                     'message'=>'Veuillez configurer premièrement les techniciens..'
  247.                                 ]);
  248.                             }
  249.                         }elseif (in_array('Jeton / RC',$colonnesFichier)==true) {
  250.                             $typeIntervention='prod';
  251.                             $nb=$this->planningEtrProdRepository->count(['annee'=>(int)$request->get('annee'),'mois'=>(int)$request->get('mois')]);
  252.                             if($nb==0){
  253.                                 return $this->render('importation/erreur.html.twig',[
  254.                                     'message'=>'Veuillez configurer premièrement les techniciens..'
  255.                                 ]);
  256.                             }
  257.                         }else{
  258.                             return $this->render('importation/erreur.html.twig',[
  259.                                 'message'=>'Le fichier que vous avez importé n\'est pas bon. Veuillez importer le bon fichier.'
  260.                             ]);
  261.                         }
  262.                         $session->set('typeIntervention',$typeIntervention);
  263.                         /* foreach ($cellIterator as $keyCell => $cell) {
  264.                             if($typeIntervention=='sav'){
  265.                                 if ($colonnesFichier[$keyCell]=='date') {
  266.                                     $dateInterventionFichie=$cell->getValue();
  267.                                     break;
  268.                                 }
  269.                             }elseif($typeIntervention=='prod'){
  270.                                 if ($colonnesFichier[$keyCell]=='Date d\'intervention') {
  271.                                     $dateInterventionFichie=$cell->getValue();
  272.                                     break;
  273.                                 }
  274.                             }
  275.                         } */
  276.                         break;
  277.                     }
  278.                 }
  279.             }
  280.             if($contenu=="0" && $firstBoocle==true){
  281.                 //Date
  282.                 $firstBoocle=false;
  283.                 //$dateIntervention = \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($dateInterventionFichie);
  284.                 //$dateInterventionFichie=null;
  285.                 //$dateIntervention=$dateInterventionFichie;
  286.                 //$moisInterventionInt=date_format($dateIntervention, "m");
  287.                 //$yearInterventionInt=date_format($dateIntervention, "Y");
  288.                 if ($typeIntervention=='sav') {
  289.                     $moisIntervention=new MoisIntervention();
  290.                     $moisIntervention=$this->moisInterventionRepository->findOneBy([
  291.                         'mois'=>(int)$request->get('mois'),
  292.                         'annee'=>(int)$request->get('annee')
  293.                     ]);
  294.                     if ($moisIntervention) {
  295.                         $session->set('mois',$moisIntervention->getId());
  296.                         // Si le mois deja exister donc supprimer tout les intervention de ce mois
  297.                         return $this->render('importation/confirm_delete_mois.html.twig',[
  298.                             'contenu'=>1,
  299.                             'file_name'=>$newFilename,
  300.                             'extension_file'=>$extension,
  301.                             'debutCount'=>1,
  302.                             'idMois'=>$moisIntervention
  303.                         ]);
  304.                     } else {
  305.                         // Creer un nouveau mois
  306.                         $moisIntervention=new MoisIntervention();
  307.                         $dateIntervention=$dateInterventionFichie;
  308.                         //$dateIntervention->setDate($yearInterventionInt, $moisInterventionInt, 1);
  309.                         $moisIntervention->setMois((int)$request->get('mois'));
  310.                         $moisIntervention->setAnnee((int)$request->get('annee'));
  311.                         $moisIntervention->setDateIntervention($dateIntervention);
  312.                         $dateIntervention=new DateTime();
  313.                         $moisIntervention->setCreateAt($dateIntervention);
  314.                         $moisIntervention->setNomFichier($newFilename);
  315.                         $moisIntervention->setTypeInterventions($typeIntervention);
  316.                         $this->moisInterventionRepository->add($moisInterventiontrue);
  317.                     }
  318.                     $session->set('mois',$moisIntervention->getId());
  319.                 }elseif ($typeIntervention=='prod') {
  320.                     $moisIntervention=new MoisInterventionsProd();
  321.                     $moisIntervention=$this->moisInterventionsProdRepository->findOneBy([
  322.                         'mois'=>(int)$request->get('mois'),
  323.                         'annee'=>(int)$request->get('annee')
  324.                     ]);
  325.                     if ($moisIntervention) {
  326.                         $session->set('mois',$moisIntervention->getId());
  327.                         // Si le mois deja exister donc supprimer tout les intervention de ce mois
  328.                         return $this->render('importation/confirm_delete_mois.html.twig',[
  329.                             'contenu'=>1,
  330.                             'file_name'=>$newFilename,
  331.                             'extension_file'=>$extension,
  332.                             'debutCount'=>1,
  333.                             'idMois'=>$moisIntervention
  334.                         ]);
  335.                     } else {
  336.                         // Creer un nouveau mois
  337.                         $moisIntervention=new MoisInterventionsProd();
  338.                         $dateIntervention=$dateInterventionFichie;//new DateTime();
  339.                         //$dateIntervention->setDate($yearInterventionInt, $moisInterventionInt, 1);
  340.                         $moisIntervention->setMois((int)$request->get('mois'));
  341.                         $moisIntervention->setAnnee((int)$request->get('annee'));
  342.                         $moisIntervention->setDateIntervention($dateIntervention);
  343.                         $dateIntervention=new DateTimeImmutable();
  344.                         $moisIntervention->setCreatedAt($dateIntervention);
  345.                         $moisIntervention->setNomFichier($newFilename);
  346.                         $this->moisInterventionsProdRepository->add($moisInterventiontrue);
  347.                     }
  348.                     $session->set('mois',$moisIntervention->getId());
  349.                 }
  350.             }else{
  351.                 if ($typeIntervention=='sav' && $firstBoocle==true) {
  352.                     $moisIntervention=new MoisIntervention();
  353.                     $moisIntervention=$this->moisInterventionRepository->find($idMois);
  354.                     if ($delete=="1") {
  355.                         $file =  $this->getParameter('kernel.project_dir') . '/public/fichier_importe/'.$moisIntervention->getNomFichier();
  356.                         if(is_file($file)) unlink($file);
  357.                         $moisIntervention->setNomFichier($newFilename);
  358.                         $this->moisInterventionRepository->add($moisInterventiontrue);
  359.                         $firstBoocle=false;
  360.                         $this->bpuRepository->removeEnsemble($moisIntervention->getId());
  361.                         $this->interventionSavRepository->removeEnsemble($moisIntervention->getId());
  362.                         $this->etrMoisRepository->removeEnsemble($moisIntervention->getId());
  363.                     }
  364.                 }elseif ($typeIntervention=='prod' && $firstBoocle==true) {
  365.                     $moisIntervention=new MoisIntervention();
  366.                     $moisIntervention=$this->moisInterventionsProdRepository->find($idMois);
  367.                     if ($delete=="1") {
  368.                         $file =  $this->getParameter('kernel.project_dir') . '/public/fichier_importe/'.$moisIntervention->getNomFichier();
  369.                         if(is_file($file)) unlink($file);
  370.                         $moisIntervention->setNomFichier($newFilename);
  371.                         $this->moisInterventionsProdRepository->add($moisInterventiontrue);
  372.                         $firstBoocle=false;
  373.                         $this->bpuProdRepository->removeEnsemble($moisIntervention->getId());
  374.                         $this->interventionProductionRepository->removeEnsemble($moisIntervention->getId());
  375.                         $this->moisEtrRepository->removeEnsemble($moisIntervention->getId());
  376.                     }
  377.                 }
  378.             }
  379.             if($typeIntervention=='sav'){
  380.                 if(in_array('InterventionID',$colonnesFichier)==false || in_array('dpt',$colonnesFichier)==false || in_array('NRO',$colonnesFichier)==false || in_array('jeton',$colonnesFichier)==false || in_array('etat',$colonnesFichier)==false || in_array('RDV',$colonnesFichier)==false || in_array('type',$colonnesFichier)==false || in_array('date',$colonnesFichier)==false || in_array('TechIdent',$colonnesFichier)==false || in_array('BoiteIdent',$colonnesFichier)==false || in_array('Entit? Factu',$colonnesFichier)==false || in_array('Article',$colonnesFichier)==false || in_array('Qté',$colonnesFichier)==false || in_array('P.U.',$colonnesFichier)==false || in_array('TOTAL',$colonnesFichier)==false || in_array('Zone',$colonnesFichier)==false){
  381.                     //Erreur
  382.                     $file =  $this->getParameter('kernel.project_dir') . '/public/fichier_importe/'.$moisIntervention->getNomFichier();
  383.                     if(is_file($file)) unlink($file);
  384.                     $firstBoocle=false;
  385.                     $this->bpuRepository->removeEnsemble($moisIntervention->getId());
  386.                     $this->interventionSavRepository->removeEnsemble($moisIntervention->getId());
  387.                     $this->etrMoisRepository->removeEnsemble($moisIntervention->getId());
  388.                     $this->moisInterventionRepository->remove($moisIntervention,true);
  389.                     return $this->render('importation/erreur.html.twig',[
  390.                         'message'=>'Il manque des colonnes, veuillez vérifier le fichier que vous avez importé.'
  391.                     ]);
  392.                 }
  393.                 $etrs=$this->etrRepository->findAll();
  394.                 foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  395.                     if($key>=$startRow){
  396.                         $cellIterator $row->getCellIterator();
  397.                         $cellIterator->setIterateOnlyExistingCells(false);
  398.                         /* Traiter les enregistrements et enregistre dans la base de donnees */
  399.                         $interventionSav=new InterventionSav();
  400.                         $interventionSav->setRemoved(false);
  401.                         $technicien=new PlanningEtr();
  402.                         $entreprise=new Etr();
  403.                         $bpu = new Bpu();
  404.                         $articleLibelle='';
  405.                         $article=new Article();
  406.                         $quantiteIntervention=0;
  407.                         $marge=0;
  408.                         foreach ($cellIterator as $keyCell=>$cell) {
  409.                             if ($colonnesFichier[$keyCell]=='InterventionID') {
  410.                                 $interventionSav->setInterventionId($cell->getValue());
  411.                             } elseif ($colonnesFichier[$keyCell]=='NRO') {
  412.                                 $interventionSav->setNro($cell->getValue());
  413.                             } elseif ($colonnesFichier[$keyCell]=='dpt') {
  414.                                 $interventionSav->setDbt($cell->getValue());
  415.                             } elseif ($colonnesFichier[$keyCell]=='jeton') {
  416.                                 $interventionSav->setJeton($cell->getValue());
  417.                             } elseif ($colonnesFichier[$keyCell]=='etat') {
  418.                                 $interventionSav->setEtat($cell->getValue());
  419.                             } elseif ($colonnesFichier[$keyCell]=='RDV') {
  420.                                 $interventionSav->setRdv($cell->getValue());
  421.                             } elseif ($colonnesFichier[$keyCell]=='type') {
  422.                                 $interventionSav->setType1($cell->getValue());
  423.                             } elseif ($colonnesFichier[$keyCell]=='date') {
  424.                                 $dateIntervention \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($cell->getValue());
  425.                                 $interventionSav->setDate($dateIntervention);
  426.                             } elseif ($colonnesFichier[$keyCell]=='TechIdent') {
  427.                                 //$technicien=$this->planningEtrRepository->findOneBy(['techId'=>$cell->getValue()]);
  428.                                 $technicien=$this->planningEtrRepository->findOneBy(['techId'=>$cell->getValue(),'mois'=>$moisIntervention->getMois(),'annee'=>$moisIntervention->getAnnee()]);
  429.                                 $entreprise=null;
  430.                                 if ($technicien) {
  431.                                     $entreprise$technicien->getEtr();
  432.                                     if ($entreprise==null && in_array($technicien->getId(), $listeNouveauxTechniciensId)==false) {
  433.                                         array_push($listeNouveauxTechniciens$technicien);
  434.                                         array_push($listeNouveauxTechniciensId$technicien->getId());
  435.                                     }
  436.                                 } else {
  437.                                     $technicien = new PlanningEtr();
  438.                                     $technicien->setMois($moisIntervention->getMois());
  439.                                     $technicien->setAnnee($moisIntervention->getAnnee());
  440.                                     $technicien->setTechId($cell->getValue());
  441.                                     if (in_array($technicien->getId(), $listeNouveauxTechniciensId)==false) {
  442.                                         $this->planningEtrRepository->add($technicientrue);
  443.                                         array_push($listeNouveauxTechniciens$technicien);
  444.                                         array_push($listeNouveauxTechniciensId$technicien->getId());
  445.                                     }
  446.                                 }
  447.                                 $interventionSav->setPlanningEtr($technicien);
  448.                             } elseif ($colonnesFichier[$keyCell]=='BoiteIdent') {
  449.                                 $interventionSav->setBoiteIdent($cell->getValue());
  450.                             } elseif ($colonnesFichier[$keyCell]=='Entit? Factu') {
  451.                                 $interventionSav->setEntitFactu($cell->getValue());
  452.                             } elseif ($colonnesFichier[$keyCell]=='Article') {
  453.                                 $article=$this->articleRepository->findOneBy(['libelle'=>$cell->getValue()]);
  454.                                 $articleLibelle=$cell->getValue();
  455.                             } elseif ($colonnesFichier[$keyCell]=='Qté') {
  456.                                 $interventionSav->setQte($cell->getValue());
  457.                                 $quantiteIntervention = (is_numeric($cell->getValue())) ? $cell->getValue() : 0;
  458.                             }
  459.                             elseif ($colonnesFichier[$keyCell]=='P.U.') {
  460.                                 $interventionSav->setPu($cell->getValue());
  461.                                 $interventionSav->setArticle($article);
  462.                                 if ($article==null) {
  463.                                     $article=new Article();
  464.                                     $article->setLibelle($articleLibelle);
  465.                                     $article->setPuFree($cell->getValue());
  466.                                     $this->articleRepository->add($article,true);
  467.                                     foreach ($etrs as $key => $etr) {
  468.                                         $etrArticle=new BpuValueSav();
  469.                                         $etrArticle->setPuEtr($cell->getValue()-($etr->getReduction()*$cell->getValue()/100));
  470.                                         $etrArticle->setEtr($etr);
  471.                                         $etrArticle->setMarge($etr->getReduction());
  472.                                         $etrArticle->setArticle($article);
  473.                                         $this->bpuValueSavRepository->add($etrArticle,true);
  474.                                     }
  475.                                 }
  476.                                 if ($entreprise) {
  477.                                     $marge=$entreprise->getReduction();
  478.                                     $bpu->setArticle($article);
  479.                                     $bpu->setInterventionSav($interventionSav);
  480.                                     $bpu->setMoisIntervention($moisIntervention->getId());
  481.                                     $bpu->setEtr($entreprise);
  482.                                     $bpu->setArticleEtr($entreprise->getRaisonSociale()." ".$articleLibelle);
  483.                                     $bpuValueSav=$this->bpuValueSavRepository->findOneBy([
  484.                                         'etr'=>$entreprise,
  485.                                         'article'=>$article
  486.                                     ]);
  487.                                     if($bpuValueSav==null){
  488.                                         $bpuValueSav=new BpuValueSav();
  489.                                         $bpuValueSav->setPuEtr($cell->getValue()-($entreprise->getReduction()*$cell->getValue()/100));
  490.                                         $bpuValueSav->setEtr($entreprise);
  491.                                         $bpuValueSav->setMarge($entreprise->getReduction());
  492.                                         $bpuValueSav->setArticle($article);
  493.                                         $this->bpuValueSavRepository->add($bpuValueSav,true);
  494.                                     }
  495.                                     $bpu->setPu($bpuValueSav->getPuEtr());
  496.                                     $bpu->setMontant($bpuValueSav->getPuEtr()*$quantiteIntervention);
  497.                                     $this->bpuRepository->add($bpu);
  498.                                     if (in_array($entreprise->getId(), $listeEntreprise)==false) {
  499.                                         $etrMois=new EtrMois();
  500.                                         $etrMois->setMoisIntervention($moisIntervention);
  501.                                         $etrMois->setEtr($entreprise);
  502.                                         $etrMois->setMarge($marge);
  503.                                         $this->etrMoisRepository->add($etrMois,true);
  504.                                         array_push($listeEntreprise$entreprise->getId());
  505.                                     }
  506.                                 }
  507.                             } elseif ($colonnesFichier[$keyCell]=='TOTAL') {
  508.                                 $interventionSav->setTotal($cell->getValue());
  509.                             } elseif ($colonnesFichier[$keyCell]=='Zone') {
  510.                                 $interventionSav->setZone($cell->getValue());
  511.                             } elseif ($colonnesFichier[$keyCell]=='') {
  512.                                 $interventionSav->setType2($cell->getValue());
  513.                             }
  514.                         }
  515.                         $interventionSav->setMoisIntervention($moisIntervention);
  516.                         $this->interventionSavRepository->add($interventionSav);
  517.                         if ($key==$countFichier) {
  518.                             $this->interventionSavRepository->add($interventionSavtrue);
  519.                         }
  520.                     }
  521.                 }
  522.                 $moisIntervention->setNomFichier($newFilename);
  523.                 $this->moisInterventionRepository->add($moisInterventiontrue);
  524.             }
  525.             elseif($typeIntervention=='prod'){
  526.                 if(in_array('Jeton / RC',$colonnesFichier)==false || in_array('Code du département abonné',$colonnesFichier)==false || in_array('Nom du département abonné',$colonnesFichier)==false || in_array('Code de la commune abonné',$colonnesFichier)==false || 
  527.                 in_array('Nom de la commune abonné',$colonnesFichier)==false || in_array('Zone',$colonnesFichier)==false || in_array('Technologie',$colonnesFichier)==false || in_array('Nom du NRO',$colonnesFichier)==false || in_array('Opérateur d\'immeuble',$colonnesFichier)==false || in_array('Type de PBO',$colonnesFichier)==false || in_array('Type de PTO',$colonnesFichier)==false || 
  528.                 in_array('Identifiant de l\'intervention',$colonnesFichier)==false || in_array('Type d\'intervention',$colonnesFichier)==false || in_array('Date d\'intervention',$colonnesFichier)==false || in_array('Nom du prestataire',$colonnesFichier)==false || in_array('Login du technicien',$colonnesFichier)==false || in_array('Identité du technicien',$colonnesFichier)==false || 
  529.                 in_array('Code du débriefing',$colonnesFichier)==false || in_array('Libellé du débriefing',$colonnesFichier)==false || in_array('Référence de l\'article',$colonnesFichier)==false || in_array('Prix unitaire HT',$colonnesFichier)==false || in_array('Quantité',$colonnesFichier)==false || in_array('Montant HT',$colonnesFichier)==false || in_array('Commentaires',$colonnesFichier)==false){
  530.                     //Erreur
  531.                     $file =  $this->getParameter('kernel.project_dir') . '/public/fichier_importe/'.$moisIntervention->getNomFichier();
  532.                     if(is_file($file)) unlink($file);
  533.                     $firstBoocle=false;
  534.                     $this->bpuProdRepository->removeEnsemble($moisIntervention->getId());
  535.                     $this->interventionProductionRepository->removeEnsemble($moisIntervention->getId());
  536.                     $this->moisEtrRepository->removeEnsemble($moisIntervention->getId());
  537.                     $this->moisInterventionsProdRepository->remove($moisIntervention,true);
  538.                     return $this->render('importation/erreur.html.twig',[
  539.                         'message'=>'Il manque des colonnes, veuillez vérifier le fichier que vous avez importé.'
  540.                     ]);
  541.                 }
  542.                 $etrs=$this->etrProdRepository->findAll();
  543.                 $btelecom=$this->etrProdRepository->findOneBy(['raisonSociale'=>'BTELECOM']);
  544.                 $arrInfr=[];
  545.                 foreach ($btelecom->getBpuValeurs() as $key => $bpuValue) {
  546.                     $arrInfr[$bpuValue->getInfra()->getLibelle()]=$bpuValue->getPrix();
  547.                 }
  548.                 foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  549.                     if($key>=$startRow){
  550.                         $cellIterator $row->getCellIterator();
  551.                         $cellIterator->setIterateOnlyExistingCells(false);
  552.                         $interventionProd =new InterventionProduction();
  553.                         // Traiter les enregistrements et enregistre dans la base de donnees
  554.                         $interventionProd->setMoisInterventionsProd($moisIntervention);
  555.                         $interventionProd->setRemoved(false);
  556.                         $technicien=new PlanningEtrProd();
  557.                         $entreprise=new EtrProd();
  558.                         $bpu = new BpuProd();
  559.                         $quantiteIntervention=0;
  560.                         $marge=0;
  561.                         $pvType='';
  562.                         $loginTechnicien=null;
  563.                         $article=new ArticleProd();
  564.                         $newArticle=false;
  565.                         $libelleArt="";
  566.                         $infra=new Infra();
  567.                         $persiste=false;
  568.                         $idTechnicien='';
  569.                         foreach ($cellIterator as $keyCell=>$cell) {
  570.                             if ($colonnesFichier[$keyCell]=='Jeton / RC') {
  571.                                 $interventionProd->setJetonRc($cell->getValue());
  572.                             } elseif ($colonnesFichier[$keyCell]=='Code du département abonné') {
  573.                                 $interventionProd->setCodeDuDepartementAbonne($cell->getValue());
  574.                             } elseif ($colonnesFichier[$keyCell]=='Nom du département abonné') {
  575.                                 $interventionProd->setNomDuDepartementAbonne($cell->getValue());
  576.                             } elseif ($colonnesFichier[$keyCell]=='Code de la commune abonné') {
  577.                                 $interventionProd->setCodeDeLaCommuneAbonne($cell->getValue());
  578.                             } elseif ($colonnesFichier[$keyCell]=='Nom de la commune abonné') {
  579.                                 $interventionProd->setNomDeLaCommuneAbonne($cell->getValue());
  580.                             } elseif ($colonnesFichier[$keyCell]=='Zone') {
  581.                                 $pvType$cell->getValue()=='ZTD' ?'FREE INFRA-ZTD':'FREE SAS-ZMD-RIP';
  582.                                 $interventionProd->setZone($cell->getValue());
  583.                             } elseif ($colonnesFichier[$keyCell]=='Technologie') {
  584.                                 $interventionProd->setTechnologie($cell->getValue());
  585.                             } elseif ($colonnesFichier[$keyCell]=='Nom du NRO') {
  586.                                 $interventionProd->setNomDuNro($cell->getValue());
  587.                             } elseif ($colonnesFichier[$keyCell]=='Opérateur d\'immeuble') {
  588.                                 $interventionProd->setOperateurImmeuble($cell->getValue());
  589.                             } elseif ($colonnesFichier[$keyCell]=='Type de PBO') {
  590.                                 $interventionProd->setTypeDePbo($cell->getValue());
  591.                                 //infrastructure
  592.                                 if($cell->getValue()=='Poteau'){
  593.                                     $infra=$this->infraRepository->findOneBy(['libelle'=>'Hauteur']);
  594.                                 }else{
  595.                                     $infra=$this->infraRepository->findOneBy(['libelle'=>$cell->getValue()]);
  596.                                 }
  597.                                 if ($infra==null) {
  598.                                     if($cell->getValue()!=null){
  599.                                         $infra=new Infra();
  600.                                         $infra->setLibelle($cell->getValue());
  601.                                         $this->infraRepository->add($infra,true);
  602.                                     }//brahim 2
  603.                                 }
  604.                             } elseif ($colonnesFichier[$keyCell]=='Type de PTO') {
  605.                                 $interventionProd->setTypeDePto($cell->getValue());
  606.                             } elseif ($colonnesFichier[$keyCell]=='Identifiant de l\'intervention') {
  607.                                 $interventionProd->setInteventionId($cell->getValue());
  608.                             } elseif ($colonnesFichier[$keyCell]=='Type d\'intervention') {
  609.                                 $interventionProd->setTypeIntervention($cell->getValue());
  610.                             } elseif ($colonnesFichier[$keyCell]=='Date d\'intervention') {
  611.                                 $dateIntervention \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($cell->getValue());
  612.                                 $interventionProd->setDateIntervention($dateIntervention);
  613.                                 if((int)date_format($dateIntervention,'m')==$moisIntervention->getMois() && (int)date_format($dateIntervention,'Y')==$moisIntervention->getAnnee()){
  614.                                     $persiste=true;
  615.                                 }
  616.                             } elseif ($colonnesFichier[$keyCell]=='Nom du prestataire') {
  617.                                 $interventionProd->setNomDuPrestataire($cell->getValue());
  618.                             } elseif ($colonnesFichier[$keyCell]=='Login du technicien') {
  619.                                 $loginTechnicien=$cell->getValue();
  620.                             } elseif ($colonnesFichier[$keyCell]=='Identité du technicien') {
  621.                                 $idTechnicien=$cell->getValue();
  622.                             } elseif ($colonnesFichier[$keyCell]=='Code du débriefing') {
  623.                                 $interventionProd->setCodeDuDebriefing($cell->getValue());
  624.                             } elseif ($colonnesFichier[$keyCell]=='Libellé du débriefing') {
  625.                                 $interventionProd->setLibelleDuDebriefing($cell->getValue());
  626.                             } elseif ($colonnesFichier[$keyCell]=='Référence de l\'article') {
  627.                                 $interventionProd->setReferenceDeArticle($cell->getValue());
  628.                                 $libelleArt=$cell->getValue();
  629.                             } elseif ($colonnesFichier[$keyCell]=='Prix unitaire HT') {
  630.                                 if($cell->getValue() < 0){
  631.                                     $persiste=true;
  632.                                 }
  633.                                 /* PU */
  634.                                 if ($persiste) {
  635.                                     $technicien=$this->planningEtrProdRepository->findOneBy(['loginTechnicien'=>$loginTechnicien,'mois'=>$moisIntervention->getMois(),'annee'=>$moisIntervention->getAnnee()]);
  636.                                     $entreprise=null;
  637.                                     if ($technicien) {
  638.                                         $entreprise$technicien->getEtrProd();
  639.                                         if ($entreprise==null and in_array($technicien->getId(), $listeNouveauxTechniciensId)==false) {
  640.                                             array_push($listeNouveauxTechniciens$technicien);
  641.                                             array_push($listeNouveauxTechniciensId$technicien->getId());
  642.                                         }
  643.                                     } else {
  644.                                         $technicien = new PlanningEtrProd();
  645.                                         $technicien->setMois($moisIntervention->getMois());
  646.                                         $technicien->setAnnee($moisIntervention->getAnnee());
  647.                                         $technicien->setTechId($idTechnicien);
  648.                                         $technicien->setLoginTechnicien($loginTechnicien);
  649.                                         if (in_array($technicien->getId(), $listeNouveauxTechniciensId)==false) {
  650.                                             $this->planningEtrProdRepository->add($technicientrue);
  651.                                             array_push($listeNouveauxTechniciens$technicien);
  652.                                             array_push($listeNouveauxTechniciensId$technicien->getId());
  653.                                         }
  654.                                     }
  655.                                     $interventionProd->setPlanningEtrProd($technicien);
  656.                                     $interventionProd->setPu($cell->getValue());
  657.                                     if($cell->getValue()>0){
  658.                                         $article=$this->articleProdRepository->findOneBy(['libelle'=>$libelleArt,'infra'=>$infra]);
  659.                                     }else{
  660.                                         $article=$this->articleProdRepository->findOneBy(['libelle'=>$libelleArt]);
  661.                                     }
  662.                                     if ($article==null) {
  663.                                         $article=new ArticleProd();
  664.                                         $article->setLibelle($libelleArt);
  665.                                         $article->setPuFree($cell->getValue());
  666.                                         $article->setInfra($infra);
  667.                                         if ($cell->getValue() >= 0) {
  668.                                             $article->settype('article');
  669.                                         } else {
  670.                                             $article->settype('penalite');
  671.                                         }
  672.                                         $newArticle=true;
  673.                                         $this->articleProdRepository->add($articletrue);
  674.                                     }
  675.                                     $interventionProd->setArticleProd($article);
  676.                                     $bpu->setArticleProd($article);
  677.                                     $bpu->setPvType($pvType);
  678.                                     $bpu->setInterventionProduction($interventionProd);
  679.                                     $bpu->setMoisIntervention($moisIntervention);
  680.                                     if ($entreprise) {
  681.                                         $bpu->setEtrProd($entreprise);
  682.                                         $bpu->setArticleEtr($entreprise->getRaisonSociale()." ".$cell->getValue());
  683.                                     } else {
  684.                                         $bpu->setArticleEtr($cell->getValue());
  685.                                     }
  686.                                 }elseif($cell->getValue()!=null){
  687.                                     //dump($key,$cell->getValue(),$colonnesFichier,$colonnesFichier[$keyCell],$keyCell,$interventionProd);
  688.                                     //dd();
  689.                                     //Supprimer le mois
  690.                                     $file =  $this->getParameter('kernel.project_dir') . '/public/fichier_importe/'.$moisIntervention->getNomFichier();
  691.                                     if(is_file($file)) unlink($file);
  692.                                     $this->bpuProdRepository->removeEnsemble($moisIntervention->getId());
  693.                                     $this->interventionProductionRepository->removeEnsemble($moisIntervention->getId());
  694.                                     $this->moisEtrRepository->removeEnsemble($moisIntervention->getId());
  695.                                     //$this->moisInterventionsProdRepository->remove($moisIntervention,true);
  696.                                     $this->moisInterventionsProdRepository->remove1($moisIntervention);
  697.                                     $this->addFlash('erreur','Une ou plusieurs interventions n\'appartiennent pas au mois en question. En effet,
  698.                                      l\'importation a été interrompue. Veuillez vérifier votre fichier avant de le réimporter.');
  699.                                      return $this->redirectToRoute('app_repertoire');
  700.                                 }
  701.                             } elseif ($colonnesFichier[$keyCell]=='Quantité') {
  702.                                 $interventionProd->setQte($cell->getValue());
  703.                                 $quantiteIntervention=$cell->getValue();
  704.                                 $interventionProd->setMontant($interventionProd->getPu()*$quantiteIntervention);
  705.                                 if ($entreprise && $persiste) {
  706.                                     if($newArticle){
  707.                                         foreach ($etrs as $key => $etr) {
  708.                                             $bpuValue $this->bpuValeurRepository->findOneBy([
  709.                                                 'etrProd'=>$etr,
  710.                                                 'infra'=>$infra
  711.                                             ]);
  712.                                             $infraBtelecomarray_key_exists($infra->getLibelle(),$arrInfr)?$arrInfr[$infra->getLibelle()]:0;
  713.                                             $cof= ($infraBtelecom != && $bpuValue) ? 1-($bpuValue->getPrix()/$infraBtelecom) : 0;
  714.                                             if($article->gettype()=='penalite'){
  715.                                                 $prixFinal=$interventionProd->getPu();
  716.                                                 $cof=0;
  717.                                             }else{
  718.                                                 $prixFinal=$interventionProd->getPu()-$interventionProd->getPu()*$cof;
  719.                                             }
  720.                                             $etrArticle=new BpuValeurProdArticle();
  721.                                             $etrArticle->setEtrProd($etr);
  722.                                             $etrArticle->setPrix($prixFinal);
  723.                                             $etrArticle->setMarge($cof);
  724.                                             $etrArticle->setArticle($article);
  725.                                             $this->bpuValeurProdArticleRepository->add($etrArticletrue);
  726.                                         }
  727.                                     }
  728.                                     $bpuValeurProd=$this->bpuValeurProdArticleRepository->findOneBy([
  729.                                         'etrProd'=>$entreprise,
  730.                                         'article'=>$article
  731.                                     ]);
  732.                                     if($bpuValeurProd==null){
  733.                                         $bpuValeurProd = new BpuValeurProdArticle();
  734.                                         $bpuValeurProd->setMarge($entreprise->getReduction());
  735.                                         // Applique le coffecient
  736.                                         $bpuValue $this->bpuValeurRepository->findOneBy([
  737.                                             'etrProd'=>$entreprise,
  738.                                             'infra'=>$infra
  739.                                         ]);
  740.                                         $infraBtelecomarray_key_exists($infra->getLibelle(),$arrInfr)?$arrInfr[$infra->getLibelle()]:0;
  741.                                         $cof= ($infraBtelecom != and $bpuValue!=null ) ? 1-($bpuValue->getPrix()/$infraBtelecom) : 0;
  742.                                         if($cof==|| $interventionProd->getPu() < 0){
  743.                                             $prixFinal=$article->getPuFree();
  744.                                         }else{
  745.                                             $prixFinal=$article->getPuFree()-$article->getPuFree()*$cof;
  746.                                         }
  747.                                         $bpuValeurProd->setPrix($prixFinal);
  748.                                         $bpuValeurProd->setEtrProd($entreprise);
  749.                                         $bpuValeurProd->setArticle($article);
  750.                                         $this->bpuValeurProdArticleRepository->add($bpuValeurProd);
  751.                                     }
  752.                                     if($interventionProd->getPu() < 0){
  753.                                         $bpu->setPu($article->getPuFree());
  754.                                         $bpu->setMontant($article->getPuFree()*$quantiteIntervention);
  755.                                     }else{
  756.                                         if($bpuValeurProd->getPrix()==0){
  757.                                             $bpu->setPu($article->getPuFree());
  758.                                             $bpu->setMontant($article->getPuFree()*$quantiteIntervention);
  759.                                         }else{
  760.                                             $bpu->setPu($bpuValeurProd->getPrix());
  761.                                             $bpu->setMontant($bpuValeurProd->getPrix()*$quantiteIntervention);
  762.                                         }
  763.                                         
  764.                                     }
  765.                                     $bpu->setEcart($interventionProd->getMontant() - $bpu->getMontant());
  766.                                     $bpu->setInfra($infra);
  767.                                     $marge=(is_numeric($entreprise->getReduction())) ? $entreprise->getReduction() : 0;
  768.                                     if ($persiste) {
  769.                                         $this->bpuProdRepository->add($bpu);
  770.                                     }
  771.                                     if (in_array($entreprise->getId(), $listeEntreprise)==false) {
  772.                                         $etrMois=new MoisEtr();
  773.                                         $etrMois->setMoisInterventionsProd($moisIntervention);
  774.                                         $etrMois->setEtrProd($entreprise);
  775.                                         $etrMois->setMarge($marge);
  776.                                         $this->moisEtrRepository->add($etrMois,true);//dd($etrMois);
  777.                                         array_push($listeEntreprise$entreprise->getId());
  778.                                     }
  779.                                 }
  780.                             } elseif ($colonnesFichier[$keyCell]=='Montant HT') {
  781.                                     if ($cell->getValue()!=null) {
  782.                                         $interventionProd->setMontant($cell->getValue());
  783.                                     }else{
  784.                                         $interventionProd->setMontant($interventionProd->getPu()*$quantiteIntervention);
  785.                                     }
  786.                             } elseif ($colonnesFichier[$keyCell]=='Commentaires') {
  787.                                 $interventionProd->setCommentaire($cell->getValue());
  788.                             }
  789.                         }
  790.                         if($persiste){
  791.                             $this->interventionProductionRepository->add($interventionProd);
  792.                         }
  793.                         if ($key==$countFichier) {
  794.                             $this->interventionProductionRepository->flush2();
  795.                         }
  796.                     }
  797.                 }
  798.                 $moisIntervention->setNomFichier($newFilename);
  799.                 $this->moisInterventionsProdRepository->add($moisInterventiontrue);
  800.             }else{
  801.                 if($session->get('typeIntervention')=='sav'){
  802.                     $etr = new Etr();
  803.                     $form $this->createForm(EtrType::class, $etr);
  804.                     if (count($listeNouveauxTechniciens)>0) {
  805.                         return $this->render('importation/effectuer_technicien.html.twig', [
  806.                             'listeNouveauxTechniciens' => $listeNouveauxTechniciens,
  807.                             'entreprises'=>$this->etrRepository->findBy([],['raisonSociale'=>'ASC']),
  808.                             'idMois'=>$idMois,
  809.                             'form' => $form->createView()
  810.                         ]);
  811.                     }else{
  812.                         return $this->redirectToRoute('app_repertoire');
  813.                     }
  814.                 }
  815.                 if($session->get('typeIntervention')=='prod'){
  816.                     $etr = new EtrProd();
  817.                     $form $this->createForm(EtrProdType::class, $etr);
  818.                     if (count($listeNouveauxTechniciens)>0) {
  819.                         return $this->render('importation/effectuer_technicien_prod.html.twig', [
  820.                             'listeNouveauxTechniciens' => $listeNouveauxTechniciens,
  821.                             'entreprises'=>$this->etrProdRepository->findBy([],['raisonSociale'=>'ASC']),
  822.                             'idMois'=>$idMois,
  823.                             'form' => $form->createView()
  824.                         ]);
  825.                     }else{
  826.                         return $this->redirectToRoute('app_repertoire',['type'=>'prod']);
  827.                     }
  828.                 }
  829.             }
  830.             $spreadsheet->__destruct();
  831.             $feuilleInterventions null;
  832.             $spreadsheet null;
  833.             gc_collect_cycles();
  834.             //dump("<br>{$startRow}-row-afterClear:" . memory_get_usage()."<br>");
  835.         }
  836.         $session->set('listeNouveauxTechniciens',$listeNouveauxTechniciens);
  837.         $session->set('listeNouveauxTechniciensId',$listeNouveauxTechniciensId);
  838.         $session->set('listeEntreprise',$listeEntreprise);
  839.         //}catch(Exception $ex){
  840.             /* Supprimer le mois */
  841.           //   throw new Exception("Error Processing Request ".$ex->getMessage(), 1);
  842.         //}
  843.         return $this->redirectToRoute('app_redirect',[
  844.             'contenu'=>1,
  845.             'file_name'=>$newFilename,
  846.             'extension_file'=>$extension,
  847.             'debutCount'=>$debutCount+$avancement,
  848.             'idMois'=>$moisIntervention->getId()
  849.         ]);
  850.     }
  851.     #[Route('/importation_complete/{mois<\d+>}',name:'app_importation_complete',methods:["POST"])]
  852.     public function completeImportation(MoisIntervention $mois,Request $request): Response
  853.     {
  854.         $listTechniciens=[];
  855.         $listTechniciens=$request->get('techniciens');
  856.         $listEntreprises=$request->get('entreprises');
  857.         $listeEntreprise=[];
  858.         if($listTechniciens!=null)
  859.             foreach ($listTechniciens as $key => $value) {
  860.                 $entreprise=$this->etrRepository->find((int)$listEntreprises[$key]);
  861.                 $technicien=$this->planningEtrRepository->find((int)$value);
  862.                 $technicien->setEtr($entreprise);
  863.                 $this->planningEtrRepository->add($technicien);
  864.                 // Creer des bpu de les interventions qui n'ont pas un Entreprise
  865.                 $interventionsSav$technicien->getInterventionSav();
  866.                 foreach ($interventionsSav as $key => $intervention) {
  867.                     if ($entreprise) {
  868.                         $bpu = new Bpu();
  869.                         $bpu->setEtr($entreprise);
  870.                         $bpu->setArticle($intervention->getArticle());
  871.                         $bpu->setInterventionSav($intervention);
  872.                         $bpu->setMoisIntervention($mois->getId());
  873.                         $bpu->setArticleEtr($entreprise->getRaisonSociale()." ".$intervention->getArticle()->getLibelle());
  874.                         $bpuValueSav=$this->bpuValueSavRepository->findOneBy([
  875.                             'etr'=>$entreprise,
  876.                             'article'=>$intervention->getArticle()
  877.                         ]);
  878.                         if($bpuValueSav==null){
  879.                             $bpuValueSav=new BpuValueSav();
  880.                             $bpuValueSav->setPuEtr($intervention->getPu()-($entreprise->getReduction()*$intervention->getPu()/100));
  881.                             $bpuValueSav->setEtr($entreprise);
  882.                             $bpuValueSav->setMarge($entreprise->getReduction());
  883.                             $bpuValueSav->setArticle($intervention->getArticle());
  884.                             $this->bpuValueSavRepository->add($bpuValueSav,true);
  885.                         }
  886.                         $bpu->setPu($bpuValueSav->getPuEtr());
  887.                         $bpu->setMontant($bpuValueSav->getPuEtr()*$intervention->getQte());
  888.                         $this->bpuRepository->add($bpu);
  889.                         if(in_array($entreprise,$listeEntreprise)==false){
  890.                             $etrMois=$this->etrMoisRepository->findOneBy(['etr'=>$entreprise,'moisIntervention'=>$mois]);
  891.                             if($etrMois==null){
  892.                                 $marge=(is_numeric($entreprise->getReduction())) ? $entreprise->getReduction() : 0;
  893.                                 $etrMois=new EtrMois();
  894.                                 $etrMois->setMoisIntervention($mois);
  895.                                 $etrMois->setEtr($entreprise);
  896.                                 $etrMois->setMarge($marge);
  897.                                 $this->etrMoisRepository->add($etrMois,true);
  898.                             }
  899.                             array_push($listeEntreprise,$entreprise);
  900.                         }
  901.                     }
  902.                 }
  903.             }
  904.         $mois->setMessageStatut('Toutes les techniciens que vous avez importées est déjà effectuée à une entreprise.');
  905.         $this->interventionSavRepository->flush();
  906.         return $this->redirectToRoute('app_repertoire');
  907.     }
  908.     #[Route('/importation_complete/prod/{mois<\d+>}',name:'app_importation_complete_prod',methods:["POST"])]
  909.     public function completeImportationProd(MoisInterventionsProd $mois,Request $request): Response
  910.     {
  911.         $listTechniciens=[];
  912.         $listTechniciens=$request->get('techniciens');
  913.         $listEntreprises=$request->get('entreprises');
  914.         $listeEntreprise=[];
  915.         if($listTechniciens!=null){
  916.             $btelecom=$this->etrProdRepository->findOneBy(['raisonSociale'=>'BTELECOM']);
  917.             $arrInfr=[];
  918.             foreach ($btelecom->getBpuValeurs() as $key => $bpuValue) {
  919.                 $arrInfr[$bpuValue->getInfra()->getLibelle()]=$bpuValue->getPrix();
  920.             }
  921.             foreach ($listTechniciens as $key => $value) {
  922.                 $entreprise=$this->etrProdRepository->find((int)$listEntreprises[$key]);
  923.                 $technicien=$this->planningEtrProdRepository->find((int)$value);
  924.                 $technicien->setEtrProd($entreprise);
  925.                 $this->planningEtrProdRepository->add($technicien);
  926.                 /* Creer des bpu de les interventions qui n'ont pas un Entreprise */
  927.                 $interventionsSav$technicien->getInterventionProduction();
  928.                 foreach ($interventionsSav as $key => $intervention) {
  929.                     $bpu=$this->bpuProdRepository->findOneBy(['interventionProduction'=>$intervention->getId()]);
  930.                     if($bpu==null){
  931.                         $bpu = new BpuProd();
  932.                     }
  933.                     $bpu->setArticleProd($intervention->getArticleProd());
  934.                     $bpu->setInterventionProduction($intervention);
  935.                     $bpu->setInfra($intervention->getArticleProd()->getInfra());
  936.                     $bpu->setMoisIntervention($mois);
  937.                     $bpu->setArticleEtr($entreprise->getRaisonSociale()." ".$intervention->getArticleProd()->getLibelle());
  938.                     
  939.                     if ($entreprise) {
  940.                         $marge=(is_numeric($entreprise->getReduction())) ? $entreprise->getReduction() : 0;
  941.                         if(in_array($entreprise,$listeEntreprise)==false){
  942.                             $moisEtr=$this->moisEtrRepository->findOneBy(['etrProd'=>$entreprise,'moisInterventionsProd'=>$mois]);
  943.                             if($moisEtr==null){
  944.                                 $moisEtr=new MoisEtr();
  945.                                 $moisEtr->setMoisInterventionsProd($mois);
  946.                                 $moisEtr->setEtrProd($entreprise);
  947.                                 $moisEtr->setMarge($marge);
  948.                                 $this->moisEtrRepository->add($moisEtr);
  949.                             }
  950.                             array_push($listeEntreprise,$entreprise);
  951.                         }
  952.                         $bpuValeurProd=$this->bpuValeurProdArticleRepository->findOneBy([
  953.                             'etrProd'=>$entreprise,
  954.                             'article'=>$intervention->getArticleProd()
  955.                         ]);
  956.                         if($bpuValeurProd==null){
  957.                             $bpuValeurProd = new BpuValeurProdArticle();
  958.                             // Applique le coffecient
  959.                             $bpuValue $this->bpuValeurRepository->findOneBy([
  960.                                 'etrProd'=>$entreprise,
  961.                                 'infra'=>$intervention->getArticleProd()->getInfra()
  962.                             ]);
  963.                             $infraBtelecomarray_key_exists($intervention->getArticleProd()->getInfra()->getLibelle(),$arrInfr)?$arrInfr[$intervention->getArticleProd()->getInfra()->getLibelle()]:0;
  964.                             $cof= ($infraBtelecom != && $bpuValue ) ? 1-($bpuValue->getPrix()/$infraBtelecom) : 0;
  965.                             if($cof==0){
  966.                                 //Applique le marge de societe
  967.                                 $prixFinal=$intervention->getPu()-($entreprise->getReduction()*$intervention->getPu()/100);
  968.                             }else{
  969.                                 $prixFinal=$intervention->getPu()-$intervention->getPu()*$cof;
  970.                             }
  971.                             
  972.                             $bpuValeurProd->setPrix($prixFinal);
  973.                             $bpuValeurProd->setEtrProd($entreprise);
  974.                             $bpuValeurProd->setArticle($intervention->getArticleProd());
  975.                             $this->bpuValeurProdArticleRepository->add($bpuValeurProd);
  976.                         }
  977.                         $bpu->setPu($bpuValeurProd->getPrix());
  978.                         $bpu->setEtrProd($entreprise);
  979.                         $bpu->setMontant($bpuValeurProd->getPrix()*$intervention->getQte());
  980.                         $bpu->setEcart($intervention->getMontant() - $bpu->getMontant());
  981.                         $pvType$intervention->getZone() =='ZTD' ?'FREE INFRA-ZTD':'FREE SAS-ZMD-RIP';
  982.                         $bpu->setPvType($pvType);
  983.                         $this->bpuProdRepository->add($bpu);
  984.                     }
  985.                     
  986.                 }
  987.             }
  988.         }
  989.             
  990.         
  991.         $this->interventionSavRepository->flush();
  992.         return $this->redirectToRoute('app_repertoire',['type'=>'prod']);
  993.     }
  994.     #[Route('/add_entr_json'name'add_entr_json'methods: ['GET''POST'])]
  995.     public function newEnt(Request $request): Response
  996.     {
  997.         $etr = new Etr();
  998.         $data $request->getContent();
  999.         $data json_decode($datatrue);
  1000.         $etr->setRaisonSociale($data['raisonSociale']);
  1001.         $etr->setVoie($data['vois']);
  1002.         $etr->setAdresse($data['adresse']);
  1003.         $etr->setSiret($data['siret']);
  1004.         $etr->setPrenom($data['prenom']);
  1005.         $etr->setNom($data['nom']);
  1006.         $etr->setEmail($data['email']);
  1007.         $etr->setEntrepriseFact($data['entrepriseFact']);
  1008.         $etr->setTva((float)$data['tva']);
  1009.         $etr->setContact($data['contact']);
  1010.         $etr->setReduction((float)$data['reduction']);
  1011.         $this->etrRepository->add($etrtrue);
  1012.         $articles=$this->articleRepository->findAll();
  1013.         foreach ($articles as $key => $article) {
  1014.             $bpuValueSav=new BpuValueSav();
  1015.             $bpuValueSav->setPuEtr($article->getPuFree()-($etr->getReduction()*$article->getPuFree()/100));
  1016.             $bpuValueSav->setEtr($etr);
  1017.             $bpuValueSav->setMarge($etr->getReduction());
  1018.             $bpuValueSav->setArticle($article);
  1019.             $this->bpuValueSavRepository->add($bpuValueSav,true);
  1020.         }
  1021.         return new JsonResponse($etr->getId());
  1022.     }
  1023.     #[Route('/add_entr_json_prod'name'add_entr_json_prod'methods: ['GET''POST'])]
  1024.     public function newEntProd(Request $request): Response
  1025.     {
  1026.         $etr = new EtrProd();
  1027.         $data $request->getContent();
  1028.         $data json_decode($datatrue);
  1029.         $etr->setRaisonSociale($data['raisonSociale']);
  1030.         $etr->setVoie($data['vois']);
  1031.         $etr->setAdresse($data['adresse']);
  1032.         $etr->setSiret($data['siret']);
  1033.         $etr->setPrenom($data['prenom']);
  1034.         $etr->setNom($data['nom']);
  1035.         $etr->setEmail($data['email']);
  1036.         $etr->setEntrepriseFact($data['entrepriseFact']);
  1037.         $etr->setTva((float)$data['tva']);
  1038.         $etr->setContrat($data['contact']);
  1039.         $etr->setReduction((float)$data['reduction']);
  1040.         if($data['societe']){
  1041.             $etr->setSociete($this->societeRepository->find($data['societe']));
  1042.         }
  1043.         $this->etrProdRepository->add($etrtrue);
  1044.         $infras $this->infraRepository->findAll();
  1045.         foreach ($infras as $infra) {
  1046.             $bpuValeur = new BpuValeur();
  1047.             $bpuValeur->setEtrProd($etr);
  1048.             $bpuValeur->setInfra($infra);
  1049.             $bpuValeur->setPrix(0.0);
  1050.             $this->bpuValeurRepository->add($bpuValeurtrue);
  1051.         }
  1052.         return new JsonResponse($etr->getId());
  1053.     }
  1054.     #[Route('/bpu/mois/{mois}'name'app_bpu_list',methods:["GET","POST"])]
  1055.     public function Bpu(MoisIntervention $moisRequest $request): Response
  1056.     {
  1057.         return $this->render('importation/bpu.html.twig',
  1058.             ['moisIntervention'=>$mois]
  1059.         );
  1060.     }
  1061.     #[Route('/liste-entreprise/{sans_ssh?}'name'liste-entreprise',methods:["GET","POST"])]
  1062.     public function ListeEntreprise($sans_ssh)
  1063.     {
  1064.         return $this->render('importation/liste_entreprises.html.twig',[
  1065.             'entreprises'=>$this->etrRepository->findBy([],['raisonSociale'=>'ASC']),
  1066.             'sans_ssh'=>$sans_ssh
  1067.         ]);
  1068.     }
  1069.     #[Route('/liste-entreprise-prod/{sans_btelecom?}'name'liste-entreprise-prod',methods:["GET","POST"])]
  1070.     public function ListeEntrepriseProd($sans_btelecom)
  1071.     {
  1072.         return $this->render('importation/liste_entreprises.html.twig',[
  1073.             'entreprises'=>$this->etrProdRepository->findBy([],['raisonSociale'=>'ASC']),
  1074.             'sans_btelecom'=>$sans_btelecom
  1075.         ]);
  1076.     }
  1077.     #[Route('/supprimer/sav/{mois}/{entreprise?0}/{technicien?0}' ,name:'supprimer_sav',methods:['POST'])]
  1078.     public function SupprimerSav(Request $request,MoisIntervention $mois,$entreprise,$technicien)
  1079.     {
  1080.         /* Annuler la supprission de tout */
  1081.         if ($technicien!="0") {
  1082.             $delete=$this->interventionSavRepository->removeToFalseTechnicien($mois->getId(),(int)$technicien);
  1083.         }elseif ($entreprise !="0") {
  1084.             $etr$this->etrRepository->find((int)$entreprise);
  1085.             foreach ($etr->getPlanningEtrs() as  $tech) {
  1086.                 $this->interventionSavRepository->removeToFalseTechnicien($mois->getId(),$tech);
  1087.             }
  1088.             //$this->interventionSavRepository->removeToFalseEntreprise($mois->getId(),(int)$entreprise);
  1089.         }
  1090.         if ($request->get('idsSav')) {
  1091.             foreach ($request->get('idsSav') as $savId) {
  1092.                 $SavObj=$this->interventionSavRepository->find($savId);
  1093.                 $SavObj->setRemoved(true);
  1094.                 $this->interventionSavRepository->add($SavObj,true);
  1095.             }
  1096.             //$this->interventionSavRepository->add($SavObj,true);
  1097.         }
  1098.         return $this->redirect($request->headers->get('referer'));
  1099.     }
  1100.     #[Route('/supprimer/prod/{mois}/{entreprise?0}/{technicien?0}' ,name:'supprimer_prod',methods:['POST'])]
  1101.     public function SupprimerProd(Request $request,MoisInterventionsProd $mois,$entreprise,$technicien)
  1102.     {
  1103.         /* Annuler la supprission de tout */
  1104.         if ($technicien!="0") {
  1105.             $delete=$this->interventionProductionRepository->removeToFalseTechnicien($mois->getId(),(int)$technicien);
  1106.         }elseif ($entreprise !="0") {
  1107.             $etr$this->etrProdRepository->find((int)$entreprise);
  1108.             foreach ($etr->getPlanningEtrProd() as  $tech) {
  1109.                 $this->interventionSavRepository->removeToFalseTechnicien($mois->getId(),$tech);
  1110.             }
  1111.         }
  1112.         if ($request->get('idsProd')) {
  1113.             foreach ($request->get('idsProd') as $savId) {
  1114.                 $SavObj=$this->interventionProductionRepository->find($savId);
  1115.                 $SavObj->setRemoved(true);
  1116.                 $this->interventionProductionRepository->add($SavObj,true);
  1117.             }
  1118.         }
  1119.         return $this->redirect($request->headers->get('referer'));
  1120.     }
  1121.     //app_importation_penalites
  1122.     //app_effectation_penalites
  1123.     #[Route('/app_effectation_penalites',name:'app_effectation_penalites',methods:["POST"])]
  1124.     public function app_effectation_penalites(Request $request): Response
  1125.     {
  1126.         $listTechniciens=[];
  1127.         $listTechniciens=$request->get('techniciens');
  1128.         $listEntreprises=$request->get('entreprises');
  1129.         if($listTechniciens!=null){
  1130.             foreach ($listTechniciens as $key => $value) {
  1131.                 $entreprise=$this->etrProdRepository->find((int)$listEntreprises[$key]);
  1132.                 $technicien=$this->planningEtrProdRepository->find((int)$value);
  1133.                 //dd($technicien);
  1134.                 $technicien->setEtrProd($entreprise);
  1135.                 $this->planningEtrProdRepository->add($technicien,true);
  1136.                 foreach($technicien->getPenalites() as $penalite){
  1137.                     $penalite->setEtrProd($technicien->getEtrProd());
  1138.                     $this->penaliteRepository->add($penalite,true);
  1139.                 }
  1140.             }
  1141.         }
  1142.         return $this->redirectToRoute('app_repertoire',['type'=>'prod']);
  1143.     }
  1144.     #[Route('/importerPenalites'name'app_importation_penalites')]
  1145.     public function ImporterPenalites(Request $request): Response
  1146.     {
  1147.         /* Importer le fichier */
  1148.         $excelFichier=$request->files->get('excelFichier');
  1149.         $extension=$excelFichier->guessExtension();
  1150.         $filename pathinfo($excelFichier->getClientOriginalName(), PATHINFO_FILENAME );
  1151.         $newFilename $filename.'-'.uniqid().'.'.$extension;
  1152.         $moisParam=(int)$request->get('mois');
  1153.         $anneeParam=(int)$request->get('annee');
  1154.         try {
  1155.             $excelFichier->move(
  1156.                 $this->getParameter('path_files'),
  1157.                 $newFilename
  1158.             );
  1159.         } catch (FileException $e) {}
  1160.         /* Les entree de type xlsx */
  1161.         if('xlsx' == $extension) {
  1162.             $reader = new Xlsx();
  1163.         } else {
  1164.             /* Les entree de type csv */
  1165.             $reader = new Csv();
  1166.         }
  1167.         /* lire depuis le fichier */
  1168.         $spreadsheet $reader->load('fichier_importe/'.$newFilename);
  1169.         $feuilleInterventions $spreadsheet->getActiveSheet();
  1170.         $ColonnesOblegatoirSav=['STT','TECHNICIEN','RC','ANOMALIE CONSTATEE','DATE RDV','MOIS','PENALITE','NOM'];
  1171.         /* Remplir un tableau avec les colonne oblegatoire existe dans le fichier */
  1172.         $colonnesFichier=[];
  1173.         /* Remplir le les colonnes et les information de mois */
  1174.         foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  1175.             $cellIterator $row->getCellIterator();
  1176.             $cellIterator->setIterateOnlyExistingCells(FALSE);
  1177.             if ($key==1) {
  1178.                 foreach ($cellIterator as $keyCell=> $cell) {
  1179.                     //if (in_array($cell->getValue(), $ColonnesOblegatoirSav)) {
  1180.                         $colonnesFichier[$keyCell]=$cell->getValue();
  1181.                     //}
  1182.                 }
  1183.             }
  1184.         }
  1185.         //return new Response($colonnesFichier);
  1186.         //dd($colonnesFichier);
  1187.         $colonnesFichier['H']='';
  1188.         $colonnesFichier['I']='';
  1189.         $fichierPenalite=new FichierPenalites();
  1190.         $listeTechniciens=[];
  1191.         $mois=$this->moisInterventionsProdRepository->findOneBy(['mois'=>$moisParam,'annee'=>$anneeParam]);
  1192.         if ($mois) {
  1193.             //
  1194.             if($mois->getFichierPenalites()){
  1195.                 $fichierPenalite=$mois->getFichierPenalites();
  1196.                 //Supprimer toutes les penalites
  1197.                 $this->penaliteRepository->removeEnsemble($fichierPenalite);
  1198.             }else{
  1199.                 $fichierPenalite=new FichierPenalites();
  1200.                 $fichierPenalite->setMoisInterventionsProd($mois);
  1201.                 $fichierPenalite->setNomFichier($newFilename);
  1202.                 $this->fichierPenalitesRepository->add($fichierPenalite,true);
  1203.             }
  1204.         }else{
  1205.             $this->addFlash('erreur','Veuillez d\'abord importer le fichier des interventions du mois en question.');
  1206.             goto FINIR;
  1207.         }
  1208.         try{
  1209.             if(in_array('STT',$colonnesFichier)){
  1210.                 foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  1211.                     if ($key>1) {
  1212.                         $cellIterator $row->getCellIterator();
  1213.                         $cellIterator->setIterateOnlyExistingCells(false);
  1214.                         $penalite=new Penalite();
  1215.                         $etr=null;
  1216.                         foreach ($cellIterator as $keyCell=> $cell) {
  1217.                             if ($colonnesFichier[$keyCell]=='STT') {
  1218.                             }elseif ($colonnesFichier[$keyCell]=='TECHNICIEN') {
  1219.                                 $technicien=$this->planningEtrProdRepository->findOneBy(['loginTechnicien'=>$cell->getValue(),'mois'=>$moisParam,'annee'=>$anneeParam]);
  1220.                                 if ($technicien==null) {
  1221.                                     $technicien=new PlanningEtrProd();
  1222.                                     $technicien->setMois($moisParam);
  1223.                                     $technicien->setAnnee($anneeParam);
  1224.                                     $technicien->setLoginTechnicien($cell->getValue());
  1225.                                     $this->planningEtrProdRepository->add($technicien,true);
  1226.                                     array_push($listeTechniciens,$technicien);
  1227.                                 }else{
  1228.                                     $etr=$technicien->getEtrProd();
  1229.                                 }
  1230.                                 $penalite->setEtrProd($technicien->getEtrProd());
  1231.                                 $penalite->setPlanningEtrProd($technicien);
  1232.                             }
  1233.                             elseif($colonnesFichier[$keyCell]=='RC'){
  1234.                                 $penalite->setRc($cell->getValue());
  1235.                             }elseif($colonnesFichier[$keyCell]=='ANOMALIE CONSTATEE'){
  1236.                                 $penalite->setAnomalie($cell->getValue());
  1237.                             }elseif($colonnesFichier[$keyCell]=='NOM'){
  1238.                                 $penalite->setNomPenalite($cell->getValue());
  1239.                             }elseif($colonnesFichier[$keyCell]=='DATE RDV'){
  1240.                                 if(is_string($cell->getValue())){
  1241.                                     $dateIntervention = new \DateTime($cell->getValue());
  1242.                                 }else{
  1243.                                     $dateIntervention \PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($cell->getValue());
  1244.                                 }
  1245.                                 $penalite->setDateRdv($dateIntervention);
  1246.                                 $penalite->setMois(date_format($dateIntervention,'m'));
  1247.                                 $penalite->setAnnee(date_format($dateIntervention,'Y'));
  1248.                             }elseif($colonnesFichier[$keyCell]=='PENALITE'){
  1249.                                 $penalite->setPenalite($cell->getValue());
  1250.                             }
  1251.                         }
  1252.                         if($etr!=null){
  1253.                             $moisEtr=$this->moisEtrRepository->findOneBy(['etrProd'=>$etr,'moisInterventionsProd'=>$mois]);
  1254.                             if($moisEtr==null){
  1255.                                 $moisEtr=new MoisEtr();
  1256.                                 $moisEtr->setMoisInterventionsProd($mois);
  1257.                                 $moisEtr->setEtrProd($etr);
  1258.                                 $moisEtr->setMarge(0);
  1259.                                 $this->moisEtrRepository->add($moisEtr,true);
  1260.                             }
  1261.                         }
  1262.                         
  1263.                         $penalite->setFichierPenalites($fichierPenalite);
  1264.                         $this->penaliteRepository->add($penalite,true);
  1265.                     }
  1266.                 }
  1267.             }else{
  1268.                 $this->addFlash('erreur','Le fichier que vous avez importé n\'est pas bon. Veuillez importer le bon fichier.');
  1269.             }
  1270.         }catch(Exception $ex){
  1271.             $this->addFlash('erreur',$ex->getMessage());
  1272.         }
  1273.         if(count($listeTechniciens)>0){
  1274.             $entreprises $this->etrProdRepository->findAll();
  1275.             $etr=new EtrProd();
  1276.             $form $this->createForm(EtrProdType::class, $etr);
  1277.             return $this->render('importation/penalites_technicien.html.twig',[
  1278.                 'listeTechniciens'=>$listeTechniciens,
  1279.                 'entreprises'=>$entreprises,
  1280.                 'mois'=>$mois,
  1281.                 'form' => $form->createView()
  1282.             ]);
  1283.         }
  1284.         FINIR:
  1285.         return $this->redirect($request->headers->get('referer'));
  1286.     }
  1287.     /* 
  1288.     * Importer des entreprises
  1289.     */
  1290.     #[Route('/importerEntreprises'name'app_importation_entreprise',methods:["POST"])]
  1291.     public function ImporterEntreprises(Request $request): Response
  1292.     {
  1293.         /* Importer le fichier */
  1294.         $excelFichier=$request->files->get('excelFichier');
  1295.         $extension=$excelFichier->guessExtension();
  1296.         $filename pathinfo($excelFichier->getClientOriginalName(), PATHINFO_FILENAME );
  1297.         $newFilename $filename.'-'.uniqid().'.'.$extension;
  1298.         try {
  1299.             $excelFichier->move(
  1300.                 $this->getParameter('path_files'),
  1301.                 $newFilename
  1302.             );
  1303.         } catch (FileException $e) {}
  1304.         /* Les entree de type xlsx */
  1305.         if('xlsx' == $extension) {
  1306.             $reader = new Xlsx();
  1307.         } else {
  1308.             /* Les entree de type csv */
  1309.             $reader = new Csv();
  1310.         }
  1311.         /* lire depuis le fichier */
  1312.         $spreadsheet $reader->load('fichier_importe/'.$newFilename);
  1313.         $feuilleInterventions $spreadsheet->getActiveSheet(); //getSheetByName("BDD_ETR");//PLANNING ETR
  1314.         $ColonnesOblegatoirSav=['Raison sociale','Voie','adresse','SIRET','Prénom','Nom','Email','ETR FACT_','TVA','Contrat'];
  1315.         /* Remplir un tableau avec les colonne oblegatoire existe dans le fichier */
  1316.         $colonnesFichier=[];
  1317.         /* Remplir le les colonnes et les information de mois */
  1318.         foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  1319.             $cellIterator $row->getCellIterator();
  1320.             $cellIterator->setIterateOnlyExistingCells(FALSE);
  1321.             if ($key==1) {
  1322.                 foreach ($cellIterator as $keyCell=> $cell) {
  1323.                     if (in_array($cell->getValue(), $ColonnesOblegatoirSav)) {
  1324.                         $colonnesFichier[$keyCell]=$cell->getValue();
  1325.                     }
  1326.                 }
  1327.             }
  1328.         }
  1329.         $articles=$this->articleRepository->findAll();
  1330.         $colonnesFichier['K']='';
  1331.          //Definir le type de fichier
  1332.         try{
  1333.             if(in_array('Raison sociale',$colonnesFichier)){
  1334.                 foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  1335.                     if ($key>1) {
  1336.                         $cellIterator $row->getCellIterator();
  1337.                         $cellIterator->setIterateOnlyExistingCells(false);
  1338.                         $etr=new Etr();
  1339.                         $EtrNouveau=false;
  1340.                         foreach ($cellIterator as $keyCell=> $cell) {
  1341.                             if ($colonnesFichier[$keyCell]=='Raison sociale') {
  1342.                                 $etr=$this->etrRepository->findOneBy(['raisonSociale'=>$cell->getValue()]);
  1343.                                 if ($etr==null) {
  1344.                                     $etr=new Etr();
  1345.                                     $etr->setRaisonSociale($cell->getValue());
  1346.                                     $etr->setReduction(0);
  1347.                                     //$EtrNouveau=true;
  1348.                                 }
  1349.                             }elseif($colonnesFichier[$keyCell]=='Voie'){
  1350.                                 $etr->setVoie($cell->getValue());
  1351.                             }elseif($colonnesFichier[$keyCell]=='adresse'){
  1352.                                 $etr->setAdresse($cell->getValue());
  1353.                             }elseif($colonnesFichier[$keyCell]=='SIRET'){
  1354.                                 $etr->setSiret($cell->getValue());
  1355.                             }elseif($colonnesFichier[$keyCell]=='Prénom'){
  1356.                                 $etr->setNom($cell->getValue());
  1357.                             }elseif($colonnesFichier[$keyCell]=='Nom'){
  1358.                                 $etr->setPrenom($cell->getValue());
  1359.                             }elseif($colonnesFichier[$keyCell]=='Email'){
  1360.                                 $etr->setEmail($cell->getValue());
  1361.                             }elseif($colonnesFichier[$keyCell]=='ETR FACT_'){
  1362.                                 $etr->setEntrepriseFact($cell->getValue());
  1363.                             }elseif($colonnesFichier[$keyCell]=='TVA'){
  1364.                                 if (is_float($cell->getValue())) {
  1365.                                     $etr->setTva($cell->getValue());
  1366.                                 }else{
  1367.                                     $etr->setTva(0);
  1368.                                 }
  1369.                                 
  1370.                             }elseif($colonnesFichier[$keyCell]=='Contrat'){
  1371.                                 $etr->setContact($cell->getValue());
  1372.                             }
  1373.                         }
  1374.                         // $this->etrRepository->add($etr,true);
  1375.                         
  1376.                         foreach ($articles as $key => $article) {
  1377.                             $bpuValueSav=new BpuValueSav();
  1378.                             $bpuValueSav->setPuEtr($article->getPuFree()-($etr->getReduction()*$article->getPuFree()/100));
  1379.                             $bpuValueSav->setEtr($etr);
  1380.                             $bpuValueSav->setMarge($etr->getReduction());
  1381.                             $bpuValueSav->setArticle($article);
  1382.                             $this->bpuValueSavRepository->add($bpuValueSav,true);
  1383.                         }
  1384.                     }
  1385.                 }
  1386.             }else{
  1387.                 $this->addFlash('erreur','Le fichier que vous avez importé n\'est pas bon. Veuillez importer le bon fichier.');
  1388.             }
  1389.         }catch(Exception $ex){
  1390.             $this->addFlash('erreur','Le fichier que vous avez importé n\'est pas bon. Veuillez importer le bon fichier.');
  1391.         }
  1392.         return $this->redirectToRoute('app_etr_index');
  1393.     }
  1394.     #[Route('/importerEntreprisesProd'name'app_importation_entreprise_prod',methods:["POST"])]
  1395.     public function ImporterEntreprisesProd(Request $request): Response
  1396.     {
  1397.         /* Importer le fichier */
  1398.         $excelFichier=$request->files->get('excelFichier');
  1399.         $extension=$excelFichier->guessExtension();
  1400.         $filename pathinfo($excelFichier->getClientOriginalName(), PATHINFO_FILENAME );
  1401.         $newFilename $filename.'-'.uniqid().'.'.$extension;
  1402.         try {
  1403.             $excelFichier->move(
  1404.                 $this->getParameter('path_files'),
  1405.                 $newFilename
  1406.             );
  1407.         } catch (FileException $e) {}
  1408.         /* Les entree de type xlsx */
  1409.         if('xlsx' == $extension) {
  1410.             $reader = new Xlsx();
  1411.         } else {
  1412.             /* Les entree de type csv */
  1413.             $reader = new Csv();
  1414.         }
  1415.         /* lire depuis le fichier */
  1416.         $spreadsheet $reader->load('fichier_importe/'.$newFilename);
  1417.         $feuilleInterventions $spreadsheet->getActiveSheet(); //getSheetByName("BDD_ETR");//PLANNING ETR
  1418.         $ColonnesOblegatoirSav=['Raison sociale','Voie','adresse','SIRET','Prénom','Nom','Email','ETR FACT_','TVA','Contrat'];
  1419.         /* Remplir un tableau avec les colonne oblegatoire existe dans le fichier */
  1420.         $colonnesFichier=[];
  1421.         /* Remplir le les colonnes et les information de mois */
  1422.         foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  1423.             $cellIterator $row->getCellIterator();
  1424.             $cellIterator->setIterateOnlyExistingCells(FALSE);
  1425.             if ($key==1) {
  1426.                 foreach ($cellIterator as $keyCell=> $cell) {
  1427.                     if (in_array($cell->getValue(), $ColonnesOblegatoirSav)) {
  1428.                         $colonnesFichier[$keyCell]=$cell->getValue();
  1429.                     }
  1430.                 }
  1431.             }
  1432.         }
  1433.         $colonnesFichier['K']='';
  1434.         //dd($colonnesFichier);
  1435.         //Definir le type de fichier
  1436.         try{
  1437.         if(in_array('Raison sociale',$colonnesFichier)){
  1438.             foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  1439.                 if ($key>1) {
  1440.                     $cellIterator $row->getCellIterator();
  1441.                     $cellIterator->setIterateOnlyExistingCells(false);
  1442.                     $etr=new EtrProd();
  1443.                     $EtrNouveau=false;
  1444.                     foreach ($cellIterator as $keyCell=> $cell) {
  1445.                         if ($colonnesFichier[$keyCell]=='Raison sociale') {
  1446.                             $etr=$this->etrProdRepository->findOneBy(['raisonSociale'=>$cell->getValue()]);
  1447.                             if ($etr==null) {
  1448.                                 $etr=new EtrProd();
  1449.                                 $etr->setRaisonSociale($cell->getValue());
  1450.                                 $etr->setReduction(0);
  1451.                                 //$EtrNouveau=true;
  1452.                             }
  1453.                         }elseif($colonnesFichier[$keyCell]=='Voie'){
  1454.                             $etr->setVoie($cell->getValue());
  1455.                         }elseif($colonnesFichier[$keyCell]=='adresse'){
  1456.                             $etr->setAdresse($cell->getValue());
  1457.                         }elseif($colonnesFichier[$keyCell]=='SIRET'){
  1458.                             $etr->setSiret($cell->getValue());
  1459.                         }elseif($colonnesFichier[$keyCell]=='Prénom'){
  1460.                             $etr->setNom($cell->getValue());
  1461.                         }elseif($colonnesFichier[$keyCell]=='Nom'){
  1462.                             $etr->setPrenom($cell->getValue());
  1463.                         }elseif($colonnesFichier[$keyCell]=='Email'){
  1464.                             $etr->setEmail($cell->getValue());
  1465.                         }elseif($colonnesFichier[$keyCell]=='ETR FACT_'){
  1466.                             $etr->setEntrepriseFact($cell->getValue());
  1467.                         }elseif($colonnesFichier[$keyCell]=='TVA'){
  1468.                             if(is_float($cell->getValue())){
  1469.                                 $etr->setTva($cell->getValue());
  1470.                             }else{
  1471.                                 $etr->setTva(0);
  1472.                             }
  1473.                         }elseif($colonnesFichier[$keyCell]=='Contrat'){
  1474.                             $etr->setContrat($cell->getValue());
  1475.                         }
  1476.                     }
  1477.                     $btelecom=$this->societeRepository->findOneBy(['raisonSociale'=>'BTELECOM']);
  1478.                     if ($btelecom) {
  1479.                         $etr->setSociete($btelecom);
  1480.                     }
  1481.                     $this->etrProdRepository->add($etr,true);
  1482.                     $infras $this->infraRepository->findAll();
  1483.                     foreach ($infras as $infra) {
  1484.                         $bpuValeur = new BpuValeur();
  1485.                         $bpuValeur->setEtrProd($etr);
  1486.                         $bpuValeur->setInfra($infra);
  1487.                         $bpuValeur->setPrix(0.0);
  1488.                         $this->bpuValeurRepository->add($bpuValeurtrue);
  1489.                     }
  1490.                     
  1491.                 }
  1492.             }
  1493.         }else{
  1494.             $this->addFlash('erreur','Le fichier que vous avez importé n\'est pas bon. Veuillez importer le bon fichier.');
  1495.         }
  1496.         }catch(Exception $ex){
  1497.             $this->addFlash('erreur','Le fichier que vous avez importé n\'est pas bon. Veuillez importer le bon fichier.');
  1498.         }
  1499.         return $this->redirectToRoute('app_etr_prod_index');
  1500.     }
  1501.     /* 
  1502.     * Importer des techniciens
  1503.     */
  1504.     #[Route('/importerTechniciens'name'app_importation_techniciens',methods:["POST"])]
  1505.     public function ImporterTechniciens(Request $request): Response
  1506.     {
  1507.         /* Importer le fichier */
  1508.         $excelFichier=$request->files->get('excelFichier');
  1509.         $extension=$excelFichier->guessExtension();
  1510.         $filename pathinfo($excelFichier->getClientOriginalName(), PATHINFO_FILENAME );
  1511.         $newFilename $filename.'-'.uniqid().'.'.$extension;
  1512.         try {
  1513.             $excelFichier->move(
  1514.                 $this->getParameter('path_files'),
  1515.                 $newFilename
  1516.             );
  1517.         } catch (FileException $e) {}
  1518.         /* Les entree de type xlsx */
  1519.         if('xlsx' == $extension) {
  1520.             $reader = new Xlsx();
  1521.         } else {
  1522.             /* Les entree de type csv */
  1523.             $reader = new Csv();
  1524.         }
  1525.         /* lire depuis le fichier */
  1526.         $spreadsheet $reader->load('fichier_importe/'.$newFilename);
  1527.         $feuilleInterventions $spreadsheet->getActiveSheet(); //getSheetByName("BDD_ETR");//PLANNING ETR
  1528.         $ColonnesOblegatoirSav=['TechIdent','Entreprise','Planning','SOUS-TRAITANT','Login du technicien'];
  1529.         /* Remplir un tableau avec les colonne oblegatoire existe dans le fichier */
  1530.         //TechIdent    Login du technicien    Entreprise
  1531.         $colonnesFichier=[];
  1532.         /* Remplir le les colonnes et les information de mois */
  1533.         foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  1534.             $cellIterator $row->getCellIterator();
  1535.             $cellIterator->setIterateOnlyExistingCells(FALSE);
  1536.             if ($key==1) {
  1537.                 foreach ($cellIterator as $keyCell=> $cell) {
  1538.                     if (in_array($cell->getValue(), $ColonnesOblegatoirSav)) {
  1539.                         $colonnesFichier[$keyCell]=$cell->getValue();
  1540.                     }
  1541.                 }
  1542.                 break;
  1543.             }
  1544.         }
  1545.         //
  1546.         /* $nbTestMois=0;
  1547.         $lastMois=date('m')+1;
  1548.         $lastAnnees=date('Y');
  1549.         searchMois :
  1550.         $nbTestMois++;
  1551.         $lastMois=$lastMois-1;
  1552.         
  1553.         if($lastMois==0){
  1554.             $lastMois=12;
  1555.             $lastAnnees--;
  1556.         }
  1557.         
  1558.         $nbTechniciens=$planningEtrProdRepository->count(['mois'=>$lastMois,'annee'=>$lastAnnees]);
  1559.         if($nbTechniciens>0){
  1560.             $techniciens = $planningEtrProdRepository->findBy(['mois'=>$lastMois,'annee'=>$lastAnnees]);
  1561.         }else{
  1562.             if($nbTestMois<12){
  1563.                 goto searchMois;
  1564.             }else{
  1565.                 $techniciens = $planningEtrProdRepository->findBy(['mois'=>0,'annee'=>0]);
  1566.             }
  1567.         } */
  1568.         //
  1569.         try{
  1570.             //Definir le type de fichier
  1571.         if (in_array('TechIdent'$colonnesFichier)||in_array('Planning'$colonnesFichier)||in_array('Entreprise'$colonnesFichier)||in_array('SOUS-TRAITANT'$colonnesFichier)) {
  1572.             foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  1573.                 if ($key>1) {
  1574.                     $cellIterator $row->getCellIterator();
  1575.                     $cellIterator->setIterateOnlyExistingCells(false);
  1576.                     $technicien=new PlanningEtr();
  1577.                     $loginTechnicien='';
  1578.                     foreach ($cellIterator as $keyCell=> $cell) {
  1579.                         if ($colonnesFichier[$keyCell]=='Login du technicien') {
  1580.                             $loginTechnicien=$cell->getValue();
  1581.                         }
  1582.                         if ($colonnesFichier[$keyCell]=='TechIdent' || $colonnesFichier[$keyCell]=='Planning') {
  1583.                             $technicien=$this->planningEtrRepository->findOneBy(['techId'=>$cell->getValue()]);
  1584.                             if ($technicien==null) {
  1585.                                 $technicien=new PlanningEtr();
  1586.                                 $technicien->setMois(date('m'));
  1587.                                 $technicien->setAnnee(date('Y'));
  1588.                                 $technicien->setTechId($cell->getValue());
  1589.                                 $technicien->setLoginTechnicien($loginTechnicien);
  1590.                             }
  1591.                         } elseif ($colonnesFichier[$keyCell]=='Entreprise' || $colonnesFichier[$keyCell]=='SOUS-TRAITANT') {
  1592.                             $etr=$this->etrRepository->findOneBy(['raisonSociale'=>$cell->getValue()]);
  1593.                             if ($etr) {
  1594.                                 $technicien->setEtr($etr);
  1595.                             } else {
  1596.                                 /* $etr=new Etr();
  1597.                                 $etr->setRaisonSociale($cell->getValue());
  1598.                                 $etr->setReduction(0);
  1599.                                 $technicien->setEtr($etr);
  1600.                                 $this->etrRepository->add($etr); */
  1601.                             }
  1602.                         }
  1603.                     }
  1604.                     $this->planningEtrRepository->add($technicientrue);
  1605.                 }
  1606.             }
  1607.         }else{
  1608.             $this->addFlash('erreur','Le fichier que vous avez importé n\'est pas bon. Veuillez importer le bon fichier.');
  1609.         }
  1610.         }catch(Exception $ex){
  1611.             $this->addFlash('erreur','Le fichier que vous avez importé n\'est pas bon. Veuillez importer le bon fichier.');
  1612.         }
  1613.         return $this->redirectToRoute('app_planning_etr_index');
  1614.     }
  1615.     /* 
  1616.     * Importer des techniciens
  1617.     */
  1618.     #[Route('/importerTechniciensProd/{mois1}/{annee1}'name'app_importation_techniciens_prod',methods:["POST"])]
  1619.     public function ImporterTechniciensProd(Request $request,$mois1,$annee1): Response
  1620.     {
  1621.         
  1622.         /* Importer le fichier */
  1623.         $excelFichier=$request->files->get('excelFichier');
  1624.         $extension=$excelFichier->guessExtension();
  1625.         $filename pathinfo($excelFichier->getClientOriginalName(), PATHINFO_FILENAME );
  1626.         $newFilename $filename.'-'.uniqid().'.'.$extension;
  1627.         try {
  1628.             $excelFichier->move(
  1629.                 $this->getParameter('path_files'),
  1630.                 $newFilename
  1631.             );
  1632.         } catch (FileException $e) {}
  1633.         /* Les entree de type xlsx */
  1634.         if('xlsx' == $extension) {
  1635.             $reader = new Xlsx();
  1636.         } else {
  1637.             /* Les entree de type csv */
  1638.             $reader = new Csv();
  1639.         }
  1640.         /* lire depuis le fichier */
  1641.         $spreadsheet $reader->load('fichier_importe/'.$newFilename);
  1642.         $feuilleInterventions $spreadsheet->getActiveSheet(); //getSheetByName("BDD_ETR");//PLANNING ETR
  1643.         $ColonnesOblegatoirSav=['TechIdent','Entreprise','Planning','SOUS-TRAITANT','Login du technicien'];
  1644.         /* Remplir un tableau avec les colonne oblegatoire existe dans le fichier */
  1645.         $colonnesFichier=[];
  1646.         /* Remplir le les colonnes et les information de mois */
  1647.         foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  1648.             $cellIterator $row->getCellIterator();
  1649.             $cellIterator->setIterateOnlyExistingCells(FALSE);
  1650.             if ($key==1) {
  1651.                 foreach ($cellIterator as $keyCell=> $cell) {
  1652.                     if (in_array($cell->getValue(), $ColonnesOblegatoirSav)) {
  1653.                         $colonnesFichier[$keyCell]=$cell->getValue();
  1654.                     }
  1655.                 }
  1656.                 break;
  1657.             }
  1658.         }
  1659.         //$colonnesFichier['C']='';
  1660.         $colonnesFichier['D']='';
  1661.         /* dump($colonnesFichier);
  1662.         dd(''); */
  1663.         //
  1664.        /*  $nbTestMois=0;
  1665.         $lastMois=date('m')+1;
  1666.         $lastAnnees=date('Y');
  1667.         searchMois :
  1668.         $nbTestMois++;
  1669.         $lastMois=$lastMois-1;
  1670.         
  1671.         if($lastMois==0){
  1672.             $lastMois=12;
  1673.             $lastAnnees--;
  1674.         }
  1675.         
  1676.         $nbTechniciens=$planningEtrProdRepository->count(['mois'=>$lastMois,'annee'=>$lastAnnees]);
  1677.         if($nbTechniciens>0){
  1678.             $techniciens = $planningEtrProdRepository->findBy(['mois'=>$lastMois,'annee'=>$lastAnnees]);
  1679.         }else{
  1680.             if($nbTestMois<12){
  1681.                 goto searchMois;
  1682.             }else{
  1683.                 $techniciens = $planningEtrProdRepository->findBy(['mois'=>0,'annee'=>0]);
  1684.             }
  1685.         } */
  1686.         //
  1687.         //dd( $colonnesFichier);
  1688.         //try{
  1689.         //if(in_array('TechIdent',$colonnesFichier)||in_array('Planning',$colonnesFichier)||in_array('Entreprise',$colonnesFichier)||in_array('SOUS-TRAITANT',$colonnesFichier)){
  1690.             //Definir le type de fichier
  1691.             foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  1692.                 if ($key>1) {
  1693.                     $cellIterator $row->getCellIterator();
  1694.                     $cellIterator->setIterateOnlyExistingCells(false);
  1695.                     $technicien=new PlanningEtrProd();
  1696.                     $nomTechnicien='';
  1697.                     foreach ($cellIterator as $keyCell=> $cell) {
  1698.                         if ($colonnesFichier[$keyCell]=='TechIdent' || $colonnesFichier[$keyCell]=='Nom du technicien') {
  1699.                             $nomTechnicien=$cell->getValue();
  1700.                         }
  1701.                         if ( $colonnesFichier[$keyCell]=='Planning' || $colonnesFichier[$keyCell]=='Login du technicien') {
  1702.                             $technicien=$this->planningEtrProdRepository->findOneBy(['loginTechnicien'=>$cell->getValue(),'mois'=>$mois1,'annee'=>$annee1]);
  1703.                             if ($technicien==null) {
  1704.                                 $technicien=new PlanningEtrProd();
  1705.                                 $technicien->setMois($mois1);
  1706.                                 $technicien->setAnnee($annee1);
  1707.                                 //$technicien->setMois(1);
  1708.                                 //$technicien->setAnnee(date('Y'));
  1709.                                 $technicien->setTechId($nomTechnicien);
  1710.                                 $technicien->setLoginTechnicien($cell->getValue());
  1711.                             }
  1712.                         }elseif($colonnesFichier[$keyCell]=='Entreprise' || $colonnesFichier[$keyCell]=='SOUS-TRAITANT') {
  1713.                             $etr=$this->etrProdRepository->findOneBy(['raisonSociale'=>$cell->getValue()]);
  1714.                             //dump($etr);
  1715.                             if($etr){
  1716.                                 $technicien->setEtrProd($etr);
  1717.                             }
  1718.                             else{
  1719.                                 $etr=new EtrProd();
  1720.                                 $etr->setRaisonSociale($cell->getValue());
  1721.                                 $etr->setReduction(0);
  1722.                                 $technicien->setEtrProd($etr);
  1723.                                 $btelecom=$this->societeRepository->findOneBy(['raisonSociale'=>'BTELECOM']);
  1724.                                 if ($btelecom) {
  1725.                                     $etr->setSociete($btelecom);
  1726.                                 }
  1727.                                 $this->etrProdRepository->add($etr);
  1728.                                 $infras $this->infraRepository->findAll();
  1729.                                 foreach ($infras as $infra) {
  1730.                                     $bpuValeur = new BpuValeur();
  1731.                                     $bpuValeur->setEtrProd($etr);
  1732.                                     $bpuValeur->setInfra($infra);
  1733.                                     $bpuValeur->setPrix(0.0);
  1734.                                     $this->bpuValeurRepository->add($bpuValeurtrue);
  1735.                                 }
  1736.                             }
  1737.                         }
  1738.                     }
  1739.                     //dd();
  1740.                     //dump($technicien);
  1741.                     $this->planningEtrProdRepository->add($technicien,true);
  1742.                 }
  1743.             }
  1744.         //}else{
  1745.          //   $this->addFlash('erreur','Le fichier que vous avez importé n\'est pas bon. Veuillez importer le bon fichier.');
  1746.         //}
  1747.         //}catch(Exception $ex){
  1748.         //    $this->addFlash('erreur','Le fichier que vous avez importé n\'est pas bon. Veuillez importer le bon fichier.');
  1749.         //}
  1750.         //dd();
  1751.         //return $this->redirectToRoute('app_planning_etr_prod_index');
  1752.         return $this->redirectToRoute('app_planning_etr_prod_index',['mois'=>$mois1,'annee'=>$annee1]);
  1753.     }
  1754.     /* 
  1755.     * Importer des techniciens
  1756.     */
  1757.     #[Route('/ImporterBPU_twig'name'app_ImporterBPU_twig',methods:["GET"])]
  1758.     public function ImporterBP(Request $request): Response
  1759.     {
  1760.         return $this->render('importation/bpu.html.twig');
  1761.     }
  1762.     #[Route('/ImporterBPU'name'app_ImporterBPU',methods:["POST"])]
  1763.     public function ImporterBPU(Request $request): Response
  1764.     {
  1765.         /* Importer le fichier */
  1766.         $excelFichier=$request->files->get('excelFichier');
  1767.         $extension=$excelFichier->guessExtension();
  1768.         $filename pathinfo($excelFichier->getClientOriginalName(), PATHINFO_FILENAME );
  1769.         $newFilename $filename.'-'.uniqid().'.'.$extension;
  1770.         try {
  1771.             $excelFichier->move(
  1772.                 $this->getParameter('path_files'),
  1773.                 $newFilename
  1774.             );
  1775.         } catch (FileException $e) {}
  1776.         /* Les entree de type xlsx */
  1777.         if('xlsx' == $extension) {
  1778.             $reader = new Xlsx();
  1779.         } else {
  1780.             /* Les entree de type csv */
  1781.             $reader = new Csv();
  1782.         }
  1783.         /* lire depuis le fichier */
  1784.         $spreadsheet $reader->load('fichier_importe/'.$newFilename);
  1785.         $feuilleInterventions $spreadsheet->getActiveSheet(); //getSheetByName("BDD_ETR");//PLANNING ETR
  1786.         /* Remplir un tableau avec les colonne oblegatoire existe dans le fichier */
  1787.         $colonnesFichier=[];
  1788.         /* Remplir le les colonnes et les information de mois */
  1789.         foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  1790.             $cellIterator $row->getCellIterator();
  1791.             $cellIterator->setIterateOnlyExistingCells(FALSE);
  1792.             if ($key==1) {
  1793.                 foreach ($cellIterator as $keyCell=> $cell) {
  1794.                     $colonnesFichier[$keyCell]=$cell->getValue();
  1795.                 }
  1796.                 break;
  1797.             }
  1798.         }
  1799.         //try{
  1800.         //Definir le type de fichier
  1801.         foreach ($feuilleInterventions->getRowIterator() as $key=> $row) {
  1802.             if ($key>1) {
  1803.                 $cellIterator $row->getCellIterator();
  1804.                 $cellIterator->setIterateOnlyExistingCells(false);
  1805.                 $etr=new EtrProd();
  1806.                 $infra=new Infra();
  1807.                 $article=new Infra();
  1808.                 $PuBTL=0;
  1809.                 $PuEtr=0;
  1810.                 $PuArt=0;
  1811.                 $designation='';
  1812.                 $libelleArt='';
  1813.                 $etrs=$this->etrProdRepository->findAll();
  1814.                 $infras $this->infraRepository->findAll();
  1815.                 $articles $this->articleProdRepository->findAll();
  1816.                 foreach ($cellIterator as $keyCell=> $cell) {
  1817.                     if ($colonnesFichier[$keyCell]=='Etr') {
  1818.                         $etr=$this->etrProdRepository->findOneBy(['raisonSociale'=>$cell->getValue()]);
  1819.                         if($etr==null){
  1820.                             $etr=new EtrProd();
  1821.                             $etr->setRaisonSociale($cell->getValue());
  1822.                             $etr->setReduction(0);
  1823.                             $this->etrProdRepository->add($etr,true);
  1824.                             foreach ($infras as $infra) {
  1825.                                 $bpuValeur = new BpuValeur();
  1826.                                 $bpuValeur->setEtrProd($etr);
  1827.                                 $bpuValeur->setInfra($infra);
  1828.                                 $bpuValeur->setPrix(0.0);
  1829.                                 $this->bpuValeurRepository->add($bpuValeur);
  1830.                             }
  1831.                             foreach ($articles as $article1) {
  1832.                                 $etrArticle=new BpuValeurProdArticle();
  1833.                                 $etrArticle->setEtrProd($etr);
  1834.                                 $etrArticle->setPrix(0);
  1835.                                 $etrArticle->setMarge(0);
  1836.                                 $etrArticle->setArticle($article1);
  1837.                                 $this->bpuValeurProdArticleRepository->add($etrArticle);
  1838.                             }
  1839.                             $this->bpuValeurProdArticleRepository->add($etrArticletrue);
  1840.                         }
  1841.                     }//Brahim 1
  1842.                     elseif ($colonnesFichier[$keyCell]=='Infra') {
  1843.                         if($cell->getValue()=='Poteau'){
  1844.                             $infra=$this->infraRepository->findOneBy(['libelle'=>'Hauteur']);
  1845.                         }else{
  1846.                             $infra=$this->infraRepository->findOneBy(['libelle'=>$cell->getValue()]);
  1847.                         }
  1848.                         if ($infra==null) {
  1849.                             if($cell->getValue()!=null){
  1850.                                 $infra=new Infra();
  1851.                                 $infra->setLibelle($cell->getValue());
  1852.                                 $this->infraRepository->add($infra,true);
  1853.                             }
  1854.                         }
  1855.                     }elseif ($colonnesFichier[$keyCell]=='Pu Btl') {
  1856.                         //BTELECOM
  1857.                         $PuBTL=$cell->getValue();
  1858.                     }elseif ($colonnesFichier[$keyCell]=='Pu') {
  1859.                         $PuEtr=$cell->getValue();
  1860.                         $bpuValeur=$this->bpuValeurRepository->findOneBy(['infra'=>$infra,'etrProd'=>$etr]);
  1861.                         if($bpuValeur==null){
  1862.                             $bpuValeur=new BpuValeur();
  1863.                         }
  1864.                         $bpuValeur->setPrix($PuEtr);
  1865.                         $this->bpuValeurRepository->add($bpuValeurtrue);
  1866.                     }elseif ($colonnesFichier[$keyCell]=='Désignation') {
  1867.                         $designation=$cell->getValue();
  1868.                     }elseif ($colonnesFichier[$keyCell]=='Pu Article') {
  1869.                         $PuArt=$cell->getValue();
  1870.                     }
  1871.                     elseif ($colonnesFichier[$keyCell]=='article') {
  1872.                         $libelleArt=$cell->getValue();
  1873.                     }
  1874.                     elseif ($colonnesFichier[$keyCell]=='PuF') {
  1875.                         if($PuArt>0){
  1876.                             $article=$this->articleProdRepository->findOneBy(['libelle'=>$libelleArt,'infra'=>$infra]);
  1877.                         }else{
  1878.                             $article=$this->articleProdRepository->findOneBy(['libelle'=>$libelleArt]);
  1879.                         }
  1880.                         if ($article==null) {
  1881.                             $article=new ArticleProd();
  1882.                             $article->setLibelle($libelleArt);
  1883.                             $article->setDescription($designation);
  1884.                             $article->setPuFree($PuArt);
  1885.                             $article->setInfra($infra);
  1886.                             if ($cell->getValue() >= 0) {
  1887.                                 $article->settype('article');
  1888.                             } else {
  1889.                                 $article->settype('penalite');
  1890.                             }
  1891.                             $this->articleProdRepository->add($articletrue);
  1892.                             foreach ($etrs as $key => $etr1) {
  1893.                                 $infraBtelecom$PuBTL;
  1894.                                 $cof= ($infraBtelecom != && $PuEtr!="") ? 1-($PuEtr/$infraBtelecom) : 0;
  1895.                                 if($article->gettype()=='penalite'){
  1896.                                     $prixFinal=$PuArt;
  1897.                                     $cof=0;
  1898.                                 }else{
  1899.                                     $prixFinal=$PuArt-$PuArt*$cof;
  1900.                                 }
  1901.                                 $etrArticle=new BpuValeurProdArticle();
  1902.                                 $etrArticle->setEtrProd($etr1);
  1903.                                 $etrArticle->setPrix($prixFinal);
  1904.                                 $etrArticle->setMarge($cof);
  1905.                                 $etrArticle->setArticle($article);
  1906.                                 $this->bpuValeurProdArticleRepository->add($etrArticle);
  1907.                             }
  1908.                             $this->bpuValeurProdArticleRepository->add($etrArticletrue);
  1909.                         }else{
  1910.                             $article->setLibelle($libelleArt);
  1911.                             $article->setDescription($designation);
  1912.                             $article->setPuFree($PuArt);
  1913.                             $article->setInfra($infra);
  1914.                             if ($cell->getValue() >= 0) {
  1915.                                 $article->settype('article');
  1916.                             } else {
  1917.                                 $article->settype('penalite');
  1918.                             }
  1919.                             $this->articleProdRepository->add($articletrue);
  1920.                         }
  1921.                         //Calculer le bpuValeurProd
  1922.                         $bpuValeurProdArticle=$this->bpuValeurProdArticleRepository->findOneBy([
  1923.                             'etrProd'=>$etr,
  1924.                             'article'=>$article
  1925.                         ]);
  1926.                         if($bpuValeurProdArticle==null){
  1927.                             $bpuValeurProdArticle=new BpuValeurProdArticle();
  1928.                         }
  1929.                         $bpuValeurProdArticle->setPrix($cell->getValue());
  1930.                         $bpuValeurProdArticle->setMarge(1-$cell->getValue()/$PuArt);
  1931.                         $this->bpuValeurProdArticleRepository->add($bpuValeurProdArticle,true);
  1932.                     }
  1933.                 }
  1934.             }
  1935.         }
  1936.         //}catch(Exception $ex){
  1937.         //    $this->addFlash('erreur','Le fichier que vous avez importé n\'est pas bon. Veuillez importer le bon fichier.');
  1938.         //}
  1939.         dd('fin importation');
  1940.         return $this->redirectToRoute('app_planning_etr_prod_index');
  1941.     }
  1942.     #[Route('/ExporterTechniciens'name'app_ExporterTechniciens',methods:["GET"])]
  1943.     public function ExporterTechniciens(Request $request): Response
  1944.     {
  1945.         $nouvelleFeuilleDeCalcul = new Spreadsheet();
  1946.         $FeuilleDeTravail $nouvelleFeuilleDeCalcul->getActiveSheet();
  1947.         $writer = new Xlsx($nouvelleFeuilleDeCalcul);
  1948.         $writer IOFactory::createWriter($nouvelleFeuilleDeCalcul'Xlsx');
  1949.         $writer->setIncludeCharts(true);
  1950.         $callStartTime microtime(true);
  1951.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
  1952.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
  1953.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
  1954.         $techniciens=$this->planningEtrRepository->findAll();
  1955.         //dd($techniciens);
  1956.         $liste=[];
  1957.         $tech=[];
  1958.         array_push($tech,"TechIdent","Login du technicien","Entreprise");
  1959.         $liste[]=$tech;
  1960.         foreach ($techniciens as $key => $technicien) {
  1961.             $tech=[];
  1962.             array_push($tech,$technicien->getTechId(),$technicien->getLoginTechnicien(),$technicien->getEtr()->getRaisonSociale());
  1963.             $liste[]=$tech;
  1964.         }
  1965.         $FeuilleDeTravail->fromArray($listeNULL'A1');
  1966.         $name="ExporterTechnicienProd.xlsx";
  1967.         $response =  new StreamedResponse(
  1968.             function () use ($writer) {
  1969.                 $writer->save('php://output');
  1970.             }
  1971.         );
  1972.         $response->headers->set('Content-Type''application/vnd.ms-excel');
  1973.         $response->headers->set('Content-Disposition''attachment;filename="'.$name);
  1974.         $response->headers->set('Cache-Control','max-age=0');
  1975.         return $response;
  1976.     }
  1977.     #[Route('/ExporterEtr'name'app_ExporterEtr',methods:["GET"])]
  1978.     public function ExporterEtr(Request $request): Response
  1979.     {
  1980.         $nouvelleFeuilleDeCalcul = new Spreadsheet();
  1981.         $FeuilleDeTravail $nouvelleFeuilleDeCalcul->getActiveSheet();
  1982.         $writer = new Xlsx($nouvelleFeuilleDeCalcul);
  1983.         $writer IOFactory::createWriter($nouvelleFeuilleDeCalcul'Xlsx');
  1984.         $writer->setIncludeCharts(true);
  1985.         $callStartTime microtime(true);
  1986.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
  1987.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
  1988.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
  1989.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
  1990.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
  1991.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('F')->setAutoSize(true);
  1992.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('G')->setAutoSize(true);
  1993.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('H')->setAutoSize(true);
  1994.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('I')->setAutoSize(true);
  1995.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('J')->setAutoSize(true);
  1996.         $etrs=$this->etrRepository->findAll();
  1997.         // dd($etrs);
  1998.         
  1999.         $liste=[];
  2000.         $tech=[];
  2001.         array_push($tech,'Raison sociale','Voie','adresse','SIRET','Prénom','Nom','Email','ETR FACT_','TVA','Contrat');
  2002.         $liste[]=$tech;
  2003.         foreach ($etrs as $key => $etr) {
  2004.             $tech=[];
  2005.             array_push($tech,$etr->getRaisonSociale(),$etr->getVoie(),$etr->getAdresse(),$etr->getSiret(),$etr->getPrenom(),$etr->getNom(),$etr->getEmail(),$etr->getEntrepriseFact(),$etr->getTva(),$etr->getContact());
  2006.             
  2007.             $liste[]=$tech;
  2008.         }
  2009.         $FeuilleDeTravail->fromArray($listeNULL'A1');
  2010.         $name="ExporterEtr.xlsx";
  2011.         $response =  new StreamedResponse(
  2012.             function () use ($writer) {
  2013.                 $writer->save('php://output');
  2014.             }
  2015.         );
  2016.         $response->headers->set('Content-Type''application/vnd.ms-excel');
  2017.         $response->headers->set('Content-Disposition''attachment;filename="'.$name);
  2018.         $response->headers->set('Cache-Control','max-age=0');
  2019.         return $response;
  2020.     }
  2021.     #[Route('/ExporterTechnicienProd/{mois}/{annee}'name'app_ExporterTechnicienProd',methods:["GET"])]
  2022.     public function ExporterTechnicienProd(Request $request,$mois,$annee): Response
  2023.     {
  2024.         $nouvelleFeuilleDeCalcul = new Spreadsheet();
  2025.         $FeuilleDeTravail $nouvelleFeuilleDeCalcul->getActiveSheet();
  2026.         $writer = new Xlsx($nouvelleFeuilleDeCalcul);
  2027.         $writer IOFactory::createWriter($nouvelleFeuilleDeCalcul'Xlsx');
  2028.         $writer->setIncludeCharts(true);
  2029.         $callStartTime microtime(true);
  2030.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
  2031.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
  2032.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
  2033.         $techniciens=$this->planningEtrProdRepository->findBy(['mois'=>$mois,'annee'=>$annee]);
  2034.         //dd($techniciens);
  2035.         $liste=[];
  2036.         $tech=[];
  2037.         array_push($tech,"TechIdent","Login du technicien","Entreprise");
  2038.         $liste[]=$tech;
  2039.         foreach ($techniciens as $key => $technicien) {
  2040.             $tech=[];
  2041.             array_push($tech,$technicien->getTechId(),$technicien->getLoginTechnicien(),$technicien->getEtrProd()?$technicien->getEtrProd()->getRaisonSociale():'');
  2042.             $liste[]=$tech;
  2043.         }
  2044.         $FeuilleDeTravail->fromArray($listeNULL'A1');
  2045.         $name="ExporterTechnicienProd.xlsx";
  2046.         $response =  new StreamedResponse(
  2047.             function () use ($writer) {
  2048.                 $writer->save('php://output');
  2049.             }
  2050.         );
  2051.         $response->headers->set('Content-Type''application/vnd.ms-excel');
  2052.         $response->headers->set('Content-Disposition''attachment;filename="'.$name);
  2053.         $response->headers->set('Cache-Control','max-age=0');
  2054.         return $response;
  2055.     }
  2056.     #[Route('/ExporterEtrProd'name'app_ExporterEtrProd',methods:["GET"])]
  2057.     public function ExporterEtrProd(Request $request): Response
  2058.     {
  2059.         $nouvelleFeuilleDeCalcul = new Spreadsheet();
  2060.         $FeuilleDeTravail $nouvelleFeuilleDeCalcul->getActiveSheet();
  2061.         $writer = new Xlsx($nouvelleFeuilleDeCalcul);
  2062.         $writer IOFactory::createWriter($nouvelleFeuilleDeCalcul'Xlsx');
  2063.         $writer->setIncludeCharts(true);
  2064.         $callStartTime microtime(true);
  2065.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
  2066.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
  2067.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
  2068.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
  2069.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
  2070.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('F')->setAutoSize(true);
  2071.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('G')->setAutoSize(true);
  2072.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('H')->setAutoSize(true);
  2073.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('I')->setAutoSize(true);
  2074.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('J')->setAutoSize(true);
  2075.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('K')->setAutoSize(true);
  2076.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('L')->setAutoSize(true);
  2077.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('M')->setAutoSize(true);
  2078.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('N')->setAutoSize(true);
  2079.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('O')->setAutoSize(true);
  2080.         $etrs=$this->etrProdRepository->findAll();
  2081.         $infras=$this->infraRepository->findAll();
  2082.         $liste=[];
  2083.         $tech=[];
  2084.         array_push($tech,'Raison sociale','Voie','adresse','SIRET','Prénom','Nom','Email','ETR FACT_','TVA','Contrat','Standard','Hauteur','Façade','Chambre','Plp');
  2085.         $liste[]=$tech;
  2086.         foreach ($etrs as $key => $etr) {
  2087.             $tech=[];
  2088.             array_push($tech,$etr->getRaisonSociale(),$etr->getVoie(),$etr->getAdresse(),$etr->getSiret(),$etr->getPrenom(),
  2089.                 $etr->getNom(),$etr->getEmail(),$etr->getEntrepriseFact(),$etr->getTva(),$etr->getContrat()
  2090.             );
  2091.             foreach($infras as $key => $infra){
  2092.                 if($key<5){
  2093.                     $bpuValue $this->bpuValeurRepository->findOneBy([
  2094.                                     'etrProd'=>$etr,
  2095.                                     'infra'=>$infra
  2096.                                 ]);
  2097.                     if($bpuValue){
  2098.                         array_push($tech,$bpuValue->getPrix());
  2099.                     }else{
  2100.                         array_push($tech,'-');
  2101.                     }
  2102.                 }
  2103.             }
  2104.             $liste[]=$tech;
  2105.         }
  2106.         $FeuilleDeTravail->fromArray($listeNULL'A1');
  2107.         $name="ExporterEtrProd.xlsx";
  2108.         $response =  new StreamedResponse(
  2109.             function () use ($writer) {
  2110.                 $writer->save('php://output');
  2111.             }
  2112.         );
  2113.         $response->headers->set('Content-Type''application/vnd.ms-excel');
  2114.         $response->headers->set('Content-Disposition''attachment;filename="'.$name);
  2115.         $response->headers->set('Cache-Control','max-age=0');
  2116.         return $response;
  2117.     }
  2118.     #[Route('/ExporterPenalites'name'app_ExporterPenalites',methods:["GET"])]
  2119.     public function Exporter(Request $request): Response
  2120.     {
  2121.         $nouvelleFeuilleDeCalcul = new Spreadsheet();
  2122.         $FeuilleDeTravail $nouvelleFeuilleDeCalcul->getActiveSheet();
  2123.         $writer = new Xlsx($nouvelleFeuilleDeCalcul);
  2124.         $writer IOFactory::createWriter($nouvelleFeuilleDeCalcul'Xlsx');
  2125.         $writer->setIncludeCharts(true);
  2126.         $callStartTime microtime(true);
  2127.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
  2128.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
  2129.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
  2130.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('D')->setAutoSize(true);
  2131.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('E')->setAutoSize(true);
  2132.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('F')->setAutoSize(true);
  2133.         $nouvelleFeuilleDeCalcul->getActiveSheet()->getColumnDimension('G')->setAutoSize(true);
  2134.         $listeMois=[1=>"Janvier"2=>"Février",3=> "Mars"4=>"Avril"5=>"Mai"6=>"Juin"7=>"Juillet"8=>"Août",9=> "Septembre"10=>"Octobre"11=>"Novembre"12=>"Décembre"];
  2135.         $annee=$request->query->get('annee');
  2136.         $mois=$request->query->get('mois');
  2137.         if($annee==null ||  $annee=="0" ||  $annee==""){
  2138.             $annee=date('Y');
  2139.         }
  2140.         if($mois==null || $mois=="0" ||  $mois==""){
  2141.             $mois=date('m');
  2142.         }else{
  2143.             $mois=( strlen($mois)==) ? "0".$mois:$mois;
  2144.         }
  2145.         //STT    TECHNICIEN    RC    ANOMALIE CONSTATEE    DATE RDV    MOIS    PENALITE
  2146.         $penalites=$this->penaliteRepository->findBy(['annee'=>$annee,'mois'=>$mois]);
  2147.         $etrs=$this->etrProdRepository->findAll();
  2148.         $liste=[];
  2149.         $tech=[];
  2150.         array_push($tech,'STT','TECHNICIEN','RC','ANOMALIE CONSTATEE','DATE RDV','PENALITE','NOM');
  2151.         $liste[]=$tech;
  2152.         foreach ($etrs as $key => $etr) {
  2153.             foreach ($penalites as $key => $penalite) {
  2154.                 if($penalite->getEtrProd()==$etr){
  2155.                     $tech=[];
  2156.                     array_push($tech,$etr->getRaisonSociale(),$penalite->getPlanningEtrProd()->getLoginTechnicien(),$penalite->getRc(),$penalite->getAnomalie(),$penalite->getDateRdv(),$penalite->getPenalite(),$penalite->getNomPenalite());
  2157.                     $liste[]=$tech;
  2158.                 }
  2159.             }
  2160.         }
  2161.         $FeuilleDeTravail->fromArray($listeNULL'A1');
  2162.         $name="ExporterPenalites ".$mois."-".$annee.".xlsx";
  2163.         $response =  new StreamedResponse(
  2164.             function () use ($writer) {
  2165.                 $writer->save('php://output');
  2166.             }
  2167.         );
  2168.         $response->headers->set('Content-Type''application/vnd.ms-excel');
  2169.         $response->headers->set('Content-Disposition''attachment;filename="'.$name);
  2170.         $response->headers->set('Cache-Control','max-age=0');
  2171.         return $response;
  2172.     }
  2173. }