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;`;