mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-10-04 17:04:53 +02:00
fix missing lieux in stat page
This commit is contained in:
parent
a81112a018
commit
7527d5cf6c
1 changed files with 94 additions and 27 deletions
|
@ -132,8 +132,8 @@ final class AdminController extends AbstractController
|
||||||
$stats = $stats_exist;
|
$stats = $stats_exist;
|
||||||
} else {
|
} else {
|
||||||
$stats = new Stats();
|
$stats = new Stats();
|
||||||
dump('nouvelle stat', $insee_code);
|
// dump('nouvelle stat', $insee_code);
|
||||||
die();
|
// die();
|
||||||
|
|
||||||
$stats->setZone($insee_code);
|
$stats->setZone($insee_code);
|
||||||
}
|
}
|
||||||
|
@ -322,13 +322,26 @@ final class AdminController extends AbstractController
|
||||||
$followups = $stats->getCityFollowUps();
|
$followups = $stats->getCityFollowUps();
|
||||||
}
|
}
|
||||||
$commerces = $stats->getPlacesCount();
|
$commerces = $stats->getPlacesCount();
|
||||||
if (!$commerces) {
|
// Remove existing duplicates
|
||||||
// labourer
|
$this->removeDuplicatePlaces($stats);
|
||||||
$places_found = $this->motocultrice->labourer($insee_code);
|
|
||||||
if (count($places_found)) {
|
|
||||||
var_dump(count($places_found));
|
|
||||||
|
|
||||||
foreach ($places_found as $placeData) {
|
// labourer
|
||||||
|
$places_found = $this->motocultrice->labourer($insee_code);
|
||||||
|
if (count($places_found)) {
|
||||||
|
// var_dump(count($places_found));
|
||||||
|
$placeRepo = $this->entityManager->getRepository(Place::class);
|
||||||
|
$addedCount = 0;
|
||||||
|
|
||||||
|
foreach ($places_found as $placeData) {
|
||||||
|
// Check if a place with the same osm_id and osm_kind already exists
|
||||||
|
$existingPlace = $placeRepo->findOneBy([
|
||||||
|
'osmId' => $placeData['id'],
|
||||||
|
'osm_kind' => $placeData['type'],
|
||||||
|
'stats' => $stats
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (!$existingPlace) {
|
||||||
|
// Create a new place only if it doesn't already exist
|
||||||
$newPlace = new Place();
|
$newPlace = new Place();
|
||||||
$newPlace->setOsmId($placeData['id'])
|
$newPlace->setOsmId($placeData['id'])
|
||||||
->setOsmKind($placeData['type'])
|
->setOsmKind($placeData['type'])
|
||||||
|
@ -353,10 +366,15 @@ final class AdminController extends AbstractController
|
||||||
$stats->addPlace($newPlace);
|
$stats->addPlace($newPlace);
|
||||||
$newPlace->setStats($stats);
|
$newPlace->setStats($stats);
|
||||||
$this->entityManager->persist($newPlace);
|
$this->entityManager->persist($newPlace);
|
||||||
|
$addedCount++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update the places_count property
|
||||||
|
$stats->setPlacesCount($stats->getPlaces()->count());
|
||||||
|
$this->entityManager->persist($stats);
|
||||||
}
|
}
|
||||||
$this->entityManager->persist($newPlace);
|
|
||||||
$this->entityManager->flush();
|
$this->entityManager->flush();
|
||||||
|
|
||||||
$this->actionLogger->log('stats_de_ville', ['insee_code' => $insee_code, 'nom' => $stats->getZone()]);
|
$this->actionLogger->log('stats_de_ville', ['insee_code' => $insee_code, 'nom' => $stats->getZone()]);
|
||||||
|
@ -381,7 +399,10 @@ final class AdminController extends AbstractController
|
||||||
|
|
||||||
// Données pour le graphique des modifications par trimestre
|
// Données pour le graphique des modifications par trimestre
|
||||||
$modificationsByQuarter = [];
|
$modificationsByQuarter = [];
|
||||||
if (isset($commerces) && count($commerces) > 0) {
|
|
||||||
|
$commerces = $stats->getPlaces();
|
||||||
|
|
||||||
|
if (isset($commerces) && count($commerces) > 0 && is_iterable($commerces)) {
|
||||||
|
|
||||||
foreach ($commerces as $commerce) {
|
foreach ($commerces as $commerce) {
|
||||||
if ($commerce->getOsmDataDate()) {
|
if ($commerce->getOsmDataDate()) {
|
||||||
|
@ -403,23 +424,25 @@ final class AdminController extends AbstractController
|
||||||
'features' => []
|
'features' => []
|
||||||
];
|
];
|
||||||
|
|
||||||
foreach ($commerces as $commerce) {
|
if (isset($commerces) && is_iterable($commerces)) {
|
||||||
if ($commerce->getLat() && $commerce->getLon()) {
|
foreach ($commerces as $commerce) {
|
||||||
$geojson['features'][] = [
|
if ($commerce->getLat() && $commerce->getLon()) {
|
||||||
'type' => 'Feature',
|
$geojson['features'][] = [
|
||||||
'geometry' => [
|
'type' => 'Feature',
|
||||||
'type' => 'Point',
|
'geometry' => [
|
||||||
'coordinates' => [$commerce->getLon(), $commerce->getLat()]
|
'type' => 'Point',
|
||||||
],
|
'coordinates' => [$commerce->getLon(), $commerce->getLat()]
|
||||||
'properties' => [
|
],
|
||||||
'id' => $commerce->getOsmId(),
|
'properties' => [
|
||||||
'name' => $commerce->getName(),
|
'id' => $commerce->getOsmId(),
|
||||||
'main_tag' => $commerce->getMainTag(),
|
'name' => $commerce->getName(),
|
||||||
'address' => $commerce->getStreet() . ' ' . $commerce->getHousenumber(),
|
'main_tag' => $commerce->getMainTag(),
|
||||||
'note' => $commerce->getNoteContent(),
|
'address' => $commerce->getStreet() . ' ' . $commerce->getHousenumber(),
|
||||||
'osm_url' => 'https://www.openstreetmap.org/' . $commerce->getOsmKind() . '/' . $commerce->getOsmId()
|
'note' => $commerce->getNoteContent(),
|
||||||
]
|
'osm_url' => 'https://www.openstreetmap.org/' . $commerce->getOsmKind() . '/' . $commerce->getOsmId()
|
||||||
];
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2110,4 +2133,48 @@ final class AdminController extends AbstractController
|
||||||
$this->addFlash('success', 'Email envoyé avec succès');
|
$this->addFlash('success', 'Email envoyé avec succès');
|
||||||
return $this->redirectToRoute('app_admin_contacted_places');
|
return $this->redirectToRoute('app_admin_contacted_places');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove duplicate places from a Stats entity
|
||||||
|
* Duplicates are identified by having the same osm_id and osm_kind
|
||||||
|
*/
|
||||||
|
private function removeDuplicatePlaces(Stats $stats): void
|
||||||
|
{
|
||||||
|
$placeRepo = $this->entityManager->getRepository(Place::class);
|
||||||
|
|
||||||
|
// Get all places for this stats
|
||||||
|
$places = $placeRepo->findBy(['stats' => $stats]);
|
||||||
|
|
||||||
|
// Group places by osm_id and osm_kind
|
||||||
|
$groupedPlaces = [];
|
||||||
|
foreach ($places as $place) {
|
||||||
|
$key = $place->getOsmKind() . '_' . $place->getOsmId();
|
||||||
|
if (!isset($groupedPlaces[$key])) {
|
||||||
|
$groupedPlaces[$key] = [];
|
||||||
|
}
|
||||||
|
$groupedPlaces[$key][] = $place;
|
||||||
|
}
|
||||||
|
|
||||||
|
// For each group with more than one place, keep the first one and remove the rest
|
||||||
|
$removedCount = 0;
|
||||||
|
foreach ($groupedPlaces as $key => $group) {
|
||||||
|
if (count($group) > 1) {
|
||||||
|
// Keep the first place
|
||||||
|
$keepPlace = array_shift($group);
|
||||||
|
|
||||||
|
// Remove the rest
|
||||||
|
foreach ($group as $duplicatePlace) {
|
||||||
|
$stats->removePlace($duplicatePlace);
|
||||||
|
$this->entityManager->remove($duplicatePlace);
|
||||||
|
$removedCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If places were removed, update the places_count
|
||||||
|
if ($removedCount > 0) {
|
||||||
|
$stats->setPlacesCount($stats->getPlaces()->count());
|
||||||
|
$this->entityManager->persist($stats);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue