stats de ville prendre position des objets en base

This commit is contained in:
Tykayn 2025-06-21 12:36:09 +02:00 committed by tykayn
parent 711fc277be
commit d66bc5e40c
3 changed files with 157 additions and 914 deletions

View file

@ -235,10 +235,12 @@ final class AdminController extends AbstractController
public function calculer_stats(string $insee_code): Response public function calculer_stats(string $insee_code): Response
{ {
// Récupérer tous les commerces de la zone // Récupérer tous les commerces de la zone
$commerces = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $insee_code, 'dead' => false]); // $commerces = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $insee_code, 'dead' => false]);
// Récupérer les stats existantes pour la zone // Récupérer les stats existantes pour la zone
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]); $stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]);
$commerces = $stats->getPlaces();
if(!$stats) { if(!$stats) {
// Si aucune stat n'existe, on en crée une vide pour éviter les erreurs, mais sans la sauvegarder // Si aucune stat n'existe, on en crée une vide pour éviter les erreurs, mais sans la sauvegarder
$stats = new Stats(); $stats = new Stats();
@ -256,29 +258,9 @@ final class AdminController extends AbstractController
->getQuery() ->getQuery()
->getResult(); ->getResult();
/*
// La page de statistiques ne doit pas modifier les données, seulement les afficher.
// La mise à jour des statistiques se fait lors du labourage.
// Calculer les statistiques
$calculatedStats = $this->motocultrice->calculateStats($commerces);
// Mettre à jour les stats pour la zone donnée
$stats->setPlacesCount($calculatedStats['places_count']);
// ... (plus de setters) ...
$stats->setCompletionPercent($calculatedStats['completion_percent']);
// ... (boucle foreach sur commerces) ...
$stats->computeCompletionPercent();
$this->entityManager->persist($stats);
$this->entityManager->flush();
*/
// Données pour le graphique des modifications par trimestre // Données pour le graphique des modifications par trimestre
$modificationsByQuarter = []; $modificationsByQuarter = [];
foreach ($stats->getPlaces() as $commerce) { foreach ($commerces as $commerce) {
if ($commerce->getOsmDataDate()) { if ($commerce->getOsmDataDate()) {
$date = $commerce->getOsmDataDate(); $date = $commerce->getOsmDataDate();
$year = $date->format('Y'); $year = $date->format('Y');
@ -292,16 +274,36 @@ final class AdminController extends AbstractController
} }
ksort($modificationsByQuarter); // Trier par clé (année-trimestre) ksort($modificationsByQuarter); // Trier par clé (année-trimestre)
$overpass_query = $this->motocultrice->get_query_places($insee_code); $geojson = [
$overpass_query_url = "https://overpass-turbo.eu/?Q=" . urlencode($overpass_query); 'type' => 'FeatureCollection',
'features' => []
];
foreach ($commerces as $commerce) {
if ($commerce->getLat() && $commerce->getLon()) {
$geojson['features'][] = [
'type' => 'Feature',
'geometry' => [
'type' => 'Point',
'coordinates' => [$commerce->getLon(), $commerce->getLat()]
],
'properties' => [
'id' => $commerce->getOsmId(),
'name' => $commerce->getName(),
'main_tag' => $commerce->getMainTag(),
'address' => $commerce->getStreet() . ' ' . $commerce->getHousenumber(),
'note' => $commerce->getNoteContent(),
'osm_url' => 'https://www.openstreetmap.org/' . $commerce->getOsmKind() . '/' . $commerce->getOsmId()
]
];
}
}
return $this->render('admin/stats.html.twig', [ return $this->render('admin/stats.html.twig', [
'stats' => $stats, 'stats' => $stats,
'commerces' => $commerces, 'commerces' => $commerces,
'urls' => $urls, 'urls' => $urls,
'query_places' => $overpass_query, 'geojson' => json_encode($geojson),
'overpass_query' => $overpass_query,
'overpass_query_url' => $overpass_query_url,
'modificationsByQuarter' => json_encode($modificationsByQuarter), 'modificationsByQuarter' => json_encode($modificationsByQuarter),
'maptiler_token' => $_ENV['MAPTILER_TOKEN'], 'maptiler_token' => $_ENV['MAPTILER_TOKEN'],
'statsHistory' => $statsHistory, 'statsHistory' => $statsHistory,

View file

@ -85,7 +85,7 @@ class Place
#[ORM\Column(nullable: true)] #[ORM\Column(nullable: true)]
private ?\DateTime $displayed_date = null; private ?\DateTime $displayed_date = null;
#[ORM\Column(nullable: true)] #[ORM\Column(nullable: true, type: Types::FLOAT)]
private ?float $lat = null; private ?float $lat = null;
#[ORM\Column(nullable: true, type: Types::FLOAT)] #[ORM\Column(nullable: true, type: Types::FLOAT)]

File diff suppressed because it is too large Load diff