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');
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
}));

View file

@ -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)
@ -143,6 +147,7 @@ final class AdminController extends AbstractController
$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();

View file

@ -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;
}

View file

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