ajout de stats sur le budget des villes
This commit is contained in:
parent
1973f85dd4
commit
cd8369d08c
14 changed files with 901 additions and 186 deletions
|
@ -10,6 +10,7 @@ use App\Entity\Place;
|
|||
use App\Entity\Stats;
|
||||
use App\Entity\StatsHistory;
|
||||
use App\Service\Motocultrice;
|
||||
use App\Service\BudgetService;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use function uuid_create;
|
||||
|
@ -21,7 +22,8 @@ final class AdminController extends AbstractController
|
|||
|
||||
public function __construct(
|
||||
private EntityManagerInterface $entityManager,
|
||||
private Motocultrice $motocultrice
|
||||
private Motocultrice $motocultrice,
|
||||
private BudgetService $budgetService
|
||||
) {
|
||||
}
|
||||
|
||||
|
@ -416,6 +418,23 @@ final class AdminController extends AbstractController
|
|||
|
||||
}
|
||||
|
||||
// Récupérer le budget annuel via l'API des finances publiques
|
||||
try {
|
||||
$budgetAnnuel = $this->budgetService->getBudgetAnnuel($insee_code);
|
||||
if ($budgetAnnuel !== null) {
|
||||
$stats->setBudgetAnnuel((string) $budgetAnnuel);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
// Pas de message d'erreur pour le budget, c'est optionnel
|
||||
}
|
||||
|
||||
// Récupérer tous les lieux existants de la ville en une seule requête
|
||||
$existingPlaces = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $insee_code]);
|
||||
$placesByOsmId = [];
|
||||
foreach ($existingPlaces as $pl) {
|
||||
$placesByOsmId[$pl->getOsmId()] = $pl;
|
||||
}
|
||||
|
||||
// Récupérer toutes les données
|
||||
$places_overpass = $this->motocultrice->labourer($insee_code);
|
||||
$processedCount = 0;
|
||||
|
@ -425,10 +444,8 @@ final class AdminController extends AbstractController
|
|||
$overpass_osm_ids = array_map(fn($place) => $place['id'], $places_overpass);
|
||||
|
||||
foreach ($places_overpass as $placeData) {
|
||||
// Vérifier si le lieu existe déjà
|
||||
$existingPlace = $this->entityManager->getRepository(Place::class)
|
||||
->findOneBy(['osmId' => $placeData['id']]);
|
||||
|
||||
// Vérifier si le lieu existe déjà (optimisé)
|
||||
$existingPlace = $placesByOsmId[$placeData['id']] ?? null;
|
||||
if (!$existingPlace) {
|
||||
$place = new Place();
|
||||
$place->setOsmId($placeData['id'])
|
||||
|
@ -450,15 +467,11 @@ final class AdminController extends AbstractController
|
|||
->setPlaceCount(0)
|
||||
// ->setOsmData($placeData['modified'] ?? null)
|
||||
;
|
||||
|
||||
// Mettre à jour les données depuis Overpass
|
||||
$place->update_place_from_overpass_data($placeData);
|
||||
|
||||
$this->entityManager->persist($place);
|
||||
$stats->addPlace($place);
|
||||
$processedCount++;
|
||||
} elseif ($updateExisting) {
|
||||
// Mettre à jour les données depuis Overpass et s'assurer qu'il est marqué comme "vivant"
|
||||
$existingPlace->setDead(false);
|
||||
$existingPlace->update_place_from_overpass_data($placeData);
|
||||
$stats->addPlace($existingPlace);
|
||||
|
@ -937,4 +950,29 @@ final class AdminController extends AbstractController
|
|||
ksort($villesByBin);
|
||||
return new JsonResponse(['villes_by_bin' => $villesByBin]);
|
||||
}
|
||||
|
||||
#[Route('/admin/labourer-tous-les-budgets', name: 'app_admin_labourer_tous_les_budgets')]
|
||||
public function labourerTousLesBudgets(): Response
|
||||
{
|
||||
$statsRepo = $this->entityManager->getRepository(Stats::class);
|
||||
$query = $statsRepo->createQueryBuilder('s')->getQuery();
|
||||
$allStats = $query->toIterable();
|
||||
$budgetsMisAJour = 0;
|
||||
foreach ($allStats as $stat) {
|
||||
if (!$stat->getBudgetAnnuel() && $stat->getZone()) {
|
||||
$budget = $this->budgetService->getBudgetAnnuel($stat->getZone());
|
||||
if ($budget !== null) {
|
||||
$stat->setBudgetAnnuel((string)$budget);
|
||||
$this->entityManager->persist($stat);
|
||||
$budgetsMisAJour++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($budgetsMisAJour > 0) {
|
||||
$this->entityManager->flush();
|
||||
}
|
||||
$this->addFlash('success', $budgetsMisAJour.' budgets mis à jour.');
|
||||
return $this->redirectToRoute('app_admin');
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue