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')]
|
#[Route('/admin', name: 'app_admin')]
|
||||||
public function index(): Response
|
public function index(): Response
|
||||||
{
|
{
|
||||||
|
@ -39,6 +168,11 @@ final class AdminController extends AbstractController
|
||||||
|
|
||||||
// Récupérer les stats existantes pour la zone
|
// Récupérer les stats existantes pour la zone
|
||||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]);
|
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]);
|
||||||
|
if(!$stats) {
|
||||||
|
$stats = new Stats();
|
||||||
|
$stats->setZone($insee_code);
|
||||||
|
}
|
||||||
|
|
||||||
$urls = $stats->getAllCTCUrlsMap();
|
$urls = $stats->getAllCTCUrlsMap();
|
||||||
|
|
||||||
$statsHistory = $this->entityManager->getRepository(StatsHistory::class)
|
$statsHistory = $this->entityManager->getRepository(StatsHistory::class)
|
||||||
|
@ -50,12 +184,6 @@ final class AdminController extends AbstractController
|
||||||
->getQuery()
|
->getQuery()
|
||||||
->getResult();
|
->getResult();
|
||||||
|
|
||||||
|
|
||||||
if(!$stats) {
|
|
||||||
$stats = new Stats();
|
|
||||||
$stats->setZone($insee_code);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculer les statistiques
|
// Calculer les statistiques
|
||||||
$calculatedStats = $this->motocultrice->calculateStats($commerces);
|
$calculatedStats = $this->motocultrice->calculateStats($commerces);
|
||||||
|
|
||||||
|
|
|
@ -86,10 +86,10 @@ class Place
|
||||||
private ?\DateTime $displayed_date = null;
|
private ?\DateTime $displayed_date = null;
|
||||||
|
|
||||||
#[ORM\Column(nullable: true)]
|
#[ORM\Column(nullable: true)]
|
||||||
private ?int $lat = null;
|
private ?float $lat = null;
|
||||||
|
|
||||||
#[ORM\Column(nullable: true)]
|
#[ORM\Column(nullable: true, type: Types::FLOAT)]
|
||||||
private ?int $lon = null;
|
private ?float $lon = null;
|
||||||
|
|
||||||
#[ORM\Column(length: 255, nullable: true)]
|
#[ORM\Column(length: 255, nullable: true)]
|
||||||
private ?string $street = null;
|
private ?string $street = null;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue