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
{
// 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
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]);
$commerces = $stats->getPlaces();
if(!$stats) {
// Si aucune stat n'existe, on en crée une vide pour éviter les erreurs, mais sans la sauvegarder
$stats = new Stats();
@ -254,31 +256,11 @@ final class AdminController extends AbstractController
->orderBy('sh.id', 'DESC')
->setMaxResults(365)
->getQuery()
->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();
*/
->getResult();
// Données pour le graphique des modifications par trimestre
$modificationsByQuarter = [];
foreach ($stats->getPlaces() as $commerce) {
foreach ($commerces as $commerce) {
if ($commerce->getOsmDataDate()) {
$date = $commerce->getOsmDataDate();
$year = $date->format('Y');
@ -292,16 +274,36 @@ final class AdminController extends AbstractController
}
ksort($modificationsByQuarter); // Trier par clé (année-trimestre)
$overpass_query = $this->motocultrice->get_query_places($insee_code);
$overpass_query_url = "https://overpass-turbo.eu/?Q=" . urlencode($overpass_query);
$geojson = [
'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', [
'stats' => $stats,
'commerces' => $commerces,
'urls' => $urls,
'query_places' => $overpass_query,
'overpass_query' => $overpass_query,
'overpass_query_url' => $overpass_query_url,
'geojson' => json_encode($geojson),
'modificationsByQuarter' => json_encode($modificationsByQuarter),
'maptiler_token' => $_ENV['MAPTILER_TOKEN'],
'statsHistory' => $statsHistory,

View file

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

File diff suppressed because it is too large Load diff