<?php
// src/Controller/LuckyController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\DBAL\Driver\Connection;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Component\HttpFoundation\Request;
use App\Services\ExcelExtractor;
use App\Services\VariableCalculateur;
use App\Services\EvalEtatAELBExtractor;
use App\Services\IndicateurNbStationPompageActive;
use App\Entity\Variable;
use App\Entity\DonneesTableur;
use App\Entity\TableurDonnees;
use App\Entity\MasseEau;
use Symfony\Component\Config\Definition\Exception\Exception;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
use App\Services\RelationZonages;
use Symfony\Contracts\Cache\CacheInterface;
use Symfony\Component\Stopwatch\Stopwatch;
class FicheMECEController extends AbstractController
{
/**
* @Route("/false_logout")
*
*/
public function false_logout(): Response
{
return new Response(
' '
);
}
/**
+ *
@Route("/test_fichier", name="verif_colonne_fichier")
@IsGranted("ROLE_ADMIN")
+ */
public function testFichier(ManagerRegistry $doctrine, Request $request): Response
{
// parcours des fichiers
$colonneRepo = $doctrine->getRepository(DonneesTableur::class);
$tabDonneesTableur = array();
// $numME = 'FRGR0399' ;
$numME = 'FRFR21';
// tableau qui recap tout les coloens passé à twig
$tabColonne = array();
foreach ($doctrine->getRepository(TableurDonnees::class)->findAll() as $i => $fichier) {
// print_r($fichier);
if ($fichier->isFichierValide()) {
$tabDonneesTableur[$fichier->getNomCourt()] = array();
foreach ($colonneRepo->findBy(["fichier" => $fichier]) as $colonne) {
try {
$tabDonneesTableur[$fichier->getNomCourt()][$colonne->getLibelleFiche()] = $fichier->getValeurFromMEColonne($numME, $colonne);
} catch (Exception $e) {
// on s'en fout pour le moment ?
echo "erreur pour fichier " . $fichier->getNomCourt() . " feuille " . $colonne->getFeuille() . "" . $colonne->getLibelle() . " ";
//print_r($colonne);
}
//print_r($colonne);
echo $fichier->getValeurFromMEColonne($numME,$colonne);
}
} else {
echo "ficheir non trouvé";
}
// print_r($colonne);
}
// print_r($tabDonneesTableur);
return $this->render('base.html.twig');
}
/**
+ * @Route("/fiche")
+ */
public function detailFiche(
ManagerRegistry $doctrine,
Request $request,
ExcelExtractor $excelExtract,
VariableCalculateur $variableCalculateur,
Stopwatch $stopwatch,
EvalEtatAELBExtractor $evaletatAELBExtractor,
CacheInterface $cache,
IndicateurNbStationPompageActive $indicateurStation
): Response {
$numME = ($request->query->get('fiche'));
// if ($numME=='FRFRR338_2') $numME='FRFR338_2'; // corrige bug de cette MECE avec deux codes
/* CONTROLE pour eviter les injections */
$allMECE = $doctrine->getRepository(MasseEau::class)->findAll();
// print_r($allMECE);
$valeursAutorisees=array();
foreach ($allMECE as $MECE) {
// echo $MECE['codeSandre'];echo '<br>';
$va=$MECE->getCodeSandre();
// if ($va=='FRFRR338_2') $va='FRFR338_2';// corrige bug de cette MECE avec deux codes
$valeursAutorisees[]=$va;
// print_r($me);echo '<br>';
}
if (!in_array($numME, $valeursAutorisees, true)) {
// Redirection vers la route "accueil"
return $this->redirectToRoute('accueil_masse_eau');
}
/* LES FICHIERS bdd Fiche_mece_2023 */
$files=array('Identite'=>array('tableur'=>'fiche_mece_identite','feuille'=>"id MECE GI"),
'Hydrologie'=>array('tableur'=>'fiche_mece_hydrologie','feuille'=>"Donnees hydro"),
'MorphoConti'=>array('tableur'=>'fiche_mece_morpho_conti','feuille'=>"Donnees morph conti"),
'PollDiff'=>array('tableur'=>'fiche_mece_poll_diff','feuille'=>"Donnees poll diff"),
'MacroMicro'=>array('tableur'=>'fiche_mece_macro_micro','feuille'=>"Donnees macro micro"),
'EvaluationEtat'=>array('tableur'=>'fiche_mece_evaluation_etat','feuille'=>"Donnees hydro")
);
// 0- Poll diffuses et AEP > AEP > Captages/périmètre ----------------------------------------
// les valeurs du fichier de GL > 202000505_SDE_PAOT_CT.xls > onglte AEP
// Le traitement est realise en debut de route pour pallier au bug suivant :
// quand le cache est vidé, le fichier xls est mal lu (aucune feuille trouvée)
// probleme de memoire ???
$tabValExcelAEP = $excelExtract->extraitValeurAEP($numME);
$tabCaptages = array();
foreach ($tabValExcelAEP as $valeurAEP) {
$tabCaptages[] = array("nom" => $valeurAEP["Nom AAC"], "type" => $valeurAEP["AAC sup / AAC sout"], "priorite" => $valeurAEP["Type de priorité captage"]);
}
// 1- parcours des fichiers :
/*
bdd Fiche_mece_2023-id MECE GI.xlsx
bdd Fiche_mece_2023-Donnes hydro.xlsx
bdd Fiche_mece_2023-Donnees morph conti.xlsx
bdd Fiche_mece_2023-Donnees poll diff.xlsx
bdd Fiche_mece_2023-Donnees macro micro.xlsx
bdd Fiche_mece_2023-Donnees_etat.xlsx
Ces fichiers remplacent fin 2023 le fichier unique bdd_fiche_mece
*/
$colonneRepo = $doctrine->getRepository(DonneesTableur::class);
$tabEntete = array();
foreach ($files as $key => $file) {
$nom_donnees='donnees'.$key;
$nom_donnees_unique='donnees'.$key.'Unique';
$nomCourtFichier=$file['tableur'];
$feuille=$file['feuille'];
$fichier = $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => $nomCourtFichier]);
if ($fichier->isFichierValide()) {
$$nom_donnees[$nomCourtFichier] = array();
$tabEntete = $fichier->getEnteteFeuille($feuille);
foreach ($tabEntete as $nomColonne) {
$$nom_donnees[$nomCourtFichier][$nomColonne] = "NON_DISPO";
}
$cle_cache = $nomCourtFichier . "_" . $numME;
$itemCache = $cache->getItem($cle_cache);
$$nom_donnees_unique = array();
if ($itemCache->isHit()) {
$$nom_donnees[$nomCourtFichier] = $itemCache->get();
}
else {
foreach ($colonneRepo->findBy(["fichier" => $fichier]) as $colonne) {
try {
$$nom_donnees_unique[$colonne->getLibelleFiche()] = $fichier->getValeurFromMEColonne($numME, $colonne);
} catch (Exception $e) {
//
}
// $$nom_donnees[$nomCourtFichier] = $$nom_donnees_unique;
// $itemCache->set($$nom_donnees_unique);
// $isSaved = $cache->save($itemCache);
}
$$nom_donnees[$nomCourtFichier] = $$nom_donnees_unique;
$itemCache->set($$nom_donnees_unique);
$isSaved = $cache->save($itemCache);
}
$fichier->videMemoire();
} else {
echo "fichier non trouvé " . $fichier->getNomCourt() . " d";
}
}
// 1-1- parcours des explications et sources : ----------------------------
$sourcesInfos=array();
$cle_cache_explic_source="explic_source";
$itemCache = $cache->getItem($cle_cache_explic_source);
if ($itemCache->isHit()) {
$sourcesInfos = $itemCache->get();
} else {
// ON INITIALISE LE TABLEAU
foreach ($files as $key => $file) {
$nomCourtFichier=$file['tableur'];
$feuille=$file['feuille'];
$fichier = $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => $nomCourtFichier]);
if ($fichier->isFichierValide()) {
foreach ($colonneRepo->findBy(["fichier" => $fichier]) as $colonne) {
try {
$sourcesInfos[$colonne->getLibelleFiche()]["explication"] ='';
$sourcesInfos[$colonne->getLibelleFiche()]["source"] ='';
} catch (Exception $e) {
//
}
}
$fichier->videMemoire();
} else {
echo "fichier non trouvé " . $fichier->getNomCourt() . " d";
}
}
// ON REMPLIT LE TABLEAU
$tableurSource = $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => "back_office_fiches"]);
$infosChamp = $tableurSource->getValeurFeuille("fiche MECE");
foreach ($infosChamp as $infoChamp) {
if ( !empty($infoChamp["Colonne"]) AND (!empty($infoChamp["NIVEAU III"]) OR !empty($infoChamp["INFORMATION"]) ) ) {
$colonne=$infoChamp["Colonne"];//libelle
// if (!empty($colonne)) {
$champ = $doctrine->getRepository(DonneesTableur::class)->findOneBy(['libelle'=>$colonne]);
if (!empty($champ)) {
$libFiche = $champ->getLibelleFiche();
if ( !empty($infoChamp["Point I explication de la donnée"]) )
$sourcesInfos[$libFiche]["explication"]=$infoChamp["Point I explication de la donnée"];
$fichier = $champ->getFichier()->getChemin();
$feuille = $champ->getFeuille();
$cheminSource="SDE/".$fichier."/".$feuille."/".$colonne;
$sourcesInfos[$libFiche]["source"]=$cheminSource;
$itemCache->set($sourcesInfos);
$isSaved = $cache->save($itemCache);
}
// }
}
}
}
// if ($numME=='FRFR338_2') $numME='FRFRR338_2';// corrige bug de cette MECE avec deux codes
// 2- les variable calculées en sql ----------------------------------------
$tabContenuVariable = array();
$repository = $doctrine->getRepository(Variable::class);
$tabVariables = $repository->findAll();
//print_r($tabVariables);
foreach ($tabVariables as $variable) {
if ($variable->getType() == "sql" || $variable->getType() == "sql_id" || $variable->getType() == "sql_line") {
// DEV
// $tabContenuVariable[$variable->getSLug()] = $variableCalculateur->calculVariable($variable, $numME);
// CARE : en PROD, il faut :
$tabContenuVariable[$variable->getSLug()] = $variableCalculateur->getVariableCache($variable, $numME);
}
}
// if ($numME=='FRFRR338_2') $numME='FRFR338_2';// corrige bug de cette MECE avec deux codes
// print_r($tabContenuVariable);
// les PROGRAMMES DE MESURE ----------------------------------------
$stopwatch->start('calcul_pdm');
$cle_cache_pdm = "pdm_$numME";
$itemCache = $cache->getItem($cle_cache_pdm);
if ($itemCache->isHit()) {
$tabMesurePDMUnique = $itemCache->get();
}
else {
$excelExtract->chargeFichier("/../../src/data/pdm_mesures_pression_polldiff_sdage2022_travail.xls");
$tabValME_pdm_poll_diff = $excelExtract->extraitValeurMultiLigne($numME, 4);
$excelExtract->chargeFichier("/../../src/data/pdm_mesures_pression_ressources_sdage2022_travail.xls");
$tabValME_pdm_resources = $excelExtract->extraitValeurMultiLigne($numME, 4);
$excelExtract->chargeFichier("/../../src/data/pdm_mesures_pression_milieuaqua_sdage2022_travail.xls");
$tabValME_pdm_milieu_aqua = $excelExtract->extraitValeurMultiLigne($numME, 4);
// print_r($tabValME_pdm_milieu_aqua);
$excelExtract->chargeFichier("/../../src/data/pdm_mesures_pression_pollponct_sdage2022_travail.xls");
$tabValME_pdm_poll_ponct = $excelExtract->extraitValeurMultiLigne($numME, 4);
// on contruit un tableau simplifie sans doublon de mesure
$tabMesurePDMUnique = array();
foreach (array_merge($tabValME_pdm_poll_diff, $tabValME_pdm_resources, $tabValME_pdm_milieu_aqua, $tabValME_pdm_poll_ponct) as $infoPDM) {
if (!isset($tabMesurePDMUnique[$infoPDM["code_type_"]])) {
$tabMesurePDMUnique[$infoPDM["code_type_"]] = array(
'pression_c' => $infoPDM["pression_c"],
'code_type_' => $infoPDM["code_type_"],
'nom_type_m' => $infoPDM["nom_type_m"]
);
}
}
$itemCache->set($tabMesurePDMUnique);
$isSaved = $cache->save($itemCache);
}
$stopwatch->stop('calcul_pdm');
// Evaluation de l'ETAT ----------------------------------------
// Etat_Ecologique_cours_d_eau_pluriannuel_COMPLET_2019_pourARBNA.XLSX
$nomCourtFichier = 'etat_ecologique';
$tableurEtatEcologique = $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => $nomCourtFichier]);
$periodes=array("2010-2011","2011-2012-2013","2015-2016-2017");
$cle_cache = $nomCourtFichier . "_" . $numME;
$itemCache = $cache->getItem($cle_cache);
if ($itemCache->isHit()) {
$donneesEtatEcologique = $itemCache->get();
}
else {
$donneesEtatEcologique = $tableurEtatEcologique->getValeurFeuilleEEc("Etat Cours d'eau",$numME,$periodes);
// print_r($donneesEtatEcologique);
$itemCache->set($donneesEtatEcologique);
$isSaved = $cache->save($itemCache);
}
$stationRetenue = null;
if ( !empty($donneesEtatEcologique["2015-2016-2017"]["Station retenue"]) ) {
$stationRetenue = '0' . $donneesEtatEcologique["2015-2016-2017"]["Station retenue"];
if ( strlen($stationRetenue) == 7 ) $stationRetenue = '0' . $stationRetenue;
}
// Stations de pompage ----------------------------------------
// nb Station Riviere Active par ME.xlsx Données autres May 17, 2022
// ici on doit utiliser la version FRFRR338_2
// if ($numME=='FRFRR338_2') $numME='FRFR338_2';
// if ($numME=='FRFR338_2') $numME='FRFRR338_2';
$nbStationPompageActive = $indicateurStation ->getNbStationPompage($doctrine->getRepository(MasseEau::class)->findOneBy(array("codeSandre"=>$numME)));
// if ($numME=='FRFRR338_2') $numME='FRFR338_2';
// liste des SA associé ----------------------------------------
// 2025
// Pour Partie Rejets des collectivités et industriels
$tableurInventaireSAme = $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => "fiche_assainissement"]);
$tabSystemesAssainissement=array();
$cle_cache_sa_me = "sa_inventaire_me_$numME";
$itemCache = $cache->getItem($cle_cache_sa_me);
if ($itemCache->isHit()) {
$tabSystemesAssainissement = $itemCache->get();
} else {
// fix BUG CASSE 20250526 :
// par exemple FRGR0392A devient FRGR0392a
// pour utilisation dans fiche_assainissement (bdd_fichesassainissement.xlsx) > base_STEP
// fichier dans sa version du 22/01/2025
// CARE le changemenent de casse n'aura peut être pas de sens dans une nouvelle version du fichier
$numMEass=strtolower($numME);
$numMEass=str_replace('frgr', 'FRGR', $numMEass);
// $tabSystemesAssainissement = $tableurInventaireSAme->getValeurFeuilleFiltree("base_STEP", ["Code masse d'eau" => $numME]);
$tabSystemesAssainissement = $tableurInventaireSAme->getValeurFeuilleFiltree("base_STEP", ["Code masse d'eau" => $numMEass]);
$itemCache->set($tabSystemesAssainissement);
$isSaved = $cache->save($itemCache);
}
$nbSATotal = 0;
$nbSAPrioritaire = 0;
if (!empty($tabSystemesAssainissement)) {
foreach ($tabSystemesAssainissement as $infoSA) {
$nbSATotal++;
if (intval($infoSA['Priorités SDE']) > 0) {
$nbSAPrioritaire++;
}
}
}
// ZH
$tableurInventaureZHme = $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => "BDD_Inventaire_ZH_ME"]);
$dataZHme=array();
$strZHme='';
$cle_cache_zh_me = "zh_inventaire_me_$numME";
$itemCache = $cache->getItem($cle_cache_zh_me);
if ($itemCache->isHit()) {
$dataZHme = $itemCache->get();
} else {
$donneesZHme = $tableurInventaureZHme->getValeurFeuilleFiltree("Inventaire_BV", ["Code_ME_new" => $numME]);
$tabCodeInseeME = array_map(function ($valeur) {
return $valeur["code_insee"];
}, $tabContenuVariable['insee_86']);
foreach ($donneesZHme as $infoME) {
$strZHme .= "<tr><td>".$infoME["ETAT"]."</td>".
"<td>".$infoME["DATE"]."</td>".
"<td>".$infoME["OPERATEUR"]."</td>".
"<td>".$infoME["zonage inventaire terrain"]."</td>".
"</tr>";
}
$dataZHme["inventaireMEZH"]=$strZHme;
$itemCache->set($dataZHme);
$isSaved = $cache->save($itemCache);
}
$tableurInventaureZHcom = $doctrine->getRepository(TableurDonnees::class)->findOneBy(['nom_court' => "BDD_Inventaire_ZH_Communes"]);
$dataZHcomm=array();
$etatInvZHCommME=array();
$strZHCommunesME='';
$cle_cache_zh_comm = "zh_inventaire_comm_$numME";
$itemCache = $cache->getItem($cle_cache_zh_comm);
if ($itemCache->isHit()) {
$dataZHcomm = $itemCache->get();
} else {
$donneesZHCommME = $tableurInventaureZHcom->getValeurFeuille("Inventaire_communes");
$tabCodeInseeME = array_map(function ($valeur) {
return $valeur["code_insee"];
}, $tabContenuVariable['insee_86']);
foreach ($donneesZHCommME as $infoCommune) {
if (in_array($infoCommune["INSEE"], $tabCodeInseeME)) {
$strZHCommunesME .= "<tr><td>".$infoCommune["COMMUNE"]."</td>".
"<td>". $infoCommune["ETAT"]."</td>".
"<td>".$infoCommune["DATE"]."</td>".
"<td>".$infoCommune["OPERATEUR"]."</td>".
"<td>".$infoCommune["zonage inventaire terrain"]."</td>".
"</tr>";
$etatInvZHCommME[$infoCommune["INSEE"]]=array(trim($infoCommune["ETAT"]));
}
}
$dataZHcomm["dataCommunauxZH"]=$etatInvZHCommME;
$dataZHcomm["inventaireCommunauxZH"]=$strZHCommunesME;
$itemCache->set($dataZHcomm);
$isSaved = $cache->save($itemCache);
}
// ----------------------------------------
$tabParamTwig = array_merge($tabContenuVariable, [
'numME' => $numME,
"code_ME" => $numME,
// nouveau en 2024
"sourcesInfos" => $sourcesInfos,
// nouveau en 2023
"donneesIdentite" => $donneesIdentite,
"donneesHydrologie" => $donneesHydrologie,
"donneesMorphoConti" => $donneesMorphoConti,
"donneesPollDiff" => $donneesPollDiff,
"donneesMacroMicro" => $donneesMacroMicro,
"donneesEvaluationEtat" => $donneesEvaluationEtat,
// on doit conserver :
"donneesEtatEcologique" => $donneesEtatEcologique,
// Etat_Ecologique_cours_d_eau_pluriannuel_COMPLET_2019_pourARBNA.XLSX
"tabCaptages" => $tabCaptages,
//202000505_SDE_PAOT_CT.xls
'pdm_unifie' => $tabMesurePDMUnique,
'nbStationPompageRiviere' => $nbStationPompageActive ,
// Rejets des collectivités et industriels :
"tab_systemes_assainissement" => $tabSystemesAssainissement,
"nbSAPrioritaire" => $nbSAPrioritaire,
"nbSATotal" => $nbSATotal,
// A voir :
'stationRetenue' => $stationRetenue,
// 2024 ZH
"dataZHcomm" => $dataZHcomm,
"dataZHme" => $dataZHme,
]);
return $this->render('fiche.html.twig', $tabParamTwig);
}
/**
+ * @Route("/",name="accueil_masse_eau" )
+ */
public function home(ManagerRegistry $doctrine,
// ExcelExtractor $excelExtract,
// VariableCalculateur $variableCalculateur,
// EvalEtatAELBExtractor $evaletatAELBExtractor,
CacheInterface $cache
): Response
{
$allMECE = $doctrine->getRepository(MasseEau::class)->findAll();
// // print_r($allMECE);
// print_r($allMECE);
/*
$connection = $this->getDoctrine()->getConnection('pg_data');
//print_r($connection);
$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 ");
$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 ");
// print_r($result);
*/
$projDir = $this->getParameter('kernel.project_dir');
$chemin_json_bassin = "$projDir/public/json/contour_mece_ok.json";
if (! is_file($chemin_json_bassin)) {
$json = $doctrine->getRepository(MasseEau::class)->getAllBassinAsJson();
file_put_contents($chemin_json_bassin,$json);
}
/*
foreach ($allMECE as $MECE) {
// echo $MECE['codeSandre'];echo '<br>';
$numME=$MECE->getCodeSandre();
echo $MECE->getCodeSandre();
print_r($MECE);echo '<br>';
}
*/
$chemin_json_bassin = "$projDir/public/json/contour_mece_cible.json";
if (! is_file($chemin_json_bassin)) {
$cible=array();
foreach ($allMECE as $MECE) {
// echo $MECE['codeSandre'];echo '<br>';
$numME=$MECE->getCodeSandre();
echo $MECE->getCodeSandre();
print_r($MECE);echo '<br>';
// $numME = 'FRGR1871';
$nomCourtFichier ='bdd_fiche_mece';
$cle_cache = $nomCourtFichier . "_" . $numME;
// cache par fichier
$itemCache = $cache->getItem($cle_cache);
$tabDonneesTableur = array();
// $tabDonneTableurUnique = array();
if ($itemCache->isHit()) {
// echo "cache $cle_cache trouve ";echo '<br>';
//$tabChamp= $itemCache->get();
$tabDonneesTableur[$nomCourtFichier] = $itemCache->get();
$cible[$numME]=$tabDonneesTableur['bdd_fiche_mece']['priorités SDE gestion intégrée (actualisation 2022)'];
}
else {
// echo "PAScache $cle_cache NON trouve ";echo '<br>';
$colonneRepo = $doctrine->getRepository(DonneesTableur::class);
// RECUP DES VALEURS DE BDD FICHE MECE / Données ----------------------------------------
$fichier = $doctrine->getRepository(TableurDonnees::class)->findBy(['nom_court' => $nomCourtFichier])[0];
$tabEntete = array();
if ($fichier->isFichierValide()) {
$nomCourtFichier = $fichier->getNomCourt();
$tabDonneesTableur[$nomCourtFichier] = array();
$tabEntete = $fichier->getEnteteFeuille("Données");
foreach ($tabEntete as $nomColonne) {
$tabDonneesTableur[$nomCourtFichier][$nomColonne] = "NON_DISPO";
}
// $itemCache = $cache->getItem($cle_cache);
$tabDonneTableurUnique = array();
// if ( $cache->hasItem($cle_cache) ) {
// else {
//$tabChamp= $this->getInfoStep($numSA) ;
// echo "cache $cle_cache NON trouve ";echo '<br>';
foreach ($colonneRepo->findBy(["fichier" => $fichier]) as $colonne) {
if ($colonne->getLibelleFiche()=='priorités SDE gestion intégrée (actualisation 2022)') {
try {
$tabDonneTableurUnique[$colonne->getLibelleFiche()] = $fichier->getValeurFromMEColonne($numME, $colonne);
} catch (Exception $e) {
// on s'en fout pour le moment ?
}
// $tabDonneesTableur[$nomCourtFichier] = $tabDonneTableurUnique;
// $cible[$numME]=$tabDonneesTableur[$nomCourtFichier]['priorités SDE gestion intégrée (actualisation 2022)'];
$cible[$numME]=$tabDonneTableurUnique[$colonne->getLibelleFiche()];
// $itemCache->set($tabDonneTableurUnique);
// $isSaved = $cache->save($itemCache);
}
}
// }
$fichier->videMemoire();
} else {
echo "ficheir non trouvé " . $fichier->getNomCourt() . " d";
}
// echo $numME. " : ".$cible[$numME];echo '<br>';
}
}
// print_r($cible);
$json = $doctrine->getRepository(MasseEau::class)->getAllBassinCibleAsJson($cible);
file_put_contents($chemin_json_bassin,$json);
}
$chemin_json_trace= "$projDir/public/json/trace_mece_ok.json";
if (! is_file($chemin_json_trace)) {
$json = $doctrine->getRepository(MasseEau::class)->getAllTraceAsJson();
file_put_contents($chemin_json_trace,$json);
}
return $this->render('accueil.html.twig', [
// this array defines the variables passed to the template,
// where the key is the variable name and the value is the variable value
// (Twig recommends using snake_case variable names: 'foo_bar' instead of 'fooBar')
'mece' => $allMECE,
]);
}
/**
+ * @Route("/export", name="genere_fichier_compil" )
+ */
public function exportDonnes(): Response
{
/* manque
FRFR338_2
FRGR0393a
*/
// parcours des fichiers
$colonneRepo = $this->getDoctrine()->getRepository(DonneesTableur::class);
$tabDonneesTableur = array();
$connection = $this->getDoctrine()->getConnection('pg_data');
//print_r($connection);
$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 ");
foreach ($result as $info) {
$codeME = $info["cdeumassed"];
$tabCodeME[] = $codeME;
}
// $tabCodeME = array();
// probleme pour mece AEAG : les colone ne sont pas les meme
$infoColonnes = array();
foreach ($this->getDoctrine()->getRepository(TableurDonnees::class)->findAll() as $i => $fichier) {
//print_r($fichier);
if ($fichier->isFichierValide()) {
$tabDonneesTableur[$codeME][$fichier->getNomCourt()] = array();
foreach ($colonneRepo->findBy(["fichier" => $fichier]) as $colonne) {
if ($colonne->getInactive() === false || $colonne->getInactive() === null) {
$infoColonnes[] = [
"Nom" => $colonne->getLibelleFiche(),
"Fichier Source " => $fichier->getChemin(),
"Feuille Fichier Source" => $colonne->getFeuille(),
"Colonne Fichier Source" => $colonne->getLibelle()
];
try {
//$tabDonneesTableur[ $codeME ][$fichier->getNomCourt()][$colonne->getLibelleFiche()] =
$tabTMP = $fichier->getValeurFromMEColonneMultiME($tabCodeME, $colonne);
foreach ($tabTMP as $codeME => $tabValeur) {
$tabDonneesTableur[$codeME][$fichier->getNomCourt()][$colonne->getLibelleFiche()] = $tabValeur;
}
} catch (Exception $e) {
// on s'en fout pour le moment ?
}
}
//print_r($colonne);
//echo $fichier->getValeurFromMEColonne($numME,$colonne);
}
$fichier->videMemoire();
} else {
echo "ficheir non trouvé";
}
// print_r($colonne);
}
//print_r($tabDonneesTableur);
$entete = array();
$nomFichiers = array_keys(reset($tabDonneesTableur));
//$nomFichiers = array_keys( ($tabDonneesTableur["FRGR0393A"]));
$nbColonne = 0;
foreach ($nomFichiers as $nomFichier) {
//echo "$nomFichier ";
// reset prend la pemire me arbitriarement
//print_r(array_keys(reset($tabDonneesTableur)[$nomFichier]));
$entete = array_merge($entete, array_keys(reset($tabDonneesTableur)[$nomFichier]));
// modif cursom
//$entete = array_merge($entete,array_keys($tabDonneesTableur["FRGR0393A"][$nomFichier]));
$nbColonne += count(array_keys(reset($tabDonneesTableur)[$nomFichier]));
}
if ($nbColonne != count($entete)) {
throw new Exception("pas le meme nomre de coloon e $nbColonne " . count($entete));
}
//print_r($entete);
// echo $nbColonne;
// print_r(reset($tabDonneesTableur));
$itLigne = 2;
$spreadSheet = new Spreadsheet();
$spreadSheet->createSheet();
$spreadSheet->setActiveSheetIndex(0);
$spreadSheet->getActiveSheet()->setTitle('A Lire Définition des colonnes');
$spreadSheet->setActiveSheetIndex(1);
$spreadSheet->getActiveSheet()->setTitle('Données');
$spreadSheet->getActiveSheet()->fromArray(
array_merge(array("Code"), $entete), // The data to set
NULL, // Array values with this value will not be set
'A1' // Top left coordinate of the worksheet range where
// we want to set these values (default is A1)
);
foreach ($tabDonneesTableur as $codeME => $donneesME) {
$tabNouvelleLigne = array($codeME);
foreach ($donneesME as $nomFichie => $tabValeur) {
$tabNouvelleLigne = array_merge($tabNouvelleLigne, $tabValeur);
}
$spreadSheet->getActiveSheet()->fromArray(
$tabNouvelleLigne, // The data to set
NULL, // Array values with this value will not be set
'A' . $itLigne // Top left coordinate of the worksheet range where
// we want to set these values (default is A1)
);
$itLigne++;
}
// nouvelle feuille : définition des colonne
// $spreadSheet->createSheet();
$spreadSheet->setActiveSheetIndex(0);
//$spreadSheet->getActiveSheet()->setTitle('Définition des colonnes');
$itLigne = 2;
$spreadSheet->getActiveSheet()->fromArray(
array_keys($infoColonnes[0]), // The data to set
NULL, // Array values with this value will not be set
'A1' // Top left coordinate of the worksheet range where
// we want to set these values (default is A1)
);
foreach ($infoColonnes as $ligneInfo) {
$spreadSheet->getActiveSheet()->fromArray(
$ligneInfo, // The data to set
NULL, // Array values with this value will not be set
'A' . $itLigne // Top left coordinate of the worksheet range where
// we want to set these values (default is A1)
);
$itLigne++;
}
$spreadSheet->setActiveSheetIndex(0);
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadSheet);
$filePath = "exportDonnees.xlsx";
$writer->save($filePath);
$response = new BinaryFileResponse($filePath);
//$response->headers->set('Content-Type', 'text/plain');
$response->setContentDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
$filePath
);
return $response;
//return $this->render('base.html.twig' );
}
/**
+ * @Route("/acceuil_multi")
+ */
public function acceuil_multi(): Response
{
return $this->render('multi_entree.html.twig', []);
}
/* page bidon pour exemple */
/**
+ * @Route("/me_assainissement")
+ */
public function me_assainissement(): Response
{
return $this->render('multi_entree.html.twig', []);
}
}