mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-06-20 01:44:42 +02:00
ajout stat hist
This commit is contained in:
parent
918527e15e
commit
7fb0c9c8c2
19 changed files with 695 additions and 314 deletions
|
@ -30,18 +30,29 @@ final class AdminController extends AbstractController
|
|||
]);
|
||||
}
|
||||
|
||||
#[Route('/admin/stats/{zip_code}', name: 'app_admin_stats')]
|
||||
public function calculer_stats(string $zip_code): Response
|
||||
#[Route('/admin/stats/{insee_code}', name: 'app_admin_stats')]
|
||||
public function calculer_stats(string $insee_code): Response
|
||||
{
|
||||
// Récupérer tous les commerces de la zone
|
||||
$commerces = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $zip_code]);
|
||||
$commerces = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $insee_code]);
|
||||
|
||||
// Récupérer les stats existantes pour la zone
|
||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $zip_code]);
|
||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]);
|
||||
|
||||
|
||||
$statsHistory = $this->entityManager->getRepository(StatsHistory::class)
|
||||
->createQueryBuilder('sh')
|
||||
->where('sh.stats = :stats')
|
||||
->setParameter('stats', $stats)
|
||||
->orderBy('sh.id', 'DESC')
|
||||
->setMaxResults(365)
|
||||
->getQuery()
|
||||
->getResult();
|
||||
|
||||
|
||||
if(!$stats) {
|
||||
$stats = new Stats();
|
||||
$stats->setZone($zip_code);
|
||||
$stats->setZone($insee_code);
|
||||
}
|
||||
|
||||
// Calculer les statistiques
|
||||
|
@ -72,11 +83,12 @@ final class AdminController extends AbstractController
|
|||
|
||||
return $this->render('admin/stats.html.twig', [
|
||||
'stats' => $stats,
|
||||
'zip_code' => $zip_code,
|
||||
'query_places' => $this->motocultrice->get_query_places($zip_code),
|
||||
'insee_code' => $insee_code,
|
||||
'query_places' => $this->motocultrice->get_query_places($insee_code),
|
||||
'counters' => $calculatedStats['counters'],
|
||||
'maptiler_token' => $_ENV['MAPTILER_TOKEN'],
|
||||
'mapbox_token' => $_ENV['MAPBOX_TOKEN'],
|
||||
'statsHistory' => $statsHistory,
|
||||
]);
|
||||
}
|
||||
|
||||
|
@ -122,19 +134,19 @@ final class AdminController extends AbstractController
|
|||
|
||||
|
||||
/**
|
||||
* récupérer les commerces de la zone, créer les nouveaux lieux, et mettre à jour les existants
|
||||
* récupérer les commerces de la zone selon le code INSEE, créer les nouveaux lieux, et mettre à jour les existants
|
||||
*/
|
||||
#[Route('/admin/labourer/{zip_code}', name: 'app_admin_labourer')]
|
||||
public function labourer(string $zip_code, bool $updateExisting = true): Response
|
||||
#[Route('/admin/labourer/{insee_code}', name: 'app_admin_labourer')]
|
||||
public function labourer(string $insee_code, bool $updateExisting = true): Response
|
||||
{
|
||||
try {
|
||||
// Récupérer ou créer les stats pour cette zone
|
||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $zip_code]);
|
||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]);
|
||||
|
||||
$city = $this->motocultrice->get_city_osm_from_zip_code($zip_code);
|
||||
$city = $this->motocultrice->get_city_osm_from_zip_code($insee_code);
|
||||
if (!$stats) {
|
||||
$stats = new Stats();
|
||||
$stats->setZone($zip_code)
|
||||
$stats->setZone($insee_code)
|
||||
->setPlacesCount(0)
|
||||
->setAvecHoraires(0)
|
||||
->setAvecAdresse(0)
|
||||
|
@ -150,7 +162,7 @@ final class AdminController extends AbstractController
|
|||
// Récupérer la population via l'API
|
||||
$population = null;
|
||||
try {
|
||||
$apiUrl = 'https://geo.api.gouv.fr/communes/' . $zip_code . '?fields=population';
|
||||
$apiUrl = 'https://geo.api.gouv.fr/communes/' . $insee_code;
|
||||
$response = file_get_contents($apiUrl);
|
||||
if ($response !== false) {
|
||||
$data = json_decode($response, true);
|
||||
|
@ -158,13 +170,23 @@ final class AdminController extends AbstractController
|
|||
$population = (int)$data['population'];
|
||||
$stats->setPopulation($population);
|
||||
}
|
||||
if (isset($data['siren'])) {
|
||||
$stats->setSiren((int)$data['siren']);
|
||||
}
|
||||
if (isset($data['codeEpci'])) {
|
||||
$stats->setCodeEpci((int)$data['codeEpci']);
|
||||
}
|
||||
if (isset($data['codesPostaux'])) {
|
||||
$stats->setCodesPostaux(implode(';', $data['codesPostaux']));
|
||||
}
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
// Ne rien faire si l'API échoue
|
||||
$this->addFlash('error', 'Erreur lors de la récupération des données de l\'API : ' . $e->getMessage());
|
||||
|
||||
}
|
||||
|
||||
// Récupérer toutes les données
|
||||
$places = $this->motocultrice->labourer($zip_code);
|
||||
$places = $this->motocultrice->labourer($insee_code);
|
||||
$processedCount = 0;
|
||||
$updatedCount = 0;
|
||||
|
||||
|
@ -177,7 +199,7 @@ final class AdminController extends AbstractController
|
|||
$place = new Place();
|
||||
$place->setOsmId($placeData['id'])
|
||||
->setOsmKind($placeData['type'])
|
||||
->setZipCode($zip_code)
|
||||
->setZipCode($insee_code)
|
||||
->setUuidForUrl($this->motocultrice->uuid_create())
|
||||
->setModifiedDate(new \DateTime())
|
||||
->setStats($stats)
|
||||
|
@ -212,6 +234,14 @@ final class AdminController extends AbstractController
|
|||
// Mettre à jour les statistiques finales
|
||||
$stats->computeCompletionPercent();
|
||||
|
||||
// Créer un historique des statistiques
|
||||
$statsHistory = new StatsHistory();
|
||||
$statsHistory->setPlacesCount($stats->getPlaces()->count())
|
||||
->setCompletionPercent($stats->getCompletionPercent())
|
||||
->setStats($stats);
|
||||
|
||||
$this->entityManager->persist($statsHistory);
|
||||
|
||||
|
||||
$this->entityManager->persist($stats);
|
||||
$this->entityManager->flush();
|
||||
|
@ -225,7 +255,8 @@ final class AdminController extends AbstractController
|
|||
$this->addFlash('error', 'Erreur lors du labourage : ' . $e->getMessage());
|
||||
}
|
||||
|
||||
return $this->redirectToRoute('app_admin_stats', ['zip_code' => $zip_code]);
|
||||
return $this->redirectToRoute('app_public_dashboard');
|
||||
// return $this->redirectToRoute('app_admin_stats', ['insee_code' => $insee_code]);
|
||||
}
|
||||
|
||||
#[Route('/admin/delete/{id}', name: 'app_admin_delete')]
|
||||
|
@ -244,11 +275,11 @@ final class AdminController extends AbstractController
|
|||
return $this->redirectToRoute('app_public_dashboard');
|
||||
}
|
||||
|
||||
#[Route('/admin/delete_by_zone/{zip_code}', name: 'app_admin_delete_by_zone')]
|
||||
public function delete_by_zone(string $zip_code): Response
|
||||
#[Route('/admin/delete_by_zone/{insee_code}', name: 'app_admin_delete_by_zone')]
|
||||
public function delete_by_zone(string $insee_code): Response
|
||||
{
|
||||
$commerces = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $zip_code]);
|
||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $zip_code]);
|
||||
$commerces = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $insee_code]);
|
||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]);
|
||||
|
||||
foreach ($commerces as $commerce) {
|
||||
$this->entityManager->remove($commerce);
|
||||
|
@ -256,7 +287,7 @@ final class AdminController extends AbstractController
|
|||
$this->entityManager->remove($stats);
|
||||
$this->entityManager->flush();
|
||||
|
||||
$this->addFlash('success', 'Tous les commerces de la zone '.$zip_code.' ont été supprimés avec succès de OSM Mes commerces, mais pas dans OpenStreetMap.');
|
||||
$this->addFlash('success', 'Tous les commerces de la zone '.$insee_code.' ont été supprimés avec succès de OSM Mes commerces, mais pas dans OpenStreetMap.');
|
||||
|
||||
return $this->redirectToRoute('app_public_dashboard');
|
||||
}
|
||||
|
@ -322,16 +353,16 @@ final class AdminController extends AbstractController
|
|||
|
||||
return $response;
|
||||
}
|
||||
#[Route('/admin/export_csv/{zip_code}', name: 'app_admin_export_csv')]
|
||||
public function export_csv(string $zip_code): Response
|
||||
#[Route('/admin/export_csv/{insee_code}', name: 'app_admin_export_csv')]
|
||||
public function export_csv(string $insee_code): Response
|
||||
{
|
||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $zip_code]);
|
||||
$response = new Response($this->motocultrice->export($zip_code));
|
||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]);
|
||||
$response = new Response($this->motocultrice->export($insee_code));
|
||||
$response->headers->set('Content-Type', 'text/csv');
|
||||
|
||||
$slug_name = str_replace(' ', '-', $stats->getName());
|
||||
|
||||
$response->headers->set('Content-Disposition', 'attachment; filename="osm-commerces-export_' . $zip_code . '_' . $slug_name . '_' . date('Y-m-d_H-i-s') . '.csv"');
|
||||
$response->headers->set('Content-Disposition', 'attachment; filename="osm-commerces-export_' . $insee_code . '_' . $slug_name . '_' . date('Y-m-d_H-i-s') . '.csv"');
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue