mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-06-20 01:44:42 +02:00
ajout de précision float pour lat lon, labourage de tout possible
This commit is contained in:
parent
2f54531907
commit
e71177dee1
2 changed files with 137 additions and 9 deletions
|
@ -23,6 +23,135 @@ final class AdminController extends AbstractController
|
|||
}
|
||||
|
||||
|
||||
#[Route('/admin/labourer-toutes-les-zones', name: 'app_admin_labourer_tout')]
|
||||
public function labourer_tout(): Response
|
||||
{
|
||||
|
||||
$updateExisting =true;
|
||||
|
||||
$stats_all = $this->entityManager->getRepository(Stats::class)->findAll();
|
||||
|
||||
echo 'on a trouvé ' . count($stats_all) . ' zones à labourer<br>';
|
||||
|
||||
foreach($stats_all as $stats) {
|
||||
|
||||
echo '<br> on laboure la zone '.$stats->getZone() . ' ';
|
||||
|
||||
$processedCount = 0;
|
||||
$updatedCount = 0;
|
||||
$insee_code = $stats->getZone();
|
||||
// Vérifier si le code INSEE est un nombre valide
|
||||
// Vérifier si les stats ont été modifiées il y a moins de 24h
|
||||
if ($stats->getDateModified() !== null) {
|
||||
$now = new \DateTime();
|
||||
$diff = $now->diff($stats->getDateModified());
|
||||
$hours = $diff->h + ($diff->days * 24);
|
||||
|
||||
if ($hours < 24) {
|
||||
echo 'Stats modifiées il y a moins de 24h - on passe au suivant<br>';
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (!is_numeric($insee_code) || $insee_code == 'undefined' || $insee_code == '') {
|
||||
echo 'Code INSEE invalide : ' . $insee_code . ' - on passe au suivant<br>';
|
||||
continue;
|
||||
}
|
||||
|
||||
$places_overpass = $this->motocultrice->labourer($stats->getZone());
|
||||
$places = $places_overpass;
|
||||
foreach ($places as $placeData) {
|
||||
|
||||
|
||||
// Vérifier si le lieu existe déjà
|
||||
$existingPlace = $this->entityManager->getRepository(Place::class)
|
||||
->findOneBy(['osmId' => $placeData['id']]);
|
||||
|
||||
if (!$existingPlace) {
|
||||
$place = new Place();
|
||||
$place->setOsmId($placeData['id'])
|
||||
->setOsmKind($placeData['type'])
|
||||
->setZipCode($insee_code)
|
||||
->setUuidForUrl($this->motocultrice->uuid_create())
|
||||
->setModifiedDate(new \DateTime())
|
||||
->setStats($stats)
|
||||
->setDead(false)
|
||||
->setOptedOut(false)
|
||||
->setMainTag($this->motocultrice->find_main_tag($placeData['tags']) ?? '')
|
||||
->setStreet($this->motocultrice->find_street($placeData['tags']) ?? '')
|
||||
->setHousenumber($this->motocultrice->find_housenumber($placeData['tags']) ?? '')
|
||||
->setSiret($this->motocultrice->find_siret($placeData['tags']) ?? '')
|
||||
->setAskedHumainsSupport(false)
|
||||
->setLastContactAttemptDate(null)
|
||||
->setNote('')
|
||||
->setPlaceCount(0);
|
||||
|
||||
// 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 uniquement si updateExisting est true
|
||||
$existingPlace->update_place_from_overpass_data($placeData);
|
||||
$this->entityManager->persist($existingPlace);
|
||||
$updatedCount++;
|
||||
}
|
||||
}
|
||||
// mettre à jour les stats
|
||||
// Récupérer tous les commerces de la zone
|
||||
$commerces = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $insee_code]);
|
||||
|
||||
// Récupérer les stats existantes pour la zone
|
||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]);
|
||||
if(!$stats) {
|
||||
$stats = new Stats();
|
||||
$stats->setZone($insee_code);
|
||||
}
|
||||
|
||||
$urls = $stats->getAllCTCUrlsMap();
|
||||
|
||||
$statsHistory = $this->entityManager->getRepository(StatsHistory::class)
|
||||
->createQueryBuilder('sh')
|
||||
->where('sh.stats = :stats')
|
||||
->setParameter('stats', $stats)
|
||||
->orderBy('sh.id', 'DESC')
|
||||
->setMaxResults(365)
|
||||
->getQuery()
|
||||
->getResult();
|
||||
|
||||
// Calculer les statistiques
|
||||
$calculatedStats = $this->motocultrice->calculateStats($commerces);
|
||||
|
||||
// Mettre à jour les stats pour la zone donnée
|
||||
$stats->setPlacesCount($calculatedStats['places_count']);
|
||||
$stats->setAvecHoraires($calculatedStats['counters']['avec_horaires']);
|
||||
$stats->setAvecAdresse($calculatedStats['counters']['avec_adresse']);
|
||||
$stats->setAvecSite($calculatedStats['counters']['avec_site']);
|
||||
$stats->setAvecAccessibilite($calculatedStats['counters']['avec_accessibilite']);
|
||||
$stats->setAvecNote($calculatedStats['counters']['avec_note']);
|
||||
$stats->setCompletionPercent($calculatedStats['completion_percent']);
|
||||
|
||||
// Associer les stats à chaque commerce
|
||||
foreach ($commerces as $commerce) {
|
||||
$commerce->setStats($stats);
|
||||
$this->entityManager->persist($commerce);
|
||||
}
|
||||
|
||||
$stats->computeCompletionPercent();
|
||||
$this->entityManager->persist($stats);
|
||||
|
||||
}
|
||||
|
||||
$this->entityManager->flush();
|
||||
|
||||
$this->entityManager->flush();
|
||||
|
||||
$this->addFlash('success', 'Labourage des ' . count($stats_all) . ' zones terminé avec succès.');
|
||||
return $this->redirectToRoute('app_public_dashboard');
|
||||
|
||||
}
|
||||
|
||||
#[Route('/admin', name: 'app_admin')]
|
||||
public function index(): Response
|
||||
{
|
||||
|
@ -39,6 +168,11 @@ final class AdminController extends AbstractController
|
|||
|
||||
// Récupérer les stats existantes pour la zone
|
||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]);
|
||||
if(!$stats) {
|
||||
$stats = new Stats();
|
||||
$stats->setZone($insee_code);
|
||||
}
|
||||
|
||||
$urls = $stats->getAllCTCUrlsMap();
|
||||
|
||||
$statsHistory = $this->entityManager->getRepository(StatsHistory::class)
|
||||
|
@ -50,12 +184,6 @@ final class AdminController extends AbstractController
|
|||
->getQuery()
|
||||
->getResult();
|
||||
|
||||
|
||||
if(!$stats) {
|
||||
$stats = new Stats();
|
||||
$stats->setZone($insee_code);
|
||||
}
|
||||
|
||||
// Calculer les statistiques
|
||||
$calculatedStats = $this->motocultrice->calculateStats($commerces);
|
||||
|
||||
|
|
|
@ -86,10 +86,10 @@ class Place
|
|||
private ?\DateTime $displayed_date = null;
|
||||
|
||||
#[ORM\Column(nullable: true)]
|
||||
private ?int $lat = null;
|
||||
private ?float $lat = null;
|
||||
|
||||
#[ORM\Column(nullable: true)]
|
||||
private ?int $lon = null;
|
||||
#[ORM\Column(nullable: true, type: Types::FLOAT)]
|
||||
private ?float $lon = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $street = null;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue