mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-06-20 01:44:42 +02:00
add local mapbox script, update objects
This commit is contained in:
parent
c6e05463b1
commit
b1f6433b7d
13 changed files with 309 additions and 182 deletions
|
@ -92,6 +92,10 @@ final class AdminController extends AbstractController
|
|||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* rediriger vers l'url unique quand on est admin
|
||||
*/
|
||||
#[Route('/admin/commerce/{id}', name: 'app_admin_commerce')]
|
||||
public function commerce(int $id): Response
|
||||
{
|
||||
|
@ -115,6 +119,10 @@ final class AdminController extends AbstractController
|
|||
]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* récupérer les commerces de la zone, créer les nouveaux lieux, et mettre à jour les existants
|
||||
*/
|
||||
#[Route('/admin/labourer/{zip_code}', name: 'app_admin_labourer')]
|
||||
public function labourer_zone(string $zip_code): Response
|
||||
{
|
||||
|
@ -122,29 +130,32 @@ final class AdminController extends AbstractController
|
|||
$results = $this->motocultrice->labourer($zip_code);
|
||||
|
||||
|
||||
// Récupérer les commerces existants dans la base de données pour cette zone
|
||||
$commerces = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $zip_code]);
|
||||
|
||||
|
||||
// Récupérer ou créer les stats pour cette zone
|
||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $zip_code]);
|
||||
|
||||
|
||||
if (!$stats) {
|
||||
$stats = new Stats();
|
||||
$stats->setZone($zip_code);
|
||||
|
||||
// for commerce, set stats
|
||||
// Récupérer les commerces existants dans la base de données pour cette zone
|
||||
|
||||
|
||||
|
||||
}
|
||||
$commerces = $stats->getPlaces();
|
||||
// for commerce, set stats
|
||||
foreach ($commerces as $commerce) {
|
||||
$commerce->setStats($stats);
|
||||
$this->entityManager->persist($commerce);
|
||||
$stats->addPlace($commerce);
|
||||
}
|
||||
|
||||
// rebuild et persist
|
||||
$stats->computeCompletionPercent();
|
||||
$this->entityManager->persist($stats);
|
||||
$this->entityManager->flush();
|
||||
}
|
||||
|
||||
// rebuild et persist
|
||||
$stats->computeCompletionPercent();
|
||||
$this->entityManager->persist($stats);
|
||||
$this->entityManager->flush();
|
||||
// Si le nom de la zone n'est pas défini, le récupérer via OSM
|
||||
if (!$stats->getName()) {
|
||||
$city_name = $this->motocultrice->get_city_osm_from_zip_code($zip_code);
|
||||
|
@ -155,9 +166,6 @@ final class AdminController extends AbstractController
|
|||
}
|
||||
}
|
||||
|
||||
$commerces = $this->entityManager->getRepository(Place::class)->findBy(['zip_code' => $zip_code]);
|
||||
|
||||
|
||||
// Initialiser les compteurs
|
||||
$counters = [
|
||||
'avec_horaires' => 0,
|
||||
|
@ -203,59 +211,80 @@ final class AdminController extends AbstractController
|
|||
|
||||
if ($commerces) {
|
||||
// Extraire les osm_object_ids des commerces existants
|
||||
$osm_object_ids = array_map(function($commerce) {
|
||||
return $commerce->getOsmId();
|
||||
}, $commerces);
|
||||
foreach ($commerces as $commerce) {
|
||||
$osm_object_ids[] = $commerce->getOsmKind() . '_' . $commerce->getOsmId();
|
||||
}
|
||||
}
|
||||
// pour chaque résultat, vérifier que l'on a pas déjà un commerce avec le même osm_object_id
|
||||
|
||||
$new_places_list = array_filter($results, function($commerce) use ($osm_object_ids) {
|
||||
return !in_array($commerce['id'], $osm_object_ids);
|
||||
return !in_array($commerce['type'] . '_' . $commerce['id'], $osm_object_ids);
|
||||
});
|
||||
$existing_places_list = array_filter($results, function($commerce) use ($osm_object_ids) {
|
||||
return in_array($commerce['id'], $osm_object_ids);
|
||||
return in_array($commerce['type'] . '_' . $commerce['id'], $osm_object_ids);
|
||||
});
|
||||
|
||||
$new_places_counter = 0;
|
||||
|
||||
// var_dump($osm_object_ids);
|
||||
// var_dump($new_places_list);
|
||||
// var_dump($existing_places_list);
|
||||
// die();
|
||||
// on crée un commerce pour chaque résultat qui reste
|
||||
foreach ($new_places_list as $np) {
|
||||
$new_place = new Place();
|
||||
|
||||
$main_tag = $this->motocultrice->find_main_tag($np['tags']);
|
||||
if( !in_array($np['id'] . '_' . $np['type'] , $osm_object_ids )) {
|
||||
$new_place = new Place();
|
||||
|
||||
$new_place
|
||||
->setUuidForUrl($this->motocultrice->uuid_create())
|
||||
->setModifiedDate(new \DateTime())
|
||||
->setStats($stats)
|
||||
->setDead(false)
|
||||
->setOptedOut(false)
|
||||
->setOsmId($np['id'])
|
||||
->setMainTag($main_tag && isset($np['tags'][$main_tag]) ? $np['tags'][$main_tag] : "")
|
||||
->setOsmKind($np['type'])
|
||||
->setAskedHumainsSupport(false)
|
||||
->setLastContactAttemptDate(null)
|
||||
->update_place_from_overpass_data($np);
|
||||
$this->entityManager->persist($new_place);
|
||||
$main_tag = $this->motocultrice->find_main_tag($np['tags']);
|
||||
|
||||
$fullMainTag = $main_tag && isset($np['tags'][$main_tag]) ? $main_tag.'='.$np['tags'][$main_tag] : "";
|
||||
var_dump($fullMainTag);
|
||||
$new_place
|
||||
->setUuidForUrl($this->motocultrice->uuid_create())
|
||||
->setModifiedDate(new \DateTime())
|
||||
->setStats($stats)
|
||||
->setDead(false)
|
||||
->setOptedOut(false)
|
||||
->setZipCode($zip_code)
|
||||
->setOsmId($np['id'])
|
||||
->setMainTag($fullMainTag)
|
||||
->setOsmKind($np['type'])
|
||||
->setAskedHumainsSupport(false)
|
||||
->setLastContactAttemptDate(null)
|
||||
->update_place_from_overpass_data($np);
|
||||
$this->entityManager->persist($new_place);
|
||||
$new_place->setStats($stats);
|
||||
|
||||
$stats->addPlace($new_place);
|
||||
$new_places_counter++;
|
||||
}
|
||||
}
|
||||
|
||||
// Mise à jour des commerces existants avec les données Overpass
|
||||
foreach ($commerces as $existing_places_list) {
|
||||
foreach ($commerces as $existing_place) {
|
||||
foreach ($results as $result) {
|
||||
if ($existing_places_list->getOsmId() == $result['id'] && $existing_places_list->getOsmKind() == $result['type']) {
|
||||
$existing_places_list->update_place_from_overpass_data($result);
|
||||
$this->entityManager->persist($existing_places_list);
|
||||
if ($existing_place->getOsmId() == $result['id'] && $existing_place->getOsmKind() == $result['type']) {
|
||||
$existing_place->update_place_from_overpass_data($result);
|
||||
$existing_place->setStats($stats);
|
||||
|
||||
$this->entityManager->persist($existing_place);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$this->entityManager->persist($stats);
|
||||
$this->entityManager->flush();
|
||||
|
||||
|
||||
$stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $zip_code]);
|
||||
return $this->render('admin/labourage_results.html.twig', [
|
||||
'results' => $results,
|
||||
'commerces' => $commerces,
|
||||
'commerces' => $stats->getPlaces(),
|
||||
'zone' => $zip_code,
|
||||
'stats' => $stats,
|
||||
'new_places_counter' => $new_places_counter,
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue