src/Controller/FicheMECEController.php line 517

Open in your IDE?
  1. <?php
  2. // src/Controller/LuckyController.php
  3. namespace App\Controller;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Doctrine\DBAL\Driver\Connection;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Doctrine\Persistence\ManagerRegistry;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use App\Services\ExcelExtractor;
  11. use App\Services\VariableCalculateur;
  12. use App\Services\EvalEtatAELBExtractor;
  13. use App\Services\IndicateurNbStationPompageActive;
  14. use App\Entity\Variable;
  15. use App\Entity\DonneesTableur;
  16. use App\Entity\TableurDonnees;
  17. use App\Entity\MasseEau;
  18. use Symfony\Component\Config\Definition\Exception\Exception;
  19. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  20. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  21. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  22. use Symfony\Component\HttpFoundation\ResponseHeaderBag;
  23. use App\Services\RelationZonages;
  24. use Symfony\Contracts\Cache\CacheInterface;
  25. use Symfony\Component\Stopwatch\Stopwatch;
  26. class FicheMECEController extends AbstractController
  27. {
  28.     /**
  29.      *    @Route("/false_logout")
  30.      *
  31.      */
  32.     public function false_logout(): Response
  33.     {
  34.         return new Response(
  35.             ' '
  36.         );
  37.     }
  38.     /**
  39. +      *
  40.          @Route("/test_fichier", name="verif_colonne_fichier")
  41.          @IsGranted("ROLE_ADMIN")
  42. +      */
  43.     public function testFichier(ManagerRegistry  $doctrineRequest $request): Response
  44.     {
  45.         // parcours des fichiers
  46.         $colonneRepo $doctrine->getRepository(DonneesTableur::class);
  47.         $tabDonneesTableur = array();
  48.         // $numME = 'FRGR0399' ;
  49.         $numME 'FRFR21';
  50.         // tableau qui recap tout les coloens passé à twig
  51.         $tabColonne = array();
  52.         foreach ($doctrine->getRepository(TableurDonnees::class)->findAll() as $i => $fichier) {
  53.             // print_r($fichier);
  54.             if ($fichier->isFichierValide()) {
  55.                 $tabDonneesTableur[$fichier->getNomCourt()] = array();
  56.                 foreach ($colonneRepo->findBy(["fichier" => $fichier]) as $colonne) {
  57.                     try {
  58.                         $tabDonneesTableur[$fichier->getNomCourt()][$colonne->getLibelleFiche()] = $fichier->getValeurFromMEColonne($numME$colonne);
  59.                     } catch (Exception $e) {
  60.                         // on s'en fout pour le moment ?
  61.                         echo "erreur pour fichier " $fichier->getNomCourt() . " feuille " $colonne->getFeuille() . "" $colonne->getLibelle() . " ";
  62.                         //print_r($colonne);
  63.                     }
  64.                     //print_r($colonne);
  65.                     echo $fichier->getValeurFromMEColonne($numME,$colonne);
  66.                 }
  67.             } else {
  68.                 echo "ficheir non trouvé";
  69.             }
  70.             // print_r($colonne);
  71.         }
  72.         // print_r($tabDonneesTableur);
  73.         return $this->render('base.html.twig');
  74.     }
  75.     /**
  76. +      * @Route("/fiche")
  77. +      */
  78.     public function detailFiche(
  79.         ManagerRegistry  $doctrine,
  80.         Request $request,
  81.         ExcelExtractor $excelExtract,
  82.         VariableCalculateur $variableCalculateur,
  83.         Stopwatch $stopwatch,
  84.         EvalEtatAELBExtractor $evaletatAELBExtractor,
  85.         CacheInterface $cache,
  86.         IndicateurNbStationPompageActive $indicateurStation
  87.     ): Response {
  88.         $numME  =  ($request->query->get('fiche'));
  89.         // if ($numME=='FRFRR338_2') $numME='FRFR338_2'; // corrige bug de cette MECE avec deux codes
  90.         /* CONTROLE pour eviter les injections */
  91.         $allMECE  $doctrine->getRepository(MasseEau::class)->findAll();
  92.         // print_r($allMECE);
  93.         $valeursAutorisees=array();
  94.         foreach ($allMECE as $MECE) {
  95.           // echo $MECE['codeSandre'];echo '<br>';
  96.             $va=$MECE->getCodeSandre();
  97.             // if ($va=='FRFRR338_2') $va='FRFR338_2';// corrige bug de cette MECE avec deux codes
  98.             $valeursAutorisees[]=$va;
  99.                           // print_r($me);echo '<br>';
  100.         }
  101.         if (!in_array($numME$valeursAutoriseestrue)) {
  102.             // Redirection vers la route "accueil"
  103.             return $this->redirectToRoute('accueil_masse_eau');
  104.         }
  105.         /* LES FICHIERS bdd Fiche_mece_2023 */
  106.         $files=array('Identite'=>array('tableur'=>'fiche_mece_identite','feuille'=>"id MECE GI"),
  107.         'Hydrologie'=>array('tableur'=>'fiche_mece_hydrologie','feuille'=>"Donnees hydro"),
  108.         'MorphoConti'=>array('tableur'=>'fiche_mece_morpho_conti','feuille'=>"Donnees morph conti"),
  109.         'PollDiff'=>array('tableur'=>'fiche_mece_poll_diff','feuille'=>"Donnees poll diff"),
  110.         'MacroMicro'=>array('tableur'=>'fiche_mece_macro_micro','feuille'=>"Donnees macro micro"),
  111.         'EvaluationEtat'=>array('tableur'=>'fiche_mece_evaluation_etat','feuille'=>"Donnees hydro")
  112.         );
  113.         // 0- Poll diffuses et AEP > AEP > Captages/périmètre ----------------------------------------
  114.         // les valeurs du fichier de GL > 202000505_SDE_PAOT_CT.xls > onglte AEP
  115.         // Le traitement est realise en debut de route pour pallier au bug suivant :
  116.         // quand le cache est vidé, le fichier xls est mal lu (aucune feuille trouvée)
  117.         // probleme de memoire ???
  118.         $tabValExcelAEP $excelExtract->extraitValeurAEP($numME);
  119.         $tabCaptages = array();
  120.         foreach ($tabValExcelAEP as $valeurAEP) {
  121.             $tabCaptages[] = array("nom" => $valeurAEP["Nom AAC"], "type" => $valeurAEP["AAC sup / AAC sout"], "priorite" => $valeurAEP["Type de priorité captage"]);
  122.         }
  123.         // 1- parcours des fichiers :
  124.         /*
  125.         bdd Fiche_mece_2023-id MECE GI.xlsx
  126.         bdd Fiche_mece_2023-Donnes hydro.xlsx
  127.         bdd Fiche_mece_2023-Donnees morph conti.xlsx
  128.         bdd Fiche_mece_2023-Donnees poll diff.xlsx
  129.         bdd Fiche_mece_2023-Donnees macro micro.xlsx
  130.         bdd Fiche_mece_2023-Donnees_etat.xlsx
  131.         Ces fichiers remplacent fin 2023 le fichier unique bdd_fiche_mece
  132.         */
  133.         $colonneRepo $doctrine->getRepository(DonneesTableur::class);
  134.         $tabEntete = array();
  135.         foreach ($files as $key => $file) {
  136.           $nom_donnees='donnees'.$key;
  137.           $nom_donnees_unique='donnees'.$key.'Unique';
  138.           $nomCourtFichier=$file['tableur'];
  139.           $feuille=$file['feuille'];
  140.           $fichier =  $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => $nomCourtFichier]);
  141.           if ($fichier->isFichierValide()) {
  142.               $$nom_donnees[$nomCourtFichier] = array();
  143.               $tabEntete $fichier->getEnteteFeuille($feuille);
  144.               foreach ($tabEntete as $nomColonne) {
  145.                   $$nom_donnees[$nomCourtFichier][$nomColonne] = "NON_DISPO";
  146.               }
  147.               $cle_cache $nomCourtFichier "_" $numME;
  148.               $itemCache $cache->getItem($cle_cache);
  149.               $$nom_donnees_unique = array();
  150.               if ($itemCache->isHit()) {
  151.                   $$nom_donnees[$nomCourtFichier] = $itemCache->get();
  152.               }
  153.               else {
  154.                   foreach ($colonneRepo->findBy(["fichier" => $fichier]) as $colonne) {
  155.                       try {
  156.                           $$nom_donnees_unique[$colonne->getLibelleFiche()] = $fichier->getValeurFromMEColonne($numME$colonne);
  157.                       } catch (Exception $e) {
  158.                           //
  159.                       }
  160.                       // $$nom_donnees[$nomCourtFichier] = $$nom_donnees_unique;
  161.                       // $itemCache->set($$nom_donnees_unique);
  162.                       // $isSaved = $cache->save($itemCache);
  163.                   }
  164.                   $$nom_donnees[$nomCourtFichier] = $$nom_donnees_unique;
  165.                   $itemCache->set($$nom_donnees_unique);
  166.                   $isSaved $cache->save($itemCache);
  167.               }
  168.               $fichier->videMemoire();
  169.             } else {
  170.                 echo "fichier non trouvé " $fichier->getNomCourt() . " d";
  171.             }
  172.         }
  173.         // 1-1- parcours des explications et sources : ----------------------------
  174.         $sourcesInfos=array();
  175.         $cle_cache_explic_source="explic_source";
  176.         $itemCache $cache->getItem($cle_cache_explic_source);
  177.         if ($itemCache->isHit()) {
  178.             $sourcesInfos $itemCache->get();
  179.         } else {
  180.           // ON INITIALISE LE TABLEAU
  181.           foreach ($files as $key => $file) {
  182.             $nomCourtFichier=$file['tableur'];
  183.             $feuille=$file['feuille'];
  184.             $fichier =  $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => $nomCourtFichier]);
  185.             if ($fichier->isFichierValide()) {
  186.                 foreach ($colonneRepo->findBy(["fichier" => $fichier]) as $colonne) {
  187.                     try {
  188.                         $sourcesInfos[$colonne->getLibelleFiche()]["explication"] ='';
  189.                         $sourcesInfos[$colonne->getLibelleFiche()]["source"] ='';
  190.                     } catch (Exception $e) {
  191.                         //
  192.                     }
  193.                 }
  194.                 $fichier->videMemoire();
  195.               } else {
  196.                   echo "fichier non trouvé " $fichier->getNomCourt() . " d";
  197.               }
  198.           }
  199.           // ON REMPLIT LE TABLEAU
  200.           $tableurSource =  $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => "back_office_fiches"]);
  201.           $infosChamp $tableurSource->getValeurFeuille("fiche MECE");
  202.            foreach ($infosChamp as $infoChamp) {
  203.             if ( !empty($infoChamp["Colonne"]) AND (!empty($infoChamp["NIVEAU III"]) OR !empty($infoChamp["INFORMATION"]) ) ) {
  204.               $colonne=$infoChamp["Colonne"];//libelle
  205.               // if (!empty($colonne)) {
  206.                 $champ $doctrine->getRepository(DonneesTableur::class)->findOneBy(['libelle'=>$colonne]);
  207.                 if (!empty($champ)) {
  208.                   $libFiche $champ->getLibelleFiche();
  209.                   if ( !empty($infoChamp["Point I explication de la donnée"]) )
  210.                   $sourcesInfos[$libFiche]["explication"]=$infoChamp["Point I explication de la donnée"];
  211.                   $fichier $champ->getFichier()->getChemin();
  212.                   $feuille $champ->getFeuille();
  213.                   $cheminSource="SDE/".$fichier."/".$feuille."/".$colonne;
  214.                   $sourcesInfos[$libFiche]["source"]=$cheminSource;
  215.                   $itemCache->set($sourcesInfos);
  216.                   $isSaved $cache->save($itemCache);
  217.                 }
  218.               // }
  219.             }
  220.            }
  221.        }
  222.         // if ($numME=='FRFR338_2') $numME='FRFRR338_2';// corrige bug de cette MECE avec deux codes
  223.         // 2- les variable calculées en sql ----------------------------------------
  224.         $tabContenuVariable = array();
  225.         $repository $doctrine->getRepository(Variable::class);
  226.         $tabVariables $repository->findAll();
  227.         //print_r($tabVariables);
  228.         foreach ($tabVariables as $variable) {
  229.             if ($variable->getType() == "sql"  || $variable->getType() == "sql_id" || $variable->getType() == "sql_line") {
  230.                 // DEV
  231.                 // $tabContenuVariable[$variable->getSLug()] = $variableCalculateur->calculVariable($variable, $numME);
  232.                 // CARE : en PROD, il faut :
  233.                 $tabContenuVariable[$variable->getSLug()] = $variableCalculateur->getVariableCache($variable$numME);
  234.             }
  235.         }
  236.         // if ($numME=='FRFRR338_2') $numME='FRFR338_2';// corrige bug de cette MECE avec deux codes
  237. // print_r($tabContenuVariable);
  238.         // les PROGRAMMES DE MESURE ----------------------------------------
  239.         $stopwatch->start('calcul_pdm');
  240.         $cle_cache_pdm "pdm_$numME";
  241.         $itemCache $cache->getItem($cle_cache_pdm);
  242.         if ($itemCache->isHit()) {
  243.             $tabMesurePDMUnique $itemCache->get();
  244.         }
  245.         else {
  246.             $excelExtract->chargeFichier("/../../src/data/pdm_mesures_pression_polldiff_sdage2022_travail.xls");
  247.             $tabValME_pdm_poll_diff =  $excelExtract->extraitValeurMultiLigne($numME4);
  248.             $excelExtract->chargeFichier("/../../src/data/pdm_mesures_pression_ressources_sdage2022_travail.xls");
  249.             $tabValME_pdm_resources =  $excelExtract->extraitValeurMultiLigne($numME4);
  250.             $excelExtract->chargeFichier("/../../src/data/pdm_mesures_pression_milieuaqua_sdage2022_travail.xls");
  251.             $tabValME_pdm_milieu_aqua =  $excelExtract->extraitValeurMultiLigne($numME4);
  252.       // print_r($tabValME_pdm_milieu_aqua);
  253.             $excelExtract->chargeFichier("/../../src/data/pdm_mesures_pression_pollponct_sdage2022_travail.xls");
  254.             $tabValME_pdm_poll_ponct =  $excelExtract->extraitValeurMultiLigne($numME4);
  255.             // on contruit un tableau simplifie sans doublon de mesure
  256.             $tabMesurePDMUnique = array();
  257.             foreach (array_merge($tabValME_pdm_poll_diff$tabValME_pdm_resources$tabValME_pdm_milieu_aqua$tabValME_pdm_poll_ponct) as $infoPDM) {
  258.                 if (!isset($tabMesurePDMUnique[$infoPDM["code_type_"]])) {
  259.                     $tabMesurePDMUnique[$infoPDM["code_type_"]] = array(
  260.                         'pression_c' => $infoPDM["pression_c"],
  261.                         'code_type_' => $infoPDM["code_type_"],
  262.                         'nom_type_m' => $infoPDM["nom_type_m"]
  263.                     );
  264.                 }
  265.             }
  266.             $itemCache->set($tabMesurePDMUnique);
  267.             $isSaved $cache->save($itemCache);
  268.         }
  269.         $stopwatch->stop('calcul_pdm');
  270.         // Evaluation de l'ETAT ----------------------------------------
  271.         // Etat_Ecologique_cours_d_eau_pluriannuel_COMPLET_2019_pourARBNA.XLSX
  272.         $nomCourtFichier 'etat_ecologique';
  273.         $tableurEtatEcologique =  $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => $nomCourtFichier]);
  274.         $periodes=array("2010-2011","2011-2012-2013","2015-2016-2017");
  275.         $cle_cache $nomCourtFichier "_" $numME;
  276.         $itemCache $cache->getItem($cle_cache);
  277.         if ($itemCache->isHit()) {
  278.           $donneesEtatEcologique $itemCache->get();
  279.         }
  280.         else {
  281.           $donneesEtatEcologique $tableurEtatEcologique->getValeurFeuilleEEc("Etat Cours d'eau",$numME,$periodes);
  282.           // print_r($donneesEtatEcologique);
  283.           $itemCache->set($donneesEtatEcologique);
  284.           $isSaved $cache->save($itemCache);
  285.         }
  286.         $stationRetenue null;
  287.         if ( !empty($donneesEtatEcologique["2015-2016-2017"]["Station retenue"])  ) {
  288.           $stationRetenue =  '0' $donneesEtatEcologique["2015-2016-2017"]["Station retenue"];
  289.           if ( strlen($stationRetenue) == $stationRetenue =  '0' $stationRetenue;
  290.         }
  291.         // Stations de pompage  ----------------------------------------
  292.         // nb Station Riviere Active par ME.xlsx     Données autres     May 17, 2022
  293.         // ici on doit utiliser la version FRFRR338_2
  294.         // if ($numME=='FRFRR338_2') $numME='FRFR338_2';
  295.         // if ($numME=='FRFR338_2') $numME='FRFRR338_2';
  296.         $nbStationPompageActive =   $indicateurStation ->getNbStationPompage($doctrine->getRepository(MasseEau::class)->findOneBy(array("codeSandre"=>$numME)));
  297.         // if ($numME=='FRFRR338_2') $numME='FRFR338_2';
  298.         // liste des SA associé ----------------------------------------
  299.         // 2025
  300.         // Pour Partie Rejets des collectivités et industriels
  301.         $tableurInventaireSAme =  $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => "fiche_assainissement"]);
  302.         $tabSystemesAssainissement=array();
  303.         $cle_cache_sa_me "sa_inventaire_me_$numME";
  304.         $itemCache $cache->getItem($cle_cache_sa_me);
  305.         if ($itemCache->isHit()) {
  306.             $tabSystemesAssainissement $itemCache->get();
  307.         } else {
  308.             // fix BUG CASSE 20250526 :
  309.             // par exemple FRGR0392A devient FRGR0392a
  310.             // pour utilisation dans fiche_assainissement (bdd_fichesassainissement.xlsx) > base_STEP
  311.             // fichier dans sa version du 22/01/2025
  312.             // CARE le changemenent de casse n'aura peut être pas de sens dans une nouvelle version du fichier
  313.             $numMEass=strtolower($numME);
  314.             $numMEass=str_replace('frgr''FRGR'$numMEass);
  315.             // $tabSystemesAssainissement = $tableurInventaireSAme->getValeurFeuilleFiltree("base_STEP", ["Code masse d'eau" => $numME]);
  316.             $tabSystemesAssainissement $tableurInventaireSAme->getValeurFeuilleFiltree("base_STEP", ["Code masse d'eau" => $numMEass]);
  317.             $itemCache->set($tabSystemesAssainissement);
  318.             $isSaved $cache->save($itemCache);
  319.         }
  320.         $nbSATotal 0;
  321.         $nbSAPrioritaire 0;
  322.         if (!empty($tabSystemesAssainissement)) {
  323.           foreach ($tabSystemesAssainissement as $infoSA) {
  324.               $nbSATotal++;
  325.               if (intval($infoSA['Priorités SDE']) > 0) {
  326.                   $nbSAPrioritaire++;
  327.               }
  328.           }
  329.         }
  330.         // ZH
  331.          $tableurInventaureZHme =  $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => "BDD_Inventaire_ZH_ME"]);
  332.          $dataZHme=array();
  333.          $strZHme='';
  334.          $cle_cache_zh_me "zh_inventaire_me_$numME";
  335.          $itemCache $cache->getItem($cle_cache_zh_me);
  336.          if ($itemCache->isHit()) {
  337.              $dataZHme $itemCache->get();
  338.          } else {
  339.            $donneesZHme $tableurInventaureZHme->getValeurFeuilleFiltree("Inventaire_BV", ["Code_ME_new" => $numME]);
  340.            $tabCodeInseeME array_map(function ($valeur) {
  341.                return $valeur["code_insee"];
  342.            }, $tabContenuVariable['insee_86']);
  343.             foreach ($donneesZHme as $infoME) {
  344.                   $strZHme .= "<tr><td>".$infoME["ETAT"]."</td>".
  345.                     "<td>".$infoME["DATE"]."</td>".
  346.                     "<td>".$infoME["OPERATEUR"]."</td>".
  347.                     "<td>".$infoME["zonage inventaire terrain"]."</td>".
  348.                   "</tr>";
  349.             }
  350.              $dataZHme["inventaireMEZH"]=$strZHme;
  351.                 $itemCache->set($dataZHme);
  352.                 $isSaved $cache->save($itemCache);
  353.          }
  354.          $tableurInventaureZHcom =  $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => "BDD_Inventaire_ZH_Communes"]);
  355.          $dataZHcomm=array();
  356.          $etatInvZHCommME=array();
  357.          $strZHCommunesME='';
  358.          $cle_cache_zh_comm "zh_inventaire_comm_$numME";
  359.          $itemCache $cache->getItem($cle_cache_zh_comm);
  360.          if ($itemCache->isHit()) {
  361.              $dataZHcomm $itemCache->get();
  362.          } else {
  363.            $donneesZHCommME $tableurInventaureZHcom->getValeurFeuille("Inventaire_communes");
  364.            $tabCodeInseeME array_map(function ($valeur) {
  365.                return $valeur["code_insee"];
  366.            }, $tabContenuVariable['insee_86']);
  367.             foreach ($donneesZHCommME as $infoCommune) {
  368.               if (in_array($infoCommune["INSEE"], $tabCodeInseeME)) {
  369.                   $strZHCommunesME .= "<tr><td>".$infoCommune["COMMUNE"]."</td>".
  370.                   "<td>"$infoCommune["ETAT"]."</td>".
  371.                   "<td>".$infoCommune["DATE"]."</td>".
  372.                   "<td>".$infoCommune["OPERATEUR"]."</td>".
  373.                   "<td>".$infoCommune["zonage inventaire terrain"]."</td>".
  374.                   "</tr>";
  375.                   $etatInvZHCommME[$infoCommune["INSEE"]]=array(trim($infoCommune["ETAT"]));
  376.               }
  377.             }
  378.             $dataZHcomm["dataCommunauxZH"]=$etatInvZHCommME;
  379.             $dataZHcomm["inventaireCommunauxZH"]=$strZHCommunesME;
  380.             $itemCache->set($dataZHcomm);
  381.             $isSaved $cache->save($itemCache);
  382.          }
  383.         // ----------------------------------------
  384.         $tabParamTwig array_merge($tabContenuVariable, [
  385.             'numME' => $numME,
  386.             "code_ME" => $numME,
  387.             // nouveau en 2024
  388.             "sourcesInfos" => $sourcesInfos,
  389.             // nouveau en 2023
  390.             "donneesIdentite" => $donneesIdentite,
  391.             "donneesHydrologie" => $donneesHydrologie,
  392.             "donneesMorphoConti" => $donneesMorphoConti,
  393.             "donneesPollDiff" => $donneesPollDiff,
  394.             "donneesMacroMicro" => $donneesMacroMicro,
  395.             "donneesEvaluationEtat" => $donneesEvaluationEtat,
  396.             // on doit conserver :
  397.             "donneesEtatEcologique" => $donneesEtatEcologique,
  398.             // Etat_Ecologique_cours_d_eau_pluriannuel_COMPLET_2019_pourARBNA.XLSX
  399.             "tabCaptages" => $tabCaptages,
  400.             //202000505_SDE_PAOT_CT.xls
  401.              'pdm_unifie' => $tabMesurePDMUnique,
  402.             'nbStationPompageRiviere' =>  $nbStationPompageActive ,
  403.             // Rejets des collectivités et industriels :
  404.             "tab_systemes_assainissement" => $tabSystemesAssainissement,
  405.             "nbSAPrioritaire"  => $nbSAPrioritaire,
  406.             "nbSATotal"  => $nbSATotal,
  407.             // A voir :
  408.             'stationRetenue' => $stationRetenue,
  409.             // 2024 ZH
  410.             "dataZHcomm" => $dataZHcomm,
  411.             "dataZHme" => $dataZHme,
  412.         ]);
  413.         return $this->render('fiche.html.twig'$tabParamTwig);
  414.     }
  415.     /**
  416. +      * @Route("/",name="accueil_masse_eau" )
  417. +      */
  418.     public function home(ManagerRegistry $doctrine,
  419.     // ExcelExtractor $excelExtract,
  420.     // VariableCalculateur $variableCalculateur,
  421.     // EvalEtatAELBExtractor $evaletatAELBExtractor,
  422.     CacheInterface $cache
  423.      ): Response
  424.     {
  425.       $allMECE  $doctrine->getRepository(MasseEau::class)->findAll();
  426.     //   // print_r($allMECE);
  427.     //   print_r($allMECE);
  428.         /*
  429.         $connection = $this->getDoctrine()->getConnection('pg_data');
  430.         //print_r($connection);
  431.         $result = $connection->fetchAll("  select id, nommassede , cdeumassed from me_rw_etat_2019 me join departement d on st_intersects(me.geom, d.wkb_geometry) and d.code_dept = '86' order by nommassede ");
  432.         $result_ordre_code = $connection->fetchAll("  select id, nommassede , cdeumassed from me_rw_etat_2019 me join departement d on st_intersects(me.geom, d.wkb_geometry) and d.code_dept = '86' order by cdeumassed ");
  433.         //  print_r($result);
  434.         */
  435.         $projDir $this->getParameter('kernel.project_dir');
  436.         $chemin_json_bassin "$projDir/public/json/contour_mece_ok.json";
  437.         if (! is_file($chemin_json_bassin)) {
  438.             $json $doctrine->getRepository(MasseEau::class)->getAllBassinAsJson();
  439.             file_put_contents($chemin_json_bassin,$json);
  440.         }
  441. /*
  442.           foreach ($allMECE as $MECE) {
  443.             // echo $MECE['codeSandre'];echo '<br>';
  444.               $numME=$MECE->getCodeSandre();
  445.               echo $MECE->getCodeSandre();
  446.               print_r($MECE);echo '<br>';
  447.           }
  448. */
  449.         $chemin_json_bassin "$projDir/public/json/contour_mece_cible.json";
  450.         if (! is_file($chemin_json_bassin)) {
  451.           $cible=array();
  452.           foreach ($allMECE as $MECE) {
  453.             // echo $MECE['codeSandre'];echo '<br>';
  454.               $numME=$MECE->getCodeSandre();
  455.               echo $MECE->getCodeSandre();
  456.               print_r($MECE);echo '<br>';
  457.               // $numME  =  'FRGR1871';
  458.               $nomCourtFichier ='bdd_fiche_mece';
  459.               $cle_cache $nomCourtFichier "_" $numME;
  460.               // cache par fichier
  461.               $itemCache $cache->getItem($cle_cache);
  462.               $tabDonneesTableur = array();
  463.               // $tabDonneTableurUnique = array();
  464.               if ($itemCache->isHit()) {
  465.                   // echo "cache $cle_cache   trouve ";echo '<br>';
  466.                   //$tabChamp= $itemCache->get();
  467.                   $tabDonneesTableur[$nomCourtFichier] = $itemCache->get();
  468.                   $cible[$numME]=$tabDonneesTableur['bdd_fiche_mece']['priorités SDE gestion intégrée (actualisation 2022)'];
  469.               }
  470.               else {
  471.                                   // echo "PAScache $cle_cache  NON trouve ";echo '<br>';
  472.                 $colonneRepo $doctrine->getRepository(DonneesTableur::class);
  473.                 // RECUP DES VALEURS DE BDD FICHE MECE / Données ----------------------------------------
  474.                 $fichier $doctrine->getRepository(TableurDonnees::class)->findBy(['nom_court' => $nomCourtFichier])[0];
  475.                 $tabEntete = array();
  476.                 if ($fichier->isFichierValide()) {
  477.                     $nomCourtFichier $fichier->getNomCourt();
  478.                     $tabDonneesTableur[$nomCourtFichier] = array();
  479.                     $tabEntete $fichier->getEnteteFeuille("Données");
  480.                     foreach ($tabEntete as $nomColonne) {
  481.                         $tabDonneesTableur[$nomCourtFichier][$nomColonne] = "NON_DISPO";
  482.                     }
  483.                     // $itemCache = $cache->getItem($cle_cache);
  484.                     $tabDonneTableurUnique = array();
  485.                     // if (  $cache->hasItem($cle_cache) ) {
  486.                     // else {
  487.                         //$tabChamp= $this->getInfoStep($numSA) ;
  488.                         // echo "cache $cle_cache  NON trouve ";echo '<br>';
  489.                         foreach ($colonneRepo->findBy(["fichier" => $fichier]) as $colonne) {
  490.                           if ($colonne->getLibelleFiche()=='priorités SDE gestion intégrée (actualisation 2022)') {
  491.                             try {
  492.                                 $tabDonneTableurUnique[$colonne->getLibelleFiche()] = $fichier->getValeurFromMEColonne($numME$colonne);
  493.                             } catch (Exception $e) {
  494.                                 // on s'en fout pour le moment ?
  495.                             }
  496.                             // $tabDonneesTableur[$nomCourtFichier] = $tabDonneTableurUnique;
  497.                             // $cible[$numME]=$tabDonneesTableur[$nomCourtFichier]['priorités SDE gestion intégrée (actualisation 2022)'];
  498.                             $cible[$numME]=$tabDonneTableurUnique[$colonne->getLibelleFiche()];
  499.                             // $itemCache->set($tabDonneTableurUnique);
  500.                             // $isSaved = $cache->save($itemCache);
  501.                           }
  502.                         }
  503.                     // }
  504.                     $fichier->videMemoire();
  505.                 } else {
  506.                     echo "ficheir non trouvé " $fichier->getNomCourt() . " d";
  507.                 }
  508.                 // echo $numME. " : ".$cible[$numME];echo '<br>';
  509.               }
  510.            }
  511.            // print_r($cible);
  512.             $json $doctrine->getRepository(MasseEau::class)->getAllBassinCibleAsJson($cible);
  513.             file_put_contents($chemin_json_bassin,$json);
  514.         }
  515.         $chemin_json_trace"$projDir/public/json/trace_mece_ok.json";
  516.         if (! is_file($chemin_json_trace)) {
  517.             $json $doctrine->getRepository(MasseEau::class)->getAllTraceAsJson();
  518.             file_put_contents($chemin_json_trace,$json);
  519.         }
  520.         return $this->render('accueil.html.twig', [
  521.             // this array defines the variables passed to the template,
  522.             // where the key is the variable name and the value is the variable value
  523.             // (Twig recommends using snake_case variable names: 'foo_bar' instead of 'fooBar')
  524.             'mece' => $allMECE,
  525.         ]);
  526.     }
  527.     /**
  528. +      * @Route("/export", name="genere_fichier_compil" )
  529. +      */
  530.     public function exportDonnes(): Response
  531.     {
  532.         /* manque
  533.         FRFR338_2
  534.         FRGR0393a
  535.         */
  536.         // parcours des fichiers
  537.         $colonneRepo $this->getDoctrine()->getRepository(DonneesTableur::class);
  538.         $tabDonneesTableur = array();
  539.         $connection $this->getDoctrine()->getConnection('pg_data');
  540.         //print_r($connection);
  541.         $result $connection->fetchAll("  select id, nommassede , cdeumassed from me_rw_etat_2019 me join departement d on st_intersects(me.geom, d.wkb_geometry) and d.code_dept = '86' AND cdeumassed not in ('FRGR2127','FRFRR338_2') order by nommassede  ");
  542.         foreach ($result as $info) {
  543.             $codeME $info["cdeumassed"];
  544.             $tabCodeME[] = $codeME;
  545.         }
  546.         // $tabCodeME = array();
  547.         // probleme pour mece AEAG  : les colone ne sont pas les meme
  548.         $infoColonnes = array();
  549.         foreach ($this->getDoctrine()->getRepository(TableurDonnees::class)->findAll() as $i => $fichier) {
  550.             //print_r($fichier);
  551.             if ($fichier->isFichierValide()) {
  552.                 $tabDonneesTableur[$codeME][$fichier->getNomCourt()] = array();
  553.                 foreach ($colonneRepo->findBy(["fichier" => $fichier]) as $colonne) {
  554.                     if ($colonne->getInactive() === false || $colonne->getInactive() === null) {
  555.                         $infoColonnes[] = [
  556.                             "Nom" => $colonne->getLibelleFiche(),
  557.                             "Fichier Source " => $fichier->getChemin(),
  558.                             "Feuille Fichier Source" => $colonne->getFeuille(),
  559.                             "Colonne Fichier Source" => $colonne->getLibelle()
  560.                         ];
  561.                         try {
  562.                             //$tabDonneesTableur[ $codeME ][$fichier->getNomCourt()][$colonne->getLibelleFiche()] =
  563.                             $tabTMP $fichier->getValeurFromMEColonneMultiME($tabCodeME$colonne);
  564.                             foreach ($tabTMP as $codeME => $tabValeur) {
  565.                                 $tabDonneesTableur[$codeME][$fichier->getNomCourt()][$colonne->getLibelleFiche()] = $tabValeur;
  566.                             }
  567.                         } catch (Exception $e) {
  568.                             // on s'en fout pour le moment ?
  569.                         }
  570.                     }
  571.                     //print_r($colonne);
  572.                     //echo $fichier->getValeurFromMEColonne($numME,$colonne);
  573.                 }
  574.                 $fichier->videMemoire();
  575.             } else {
  576.                 echo "ficheir non trouvé";
  577.             }
  578.             // print_r($colonne);
  579.         }
  580.         //print_r($tabDonneesTableur);
  581.         $entete = array();
  582.         $nomFichiers array_keys(reset($tabDonneesTableur));
  583.         //$nomFichiers = array_keys( ($tabDonneesTableur["FRGR0393A"]));
  584.         $nbColonne 0;
  585.         foreach ($nomFichiers as $nomFichier) {
  586.             //echo "$nomFichier ";
  587.             // reset prend la pemire me arbitriarement
  588.             //print_r(array_keys(reset($tabDonneesTableur)[$nomFichier]));
  589.             $entete array_merge($entetearray_keys(reset($tabDonneesTableur)[$nomFichier]));
  590.             // modif cursom
  591.             //$entete = array_merge($entete,array_keys($tabDonneesTableur["FRGR0393A"][$nomFichier]));
  592.             $nbColonne += count(array_keys(reset($tabDonneesTableur)[$nomFichier]));
  593.         }
  594.         if ($nbColonne != count($entete)) {
  595.             throw new Exception("pas le meme nomre de coloon e $nbColonne " count($entete));
  596.         }
  597.         //print_r($entete);
  598.         //  echo $nbColonne;
  599.         // print_r(reset($tabDonneesTableur));
  600.         $itLigne 2;
  601.         $spreadSheet = new Spreadsheet();
  602.         $spreadSheet->createSheet();
  603.         $spreadSheet->setActiveSheetIndex(0);
  604.         $spreadSheet->getActiveSheet()->setTitle('A Lire Définition des colonnes');
  605.         $spreadSheet->setActiveSheetIndex(1);
  606.         $spreadSheet->getActiveSheet()->setTitle('Données');
  607.         $spreadSheet->getActiveSheet()->fromArray(
  608.             array_merge(array("Code"), $entete),  // The data to set
  609.             NULL,        // Array values with this value will not be set
  610.             'A1'         // Top left coordinate of the worksheet range where
  611.             //    we want to set these values (default is A1)
  612.         );
  613.         foreach ($tabDonneesTableur as $codeME => $donneesME) {
  614.             $tabNouvelleLigne = array($codeME);
  615.             foreach ($donneesME as $nomFichie => $tabValeur) {
  616.                 $tabNouvelleLigne array_merge($tabNouvelleLigne$tabValeur);
  617.             }
  618.             $spreadSheet->getActiveSheet()->fromArray(
  619.                 $tabNouvelleLigne,  // The data to set
  620.                 NULL,        // Array values with this value will not be set
  621.                 'A' $itLigne         // Top left coordinate of the worksheet range where
  622.                 //    we want to set these values (default is A1)
  623.             );
  624.             $itLigne++;
  625.         }
  626.         //  nouvelle feuille : définition des colonne
  627.         // $spreadSheet->createSheet();
  628.         $spreadSheet->setActiveSheetIndex(0);
  629.         //$spreadSheet->getActiveSheet()->setTitle('Définition des colonnes');
  630.         $itLigne 2;
  631.         $spreadSheet->getActiveSheet()->fromArray(
  632.             array_keys($infoColonnes[0]),  // The data to set
  633.             NULL,        // Array values with this value will not be set
  634.             'A1'         // Top left coordinate of the worksheet range where
  635.             //    we want to set these values (default is A1)
  636.         );
  637.         foreach ($infoColonnes as $ligneInfo) {
  638.             $spreadSheet->getActiveSheet()->fromArray(
  639.                 $ligneInfo,  // The data to set
  640.                 NULL,        // Array values with this value will not be set
  641.                 'A' $itLigne         // Top left coordinate of the worksheet range where
  642.                 //    we want to set these values (default is A1)
  643.             );
  644.             $itLigne++;
  645.         }
  646.         $spreadSheet->setActiveSheetIndex(0);
  647.         $writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadSheet);
  648.         $filePath "exportDonnees.xlsx";
  649.         $writer->save($filePath);
  650.         $response = new BinaryFileResponse($filePath);
  651.         //$response->headers->set('Content-Type', 'text/plain');
  652.         $response->setContentDisposition(
  653.             ResponseHeaderBag::DISPOSITION_ATTACHMENT,
  654.             $filePath
  655.         );
  656.         return $response;
  657.         //return $this->render('base.html.twig' );
  658.     }
  659.     /**
  660. +      * @Route("/acceuil_multi")
  661. +      */
  662.     public function acceuil_multi(): Response
  663.     {
  664.         return $this->render('multi_entree.html.twig', []);
  665.     }
  666.     /* page bidon pour exemple */
  667.     /**
  668. +      * @Route("/me_assainissement")
  669. +      */
  670.     public function me_assainissement(): Response
  671.     {
  672.         return $this->render('multi_entree.html.twig', []);
  673.     }
  674. }