<?php
namespace App\Controller;
use App\Service\MeteoFranceService;
use App\DTO\StationMeteoDTO;
use App\Form\FichierMeteoType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\Pluviometrie;
use App\Entity\StationsMeteo;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
set_time_limit(36000);
class FichierMeteoController extends AbstractController {
public function __construct(private MeteoFranceService $meteoService, FichierMeteoType $fichierMeteoType){//, HttpClientInterface $client, CacheInterface $cache, string $apiKey, string $meteoFranceTokenUrl, string $meteoFranceApiUrl) {
$this->fichierMeteoType = $fichierMeteoType;
}
/**
* @Route("/fichierMeteo", name="fichierMeteo")
*/
public function fichierMeteo(Request $request, EntityManagerInterface $em): Response
{
ini_set('memory_limit', '1024M'); // ou '2G' si besoin
// Créer une instance du DTO pour passer au formulaire
$stationMeteoDTO = new StationMeteoDTO();
// Créer le formulaire avec l'objet DTO
$form = $this->createForm(FichierMeteoType::class, $stationMeteoDTO);
// Gérer la soumission du formulaire
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Récupérer les données du formulaire
$data = $form->getData();
// Tu as directement accès à l'objet StationMeteoDTO ici
$apikey = $data->getApikey(); // Accès via la méthode getter
$stationAPI = $data->getStationAPI(); // Accès via la méthode getter
$annee = $data->getAnnee();
// Appeler le service pour obtenir les données météo
$stationsData = [];
$commandeArray = []; // Initialisation pour éviter l'erreur Undefined variable
$columnDataArray = []; // Initialisation pour stocker les données des colonnes
$AnneeEtudiee = [
'dateDeb' => "{$annee}-01-01T00%3A00%3A00Z",
'dateFin' => "{$annee}-12-31T00%3A00%3A00Z",
];
$commande = $this->meteoService->getStationDataHoraire($stationAPI, $AnneeEtudiee, $apikey);
$commandeArray[$stationAPI][$annee] = $commande;
// Pause pour respecter la limite de 50 requêtes par minute
usleep(13000000); // 1,2 secondes = 1 200 000 microsecondes
$commandeId = $commande['elaboreProduitAvecDemandeResponse']['return'];
// dump($commandeId);
$csvString = $this->meteoService->getFichierSeul($commandeId);
$filePath = sys_get_temp_dir() . '/meteo_' . $commandeId . '.csv';
file_put_contents($filePath, $csvString);
return new BinaryFileResponse($filePath, 200, [
'Content-Type' => 'text/csv',
], false, ResponseHeaderBag::DISPOSITION_ATTACHMENT, false, 'meteo_' . $commandeId . '.csv');
// Passer les données au template
return $this->render('fichierMeteo.html.twig', [
'form' => $form->createView(),
]);
// } catch (\Exception $e) {
// // Gérer les erreurs
// $this->addFlash('error', 'Erreur : ' . $e->getMessage());
// }
}
// Rendre la vue du formulaire
return $this->render('fichierMeteo.html.twig', [
'form' => $form->createView(),
]);
}
// Méthode pour obtenir la clé en fonction de l'ID
public function getKeyById($id)
{
// Récupérer le tableau des stations et IDs à partir de StationMeteoType
$choices = $this->stationMeteoType->getStationAPIChoices();
// Rechercher la clé correspondant à l'ID
$key = array_search($id, $choices);
// Si l'ID est trouvé, retourne la clé, sinon retourne null
return $key !== false ? $key : null;
}
public function getSeuilsParDepartement(): array {
return [
'01' => ['seuil_jour' => 35, 'seuil_nuit' => 20],
'02' => ['seuil_jour' => 33, 'seuil_nuit' => 18],
'03' => ['seuil_jour' => 34, 'seuil_nuit' => 18],
'04' => ['seuil_jour' => 36, 'seuil_nuit' => 19],
'05' => ['seuil_jour' => 34, 'seuil_nuit' => 18],
'06' => ['seuil_jour' => 31, 'seuil_nuit' => 24],
'07' => ['seuil_jour' => 35, 'seuil_nuit' => 20],
'08' => ['seuil_jour' => 33, 'seuil_nuit' => 18],
'09' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'10' => ['seuil_jour' => 35, 'seuil_nuit' => 18],
'11' => ['seuil_jour' => 35, 'seuil_nuit' => 22],
'12' => ['seuil_jour' => 36, 'seuil_nuit' => 19],
'13' => ['seuil_jour' => 35, 'seuil_nuit' => 24],
'14' => ['seuil_jour' => 31, 'seuil_nuit' => 18],
'15' => ['seuil_jour' => 32, 'seuil_nuit' => 18],
'16' => ['seuil_jour' => 36, 'seuil_nuit' => 20],
'17' => ['seuil_jour' => 35, 'seuil_nuit' => 20],
'18' => ['seuil_jour' => 35, 'seuil_nuit' => 19],
'19' => ['seuil_jour' => 36, 'seuil_nuit' => 19],
'2A' => ['seuil_jour' => 33, 'seuil_nuit' => 23],
'2B' => ['seuil_jour' => 33, 'seuil_nuit' => 23],
'21' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'22' => ['seuil_jour' => 31, 'seuil_nuit' => 18],
'23' => ['seuil_jour' => 34, 'seuil_nuit' => 20],
'24' => ['seuil_jour' => 36, 'seuil_nuit' => 20],
'25' => ['seuil_jour' => 33, 'seuil_nuit' => 19],
'26' => ['seuil_jour' => 36, 'seuil_nuit' => 21],
'27' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'28' => ['seuil_jour' => 34, 'seuil_nuit' => 18],
'29' => ['seuil_jour' => 32, 'seuil_nuit' => 19],
'30' => ['seuil_jour' => 36, 'seuil_nuit' => 23],
'31' => ['seuil_jour' => 36, 'seuil_nuit' => 21],
'32' => ['seuil_jour' => 36, 'seuil_nuit' => 20],
'33' => ['seuil_jour' => 35, 'seuil_nuit' => 21],
'34' => ['seuil_jour' => 35, 'seuil_nuit' => 22],
'35' => ['seuil_jour' => 34, 'seuil_nuit' => 20],
'36' => ['seuil_jour' => 35, 'seuil_nuit' => 19],
'37' => ['seuil_jour' => 35, 'seuil_nuit' => 19],
'38' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'39' => ['seuil_jour' => 34, 'seuil_nuit' => 20],
'40' => ['seuil_jour' => 35, 'seuil_nuit' => 20],
'41' => ['seuil_jour' => 35, 'seuil_nuit' => 19],
'42' => ['seuil_jour' => 35, 'seuil_nuit' => 19],
'43' => ['seuil_jour' => 32, 'seuil_nuit' => 18],
'44' => ['seuil_jour' => 34, 'seuil_nuit' => 20],
'45' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'46' => ['seuil_jour' => 36, 'seuil_nuit' => 20],
'47' => ['seuil_jour' => 36, 'seuil_nuit' => 20],
'48' => ['seuil_jour' => 33, 'seuil_nuit' => 18],
'49' => ['seuil_jour' => 34, 'seuil_nuit' => 20],
'50' => ['seuil_jour' => 31, 'seuil_nuit' => 18],
'51' => ['seuil_jour' => 34, 'seuil_nuit' => 18],
'52' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'53' => ['seuil_jour' => 34, 'seuil_nuit' => 20],
'54' => ['seuil_jour' => 34, 'seuil_nuit' => 18],
'55' => ['seuil_jour' => 34, 'seuil_nuit' => 18],
'56' => ['seuil_jour' => 32, 'seuil_nuit' => 18],
'57' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'58' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'59' => ['seuil_jour' => 33, 'seuil_nuit' => 18],
'60' => ['seuil_jour' => 34, 'seuil_nuit' => 18],
'61' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'62' => ['seuil_jour' => 33, 'seuil_nuit' => 18],
'63' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'64' => ['seuil_jour' => 34, 'seuil_nuit' => 20],
'65' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'66' => ['seuil_jour' => 35, 'seuil_nuit' => 23],
'67' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'68' => ['seuil_jour' => 35, 'seuil_nuit' => 19],
'69' => ['seuil_jour' => 34, 'seuil_nuit' => 20],
'70' => ['seuil_jour' => 34, 'seuil_nuit' => 18],
'71' => ['seuil_jour' => 34, 'seuil_nuit' => 20],
'72' => ['seuil_jour' => 35, 'seuil_nuit' => 20],
'73' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'74' => ['seuil_jour' => 34, 'seuil_nuit' => 19],
'75' => ['seuil_jour' => 31, 'seuil_nuit' => 21],
'76' => ['seuil_jour' => 33, 'seuil_nuit' => 18],
'77' => ['seuil_jour' => 34, 'seuil_nuit' => 18],
'78' => ['seuil_jour' => 33, 'seuil_nuit' => 20],
'79' => ['seuil_jour' => 35, 'seuil_nuit' => 20],
'80' => ['seuil_jour' => 33, 'seuil_nuit' => 18],
'81' => ['seuil_jour' => 36, 'seuil_nuit' => 21],
'82' => ['seuil_jour' => 36, 'seuil_nuit' => 21],
'83' => ['seuil_jour' => 35, 'seuil_nuit' => 23],
'84' => ['seuil_jour' => 36, 'seuil_nuit' => 21],
'85' => ['seuil_jour' => 34, 'seuil_nuit' => 20],
'86' => ['seuil_jour' => 34, 'seuil_nuit' => 20],
'87' => ['seuil_jour' => 35, 'seuil_nuit' => 19],
'88' => ['seuil_jour' => 34, 'seuil_nuit' => 18],
'89' => ['seuil_jour' => 35, 'seuil_nuit' => 19],
'90' => ['seuil_jour' => 33, 'seuil_nuit' => 18],
'91' => ['seuil_jour' => 35, 'seuil_nuit' => 20],
'92' => ['seuil_jour' => 31, 'seuil_nuit' => 21],
'93' => ['seuil_jour' => 31, 'seuil_nuit' => 21],
'94' => ['seuil_jour' => 31, 'seuil_nuit' => 21],
'95' => ['seuil_jour' => 35, 'seuil_nuit' => 20],
];
}
}