This commit is contained in:
Tykayn 2025-06-05 17:32:12 +02:00 committed by tykayn
parent 409bff6d4c
commit c4cc4a4050
4 changed files with 52 additions and 16 deletions

View file

@ -644,7 +644,7 @@ document.addEventListener('DOMContentLoaded', () => {
document.querySelector('#loading_search_insee').classList.add('d-none'); document.querySelector('#loading_search_insee').classList.add('d-none');
return data.map(commune => ({ return data.map(commune => ({
label: `${commune.nom} (code insee ${commune.code})`, label: `${commune.nom} (${commune.codesPostaux.join(', ')}, code insee ${commune.code})`,
insee: commune.code, insee: commune.code,
postcodes: commune.codesPostaux postcodes: commune.codesPostaux
})); }));

View file

@ -130,7 +130,11 @@ final class AdminController extends AbstractController
try { try {
// Récupérer ou créer les stats pour cette zone // 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' => $zip_code]);
$city = $this->motocultrice->get_city_osm_from_zip_code($zip_code);
if (!$stats) { if (!$stats) {
$stats = new Stats(); $stats = new Stats();
$stats->setZone($zip_code) $stats->setZone($zip_code)
->setPlacesCount(0) ->setPlacesCount(0)
@ -143,6 +147,7 @@ final class AdminController extends AbstractController
$this->entityManager->persist($stats); $this->entityManager->persist($stats);
$this->entityManager->flush(); $this->entityManager->flush();
} }
$stats->setName($city);
// Récupérer toutes les données // Récupérer toutes les données
$places = $this->motocultrice->labourer($zip_code); $places = $this->motocultrice->labourer($zip_code);
@ -188,6 +193,8 @@ final class AdminController extends AbstractController
// Mettre à jour les statistiques finales // Mettre à jour les statistiques finales
$stats->computeCompletionPercent(); $stats->computeCompletionPercent();
$this->entityManager->persist($stats); $this->entityManager->persist($stats);
$this->entityManager->flush(); $this->entityManager->flush();

View file

@ -58,22 +58,51 @@ class Stats
// calcule le pourcentage de complétion de la zone // calcule le pourcentage de complétion de la zone
public function computeCompletionPercent(): ?int public function computeCompletionPercent(): ?int
{ {
$places_count = $this->places->count();
// Si aucun commerce, on retourne 0 // 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); $this->setCompletionPercent(0);
return 0; return 0;
} }
// On prend le maximum entre les différents critères // On réinitialise les compteurs
$max = max( $this->avec_horaires = 0;
$this->avec_horaires ?? 0, $this->avec_adresse = 0;
$this->avec_adresse ?? 0, $this->avec_site = 0;
$this->avec_site ?? 0, $this->avec_accessibilite = 0;
$this->avec_accessibilite ?? 0, $this->avec_note = 0;
$this->avec_note ?? 0
); $somme_completions = 0;
$computed = round(($max) / $this->places_count * 100);
$this->setCompletionPercent($computed);
// 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; return $this->completion_percent;
} }

View file

@ -223,8 +223,8 @@ out skel qt;`;
<label for="app_admin_labourer">Rechercher une ville par son nom <label for="app_admin_labourer">Rechercher une ville par son nom
<div id="loading_search_insee" class="d-none"> <div id="loading_search_insee" class="d-none">
<div class="spinner-grow text-primary" role="status"> <div class="spinner-grow text-primary" role="status">
<span class="sr-only">Chargement...</span>
</div> </div>
<span class="sr-only">Chargement...</span>
</div> </div>
</label> </label>
<input class="form-control" type="text" id="app_admin_labourer" placeholder="Entrez le nom d'une ville..."> <input class="form-control" type="text" id="app_admin_labourer" placeholder="Entrez le nom d'une ville...">