<?php
namespace App\Controller\Api\InterventionPlace;
use App\Dto\InterventionPlace;
use App\Dto\InterventionPlaceKpi;
use App\Service\HierarchyService;
use App\Repository\UserRepository;
use App\Repository\CityGeolocRepository;
use App\Repository\NmdAdresseRepository;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use App\Port\NmdAdressePort;
use Symfony\Component\HttpFoundation\Response;
class InterventionPlaceHierarchyController extends AbstractController
{
private NmdAdressePort $adresseRepository;
private $cityGeolocRepository;
private $entityManager;
private $userRepository;
public function __construct(
NmdAdressePort $adresseRepository,
CityGeolocRepository $cityGeolocRepository,
EntityManagerInterface $entityManager,
UserRepository $userRepository
) {
$this->adresseRepository = $adresseRepository;
$this->cityGeolocRepository = $cityGeolocRepository;
$this->entityManager = $entityManager;
$this->userRepository = $userRepository;
}
public function __invoke(int $cpv, Request $request): JsonResponse
{
$codeCluster = $request->query->get('codeCluster', null);
$codeInsee = $request->query->get('codeInsee', null);
$page = $request->query->get('page', 1);
$fttb = $request->query->get('fttb');
$adsl = $request->query->get('adsl');
$mobMono = $request->query->get('mobMono');
$mobMultiThd = $request->query->get('mobMultiThd');
$mobMultiAdsl = $request->query->get('mobMultiAdsl');
$thd = $request->query->get('thd');
$limit = 25;
$result = $this->adresseRepository->getInterventionPlaceKpiByStreet(
$cpv,
$codeCluster,
$codeInsee,
$page,
$limit,
$fttb,
$adsl,
$mobMono,
$mobMultiThd,
$mobMultiAdsl,
$thd
);
if (empty($result)) {
return new JsonResponse(
[],
200
);
}
$parameters = [
'cpv' => $cpv,
'code_cluster' => null
];
$finalResult = $this->generateResult($result, $parameters);
if ($codeCluster != null) {
$parameters = [
'code_cluster' => $codeCluster,
'cod_insee' => null
];
$finalResult = $this->generateResult($result, $parameters);
}
if ($codeInsee != null) {
$parameters = [
'cod_insee' => $codeInsee,
'nom_voie' => null
];
$finalResult = $this->generateResult($result, $parameters);
}
return new JsonResponse($finalResult, 200);
}
/**
* @Route("/api/interventions-places-details", name="api_get_interventions_places_details", methods={"GET"})
*/
public function getInterventionPlacesDetails(Request $request): Response
{
$cpv = $request->query->get('cpv', null);
$codeCluster = $request->query->get('codeCluster', null);
$codeInsee = $request->query->get('codeInsee', null);
$page = $request->query->get('page', 1);
$fttb = $request->query->get('fttb','no');
$adsl = $request->query->get('adsl','no');
$mobMono = $request->query->get('mobMono','no');
$mobMultiThd = $request->query->get('mobMultiThd','no');
$mobMultiAdsl = $request->query->get('mobMultiAdsl','no');
$thd = $request->query->get('thd','no');
$exportCsv = (int) $request->query->get('exportCsv', 0);
$result = $this->adresseRepository->getInterventionPlaceDetails(
$cpv,
$codeCluster,
$codeInsee,
$fttb,
$adsl,
$mobMono,
$mobMultiThd,
$mobMultiAdsl,
$thd
);
if (empty($result)) {
return new JsonResponse([], 200);
}
// Si on demande un CSV → téléchargement
if ($exportCsv === 1) {
// Création du flux CSV
$handle = fopen('php://temp', 'r+');
// Ajout de l'en-tête
fputcsv($handle, array_keys($result[0]), ';');
// Ajout des données
foreach ($result as $row) {
fputcsv($handle, $row, ';');
}
rewind($handle);
$content = stream_get_contents($handle);
fclose($handle);
// Réponse CSV → téléchargement
return new Response(
$content,
200,
[
'Content-Type' => 'text/csv; charset=utf-8',
'Content-Disposition' => 'attachment; filename="prises_parc_details.csv"',
]
);
}
// Sinon JSON normal
return new JsonResponse($result, 200);
}
public function generateResult($result, $parameters)
{
// Extraire les clés primaires et secondaires directement
$primaryKey = key($parameters);
$secondaryKey = key(array_slice($parameters, 1, 1, true)); // Récupérer la 2ème clé
// Structure de base pour le résultat final
$finalResult = [
$primaryKey => $parameters[$primaryKey],
$secondaryKey => []
];
// Champs supplémentaires basés sur les clés primaires
$additionalFields = [
'cpv' => [],
'code_cluster' => ['ville'],
'cod_insee' => ['ville', 'nom_voie']
];
// Parcourir chaque ligne du résultat
foreach ($result as $row) {
$data = [
"nb_fyr_fttb" => (int)$row["nb_fyr_fttb"],
"nb_fyr_adsl" => (int)$row["nb_fyr_adsl"],
"nb_fyr_mob_mono" => (int)$row["nb_fyr_mob_mono"],
"nb_fyr_mob_multi_thd" => (int)$row["nb_fyr_mob_multi_thd"],
"nb_fyr_mob_multi_adsl" => (int)$row["nb_fyr_mob_multi_adsl"],
"nb_fyr_thd" => (int)$row["nb_fyr_thd"]
];
// Ajouter les champs spécifiques selon la clé primaire
if (isset($additionalFields[$primaryKey])) {
foreach ($additionalFields[$primaryKey] as $field) {
$data[$field] = $row[$field];
}
}
// Si la clé primaire est 'code_cluster', ajouter lbl_cluster à la structure
if ($primaryKey === 'code_cluster') {
$lblCluster = $row["lbl_cluster"]; // Récupérer la valeur de lbl_cluster
$secondaryValue = $row[$secondaryKey];
// Récupérer le polygon pour ce cod_insee (valeur secondaire)
$polygon = $this->getPolygonsByCodeInsee($secondaryValue);
$formattedPolygon = null;
if ($polygon) {
// Décoder la chaîne JSON échappée
$polygonDecoded = json_decode($polygon, true);
// Vérifier si le décodage a réussi
if (json_last_error() === JSON_ERROR_NONE) {
// Extraire 'type' et 'coordinates'
$polygonType = $polygonDecoded['type'] ?? null;
$polygonCoordinates = $polygonDecoded['coordinates'] ?? null;
// Réécrire proprement les données (ici, nous nous concentrons sur 'type' et 'coordinates')
$formattedPolygon = [
'type' => $polygonType,
'coordinates' => $polygonCoordinates
];
}
}
// Ajouter les autres données sous la clé secondaire
$finalResult[$secondaryKey][] = [
$secondaryValue => [
"data" => $data,
"polygon" => $formattedPolygon // Ajouter le polygon formaté
]
];
// Réorganiser lbl_cluster à la deuxième position dans la structure
$finalResult = $this->reorderResult($finalResult, $lblCluster);
} else {
// Par défaut, lbl_cluster reste dans 'data'
$data["lbl_cluster"] = $row["lbl_cluster"];
$finalResult[$secondaryKey][] = [
$row[$secondaryKey] => ["data" => $data]
];
}
}
return $finalResult;
}
// Fonction pour réorganiser lbl_cluster à la 2ème position
private function reorderResult($finalResult, $lblCluster)
{
// Réorganiser lbl_cluster à la 2ème position
$temp = [
'code_cluster' => $finalResult['code_cluster'], // Conserver la clé primaire
'lbl_cluster' => $lblCluster, // Ajouter lbl_cluster à la 2ème position
'cod_insee' => $finalResult['cod_insee'], // Conserver le reste des éléments
];
return $temp;
}
/**
* @Route("/api/interventions-places-kpi-json/{cpv}/{codeCluster}", name="api_get_clusters_details_by_cpv_and_code_cluster", methods={"GET"})
*/
public function getInterventionPlaceKpiFromJson(int $cpv, string $codeCluster, KernelInterface $kernel, Request $request): JsonResponse
{
$codeInsee = null;
if ($request->query->get('codeInsee') != null) {
$codeInsee = $request->query->get('codeInsee');
}
$baseDir = $kernel->getProjectDir() . "/fileAttached/prisesParcJson/{$cpv}/";
if ($codeInsee !== null) {
$filePath = "$baseDir/migrableKpiByStreet/{$codeCluster}/{$codeInsee}.json";
} else {
$filePath = "$baseDir/migrableKpiByCodeInsee/{$codeCluster}.json";
}
if (!file_exists($filePath)) {
return new JsonResponse(['error' => 'Fichier non trouvé'], 404);
}
$jsonData = json_decode(file_get_contents($filePath), true);
if ($jsonData === null) {
return new JsonResponse(['error' => 'Erreur de lecture du JSON'], 500);
}
return new JsonResponse($jsonData, 200);
}
private function getPolygonsByCodeInsee($codeInsee)
{
$geoCity = $this->cityGeolocRepository->findOneBy(['codeInsee' => $codeInsee]);
return $geoCity->getPolygon() ?? null;
}
/**
* @Route("/api/interventions-places-hierarchy/{cpv}/{userId}", name="api_get_intervention_places_hierarchy_from_json", methods={"GET"})
*/
public function getInterventionPlaceHierarchyFromJson(
int $cpv,
$userId,
KernelInterface $kernel,
Request $request,
HierarchyService $hierarchyService,
UserRepository $userRepository
): JsonResponse {
$userId = $request->query->get('userId', $userId);
$codeCluster = $request->query->get('codeCluster', null);
$codeInsee = $request->query->get('codeInsee', null);
$user = $userRepository->findOneBy(['id' => $userId]);
if (!$user) {
return new JsonResponse(['error' => 'Utilisateur non trouvé'], 404);
}
$projectDir = $kernel->getProjectDir();
$baseDir = "$projectDir/fileAttached/geo_map/prises_parc/{$cpv}";
$jsonData = $this->loadHierarchyData($user, $userId, $baseDir, $hierarchyService);
if (empty($jsonData)) {
return new JsonResponse(['error' => 'Fichier non trouvé ou vide'], 404);
}
#Filtres
if ($codeCluster) {
$cluster = array_filter($jsonData, function ($c) use ($codeCluster) {
if ($c['clusterCode'] == $codeCluster) {
return $c;
}
});
if (empty($cluster)) {
return new JsonResponse([], 200);
}
if ($codeInsee) {
$ville = array_filter(array_values($cluster)[0]['villes'], function ($v) use ($codeInsee) {
if ($v['cod_insee'] == $codeInsee) {
return $v;
}
});
if (empty($ville)) {
return new JsonResponse([], 200);
}
return new JsonResponse(array_values($ville), 200);
}
return new JsonResponse(array_values($cluster)[0], 200);
}
return new JsonResponse($jsonData, 200);
}
/**
* Charge les données hiérarchiques (fusionnées ou non selon le rôle)
*/
private function loadHierarchyData($user, int $userId, string $baseDir, HierarchyService $hierarchyService): array
{
if (in_array('ROLE_MANAGER', $user->getRoles()) || in_array('ROLE_DIRECTOR', $user->getRoles())) {
return $this->loadAndMergeDistributedFiles($userId, $baseDir, $hierarchyService);
}
$filePath = "{$baseDir}/hiearchy_prises_parc_cluster_ville.json";
if (!file_exists($filePath)) {
return [];
}
$jsonData = json_decode(file_get_contents($filePath), true);
return is_array($jsonData) ? $jsonData : [];
}
/**
* Fusionne les fichiers distribués des utilisateurs hiérarchiques
*/
private function loadAndMergeDistributedFiles(int $userId, string $baseDir, HierarchyService $hierarchyService): array
{
$mergedData = [];
$userIds = array_merge(
[$userId],
array_map(fn($p) => (int) $p['id'], $hierarchyService->getHierarchyDescendante($userId))
);
foreach ($userIds as $uid) {
$filePath = "{$baseDir}/distributed_by_user/{$uid}/distributed_hierarchy_cluster_city.json";
if (!file_exists($filePath)) {
continue;
}
$data = json_decode(file_get_contents($filePath), true);
if (!is_array($data)) {
continue;
}
foreach ($data as $cluster) {
$clusterKey = $cluster['clusterCode'];
if (!isset($mergedData[$clusterKey])) {
$mergedData[$clusterKey] = $cluster;
} else {
$mergedData[$clusterKey]['total_prises'] += $cluster['total_prises'];
foreach ($cluster['villes'] as $ville) {
$insee = $ville['cod_insee'];
$villeExistante = false;
foreach ($mergedData[$clusterKey]['villes'] as &$v) {
if ($v['cod_insee'] === $insee) {
$v['total_prises'] += $ville['total_prises'];
$villeExistante = true;
break;
}
}
if (!$villeExistante) {
$mergedData[$clusterKey]['villes'][] = $ville;
}
}
}
}
}
return array_values($mergedData);
}
/**
* @Route("/api/interventions-places-streets/{cpv}/{codeCluster}/{codeInsee}", name="api_get_intervention_places_voies_from_json", methods={"GET"})
*/
public function getInterventionPlaceVoiesFromJson(
int $cpv,
string $codeCluster,
$codeInsee,
KernelInterface $kernel,
HierarchyService $hierarchyService,
UserRepository $userRepository,
Request $request
): JsonResponse {
$userId = $request->query->get('userId', null);
$user = null;
if ($userId) {
$user = $userRepository->findOneBy(['id' => $userId]);
if (!$user) {
return new JsonResponse(['error' => 'Utilisateur non trouvé'], 404);
}
}
$projectDir = $kernel->getProjectDir();
$baseDir = "$projectDir/fileAttached/geo_map/prises_parc/{$cpv}";
$jsonData = $this->loadVoiesData($user, $userId, $baseDir, $codeCluster, $codeInsee, $hierarchyService);
if (empty($jsonData)) {
return new JsonResponse(['error' => 'Fichier non trouvé ou vide'], 404);
}
return new JsonResponse($jsonData, 200);
}
/**
* Retourne les données de voies en les fusionnant si nécessaire
*/
private function loadVoiesData($user, $userId, string $baseDir, string $codeCluster, string $codeInsee, HierarchyService $hierarchyService): array
{
$merged = [];
if ($user) {
if (in_array('ROLE_MANAGER', $user->getRoles()) || in_array('ROLE_DIRECTOR', $user->getRoles())) {
$userIds = array_merge(
[$userId],
array_map(fn($u) => (int) $u['id'], $hierarchyService->getHierarchyDescendante($userId))
);
foreach ($userIds as $uid) {
$filePath = "{$baseDir}/distributed_by_user/voies/{$uid}/{$codeCluster}/{$codeInsee}/liste_voies.json";
if (!file_exists($filePath)) {
continue;
}
$data = json_decode(file_get_contents($filePath), true);
if (!is_array($data)) {
continue;
}
$merged = $this->mergeVoiesData($merged, $data);
}
return array_values($merged); // Réindexé
}
}
$filePath = "{$baseDir}/voies/{$codeCluster}/{$codeInsee}/liste_voies.json";
if (!file_exists($filePath)) {
return [];
}
$jsonData = json_decode(file_get_contents($filePath), true);
return is_array($jsonData) ? $jsonData : [];
}
/**
* Fusionne plusieurs tableaux de voies selon `nom_voie + code_iris`
*/
private function mergeVoiesData(array $merged, array $data): array
{
foreach ($data as $voie) {
$key = $voie['nom_voie'] . '|' . $voie['code_iris'];
if (!isset($merged[$key])) {
$merged[$key] = $voie;
} else {
$merged[$key]['total_prises'] += $voie['total_prises'];
// Fusionner les numéros de voie (data)
$existingNums = array_column($merged[$key]['data'], 'numr_voie');
foreach ($voie['data'] as $num) {
if (!in_array($num['numr_voie'], $existingNums)) {
$merged[$key]['data'][] = $num;
}
}
}
}
return $merged;
}
/**
* @Route("/api/interventions-places-hierarchy-migrable/{cpv}", name="api_get_intervention_places_hierarchy_migrable_from_json", methods={"GET"})
*/
public function getInterventionPlaceHierarchyMigrableFromJson(int $cpv, KernelInterface $kernel, Request $request): JsonResponse
{
$userId = $request->query->get('userId', null);
$codeCluster = $request->query->get('codeCluster', null);
$codeInsee = $request->query->get('codeInsee', null);
if ($userId) {
$filePath = $kernel->getProjectDir() . "/fileAttached/geo_map/prises_parc/{$cpv}/{$userId}/migrables/hiearchy_prises_parc_cluster_ville_migrable.json";
}
$filePath = $kernel->getProjectDir() . "/fileAttached/geo_map/prises_parc/{$cpv}/migrables/hiearchy_prises_parc_cluster_ville_migrable.json";
if (!file_exists($filePath)) {
return new JsonResponse(['error' => 'Fichier non trouvé'], 404);
}
// Lire et décoder le fichier JSON
$jsonData = json_decode(file_get_contents($filePath), true);
if ($jsonData === null) {
return new JsonResponse(['error' => 'Erreur de lecture du JSON'], 404);
}
// Si codeCluster est fourni, rechercher le cluster correspondant
if ($codeCluster) {
$cluster = array_filter($jsonData, function ($c) use ($codeCluster) {
return $c['clusterCode'] === $codeCluster;
});
if (empty($cluster)) {
return new JsonResponse([], 200);
}
// Si codeInsee est fourni, rechercher la ville correspondante
if ($codeInsee) {
$ville = array_filter(array_values($cluster)[0]['villes'], function ($v) use ($codeInsee) {
return $v['cod_insee'] == $codeInsee;
});
if (empty($ville)) {
return new JsonResponse([], 200);
}
// Retourner seulement l’objet, pas un tableau avec un index
return new JsonResponse(array_values($ville)[0], 200);
}
return new JsonResponse(array_values($cluster)[0], 200);
}
return new JsonResponse($jsonData, 200);
}
/**
* @Route("/api/interventions-places-streets-migrable/{cpv}/{codeCluster}/{codeInsee}", name="api_get_intervention_places_voies_migrable_from_json", methods={"GET"})
*/
public function getInterventionPlaceVoiesMigrableFromJson(int $cpv, string $codeCluster, $codeInsee, KernelInterface $kernel, Request $request): JsonResponse
{
$userId = $request->query->get('userId', null);
$nomVoie = $request->query->get('nomVoie', null);
if ($userId) {
$filePath = $kernel->getProjectDir() . "/fileAttached/distribution/prises_parc/{$cpv}/{$userId}/migrables/voies/{$codeCluster}/{$codeInsee}/liste_voies_migrable.json";
}
$filePath = $kernel->getProjectDir() . "/fileAttached/geo_map/prises_parc/{$cpv}/migrables/voies/{$codeCluster}/{$codeInsee}/liste_voies_migrable.json";
if (!file_exists($filePath)) {
return new JsonResponse(['error' => 'Fichier non trouvé'], 404);
}
// Lire et décoder le fichier JSON
$jsonData = json_decode(file_get_contents($filePath), true);
if ($jsonData === null) {
return new JsonResponse(['error' => 'Erreur de lecture du JSON'], 404);
}
// Filtrer par nomVoie si fourni
if ($nomVoie !== null && is_array($jsonData)) {
$jsonData = array_filter($jsonData, function ($voie) use ($nomVoie) {
return isset($voie['nom_voie']) && strtolower($voie['nom_voie']) === strtolower($nomVoie);
});
$jsonData = array_values($jsonData); // Réindexer le tableau
}
// Renvoi des données paginées
return new JsonResponse($jsonData, 200);
}
/**
* @Route("/api/interventions-places-arret-cu/{cpv}", name="api_get_intervention_places_arret_cu_from_json", methods={"GET"})
*/
public function getArretCufromJson(int $cpv, KernelInterface $kernel, Request $request): JsonResponse
{
// Récupérer les paramètres de la requête
$userId = $request->query->get('userId', null);
$annee = $request->query->get('annee', null);
$mois = $request->query->get('mois', null);
$codeCluster = $request->query->get('codeCluster', null);
$codeInsee = $request->query->get('codeInsee', null);
// Définir le chemin du fichier JSON
if ($userId) {
$filePath = $kernel->getProjectDir() . "/fileAttached/geo_map/prises_parc/{$cpv}/{$userId}/arret_cu/arret_cu.json";
} else {
$filePath = $kernel->getProjectDir() . "/fileAttached/geo_map/prises_parc/{$cpv}/arret_cu/arret_cu.json";
}
// Vérifier si le fichier existe
if (!file_exists($filePath)) {
return new JsonResponse([], 200);
}
// Lire et décoder le fichier JSON
$jsonData = json_decode(file_get_contents($filePath), true);
// Vérifier si la lecture du JSON a échoué
if ($jsonData === null) {
return new JsonResponse([], 200);
}
if ($annee !== null && isset($jsonData[$annee])) {
$jsonDataAnnee = $jsonData[$annee];
// Check if the month is set and filter by month
if ($mois !== null && isset($jsonDataAnnee[$mois])) {
$jsonDataMois = $jsonDataAnnee[$mois];
// Check if the cluster code is set and filter by cluster
if ($codeCluster !== null && isset($jsonDataMois['clusters'])) {
$clusterData = null;
foreach ($jsonDataMois['clusters'] as $c) {
if ($c['code_cluster'] == $codeCluster) {
$clusterData = $c;
break;
}
}
if ($codeInsee !== null && isset($clusterData['villes'])) {
$villeData = null;
foreach ($clusterData['villes'] as $villeItem) {
if ($villeItem['cod_insee'] == $codeInsee) {
$villeData = $villeItem;
break;
}
}
return new JsonResponse($villeData ?? [], 200);
}
return new JsonResponse($clusterData ?? [], 200);
}
// After filtering, return the data
return new JsonResponse($jsonDataMois ?? [], 200);
} else {
return new JsonResponse(['error' => 'Mois non défini'], 200);
}
// If no month is specified, return the data for the year
return new JsonResponse($jsonDataAnnee ?? [], 200);
}
// Renvoi des données filtrées sous forme de réponse JSON
return new JsonResponse($jsonData, 200);
}
/**
* @Route("/api/interventions-places-arret-cu-v2/{cpv}", name="api_get_intervention_places_arret_cu_from_json_v2", methods={"GET"})
*/
public function getInterventionPlaceArretCuFromJsonV2(int $cpv, KernelInterface $kernel, Request $request): JsonResponse
{
// Récupérer les paramètres de la requête
$userId = $request->query->get('userId', null);
$codeCluster = $request->query->get('codeCluster', null);
$codeInsee = $request->query->get('codeInsee', null);
// Définir le chemin du fichier JSON
if ($userId) {
$filePath = $kernel->getProjectDir() . "/fileAttached/geo_map/prises_parc/{$cpv}/{$userId}/arret_cu/arret_cu.json";
} else {
$filePath = $kernel->getProjectDir() . "/fileAttached/geo_map/prises_parc/{$cpv}/arret_cu_v2/arret_cu.json";
}
// Vérifier si le fichier existe
if (!file_exists($filePath)) {
return new JsonResponse([], 200);
}
// Lire et décoder le fichier JSON
$jsonData = json_decode(file_get_contents($filePath), true);
// Vérifier si la lecture du JSON a échoué
if ($jsonData === null) {
return new JsonResponse([], 200);
}
if ($codeCluster) {
$cluster = array_filter($jsonData, function ($c) use ($codeCluster) {
if ($c['code_cluster'] == $codeCluster) {
return $c;
}
});
if (count($cluster) < 1) {
return new JsonResponse([], 200);
}
// Si codeInsee est fourni, rechercher la ville correspondante
if ($codeInsee) {
$ville = array_filter(array_values($cluster)[0]['villes'], function ($v) use ($codeInsee) {
if ($v['cod_insee'] == $codeInsee) {
return $v;
}
});
if (count($ville) < 1) {
return new JsonResponse([], 200);
}
return new JsonResponse(array_values($ville), 200);
}
return new JsonResponse(array_values($cluster)[0], 200);
}
// Renvoi des données filtrées sous forme de réponse JSON
return new JsonResponse($jsonData, 200);
}
/**
* @Route("/api/interventions-places-arret-cu-streets/{cpv}/{codeCluster}/{codeInsee}", name="api_get_intervention_places_arret_cu_streets_from_json", methods={"GET"})
*/
public function getInterventionPlaceArretCuStreetsFromJson(int $cpv, string $codeCluster, string $codeInsee, KernelInterface $kernel, Request $request): JsonResponse
{
$userId = $request->query->get('userId', null);
$annee = $request->query->get('annee', null);
$mois = $request->query->get('mois', null);
if ($userId) {
$filePath = $kernel->getProjectDir() . "/fileAttached/geo_map/prises_parc/{$cpv}/{$userId}/arret_cu/voies/{$codeCluster}/{$codeInsee}/liste_voies.json";
}
$filePath = $kernel->getProjectDir() . "/fileAttached/geo_map/prises_parc/{$cpv}/arret_cu/voies/{$codeCluster}/{$codeInsee}/liste_voies.json";
if (!file_exists($filePath)) {
return new JsonResponse([], 200);
}
// Vérifier si le fichier existe
if (!file_exists($filePath)) {
return new JsonResponse([], 200);
}
// Lire et décoder le fichier JSON
$jsonData = json_decode(file_get_contents($filePath), true);
// Vérifier si la lecture du JSON a échoué
if ($jsonData === null) {
return new JsonResponse([], 200);
}
if ($annee !== null && isset($jsonData[$annee])) {
$jsonDataAnnee = $jsonData[$annee];
// Check if the month is set and filter by month
if ($mois !== null && isset($jsonDataAnnee[$mois])) {
$jsonDataMois = $jsonDataAnnee[$mois];
return new JsonResponse($jsonDataMois, 200);
}
}
return new JsonResponse($jsonData, 200);
}
}