diff --git a/assets/app.js b/assets/app.js index 78f19735..37b3322a 100644 --- a/assets/app.js +++ b/assets/app.js @@ -644,7 +644,7 @@ document.addEventListener('DOMContentLoaded', () => { document.querySelector('#loading_search_insee').classList.add('d-none'); return data.map(commune => ({ - label: `${commune.nom} (code insee ${commune.code})`, + label: `${commune.nom} (${commune.codesPostaux.join(', ')}, code insee ${commune.code})`, insee: commune.code, postcodes: commune.codesPostaux })); diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index 842bff27..287f3827 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -130,7 +130,11 @@ final class AdminController extends AbstractController try { // Récupérer ou créer les stats pour cette zone $stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $zip_code]); + + + $city = $this->motocultrice->get_city_osm_from_zip_code($zip_code); if (!$stats) { + $stats = new Stats(); $stats->setZone($zip_code) ->setPlacesCount(0) @@ -140,9 +144,10 @@ final class AdminController extends AbstractController ->setAvecAccessibilite(0) ->setAvecNote(0) ->setCompletionPercent(0); - $this->entityManager->persist($stats); - $this->entityManager->flush(); - } + $this->entityManager->persist($stats); + $this->entityManager->flush(); + } + $stats->setName($city); // Récupérer toutes les données $places = $this->motocultrice->labourer($zip_code); @@ -188,6 +193,8 @@ final class AdminController extends AbstractController // Mettre à jour les statistiques finales $stats->computeCompletionPercent(); + + $this->entityManager->persist($stats); $this->entityManager->flush(); diff --git a/src/Entity/Stats.php b/src/Entity/Stats.php index 25e2cdac..872fda9e 100644 --- a/src/Entity/Stats.php +++ b/src/Entity/Stats.php @@ -58,22 +58,51 @@ class Stats // calcule le pourcentage de complétion de la zone public function computeCompletionPercent(): ?int { + + $places_count = $this->places->count(); // Si aucun commerce, on retourne 0 - if ($this->places_count === 0 || $this->places_count === null) { + if ($places_count === 0 || $places_count === null) { $this->setCompletionPercent(0); return 0; } - // On prend le maximum entre les différents critères - $max = max( - $this->avec_horaires ?? 0, - $this->avec_adresse ?? 0, - $this->avec_site ?? 0, - $this->avec_accessibilite ?? 0, - $this->avec_note ?? 0 - ); - $computed = round(($max) / $this->places_count * 100); - $this->setCompletionPercent($computed); + // On réinitialise les compteurs + $this->avec_horaires = 0; + $this->avec_adresse = 0; + $this->avec_site = 0; + $this->avec_accessibilite = 0; + $this->avec_note = 0; + + $somme_completions = 0; + + + // On boucle sur chaque place pour compter les attributs renseignés + foreach ($this->places as $place) { + $place_completions = 0; + if ($place->hasAddress()) { + $this->avec_adresse++; + $place_completions++; + } + if ($place->hasWebsite()) { + $this->avec_site++; + $place_completions++; + } + if ($place->hasWheelchair()) { + $this->avec_accessibilite++; + $place_completions++; + } + if ($place->hasOpeningHours()) { + $this->avec_horaires++; + $place_completions++; + } + if($place->hasNote()) { + $this->avec_note++; + } + $somme_completions += $place_completions / 5; + } + + $this->setPlacesCount($places_count); + $this->setCompletionPercent(round($somme_completions / $places_count * 100)); return $this->completion_percent; } diff --git a/templates/public/dashboard.html.twig b/templates/public/dashboard.html.twig index 6fc00038..c5053146 100644 --- a/templates/public/dashboard.html.twig +++ b/templates/public/dashboard.html.twig @@ -223,8 +223,8 @@ out skel qt;`;