From 918527e15e78ad87b4092824f732d6582b74a6d4 Mon Sep 17 00:00:00 2001 From: Tykayn Date: Tue, 17 Jun 2025 16:23:29 +0200 Subject: [PATCH] up infos habitants sur stats --- assets/utils.js | 3 +- labourage.sh | 12 ++ migrations/Version20250617141249.php | 35 ++++ migrations/Version20250617141824.php | 35 ++++ public/assets/img/josm.png | Bin 0 -> 36702 bytes public/assets/img/logo-osm.png | Bin 0 -> 12811 bytes public/assets/img/osm-id.png | Bin 0 -> 45652 bytes public/js/utils.js | 230 ++++++++++++++++----------- src/Controller/AdminController.php | 24 ++- src/Entity/Place.php | 15 ++ src/Entity/Stats.php | 15 ++ templates/admin/stats.html.twig | 205 ++++++++++++++---------- templates/admin/stats/row.html.twig | 32 +++- templates/public/dashboard.html.twig | 116 +++++++++++--- templates/public/edit.html.twig | 22 +-- templates/public/home.html.twig | 55 ++++--- 16 files changed, 559 insertions(+), 240 deletions(-) create mode 100644 migrations/Version20250617141249.php create mode 100644 migrations/Version20250617141824.php create mode 100644 public/assets/img/josm.png create mode 100644 public/assets/img/logo-osm.png create mode 100644 public/assets/img/osm-id.png diff --git a/assets/utils.js b/assets/utils.js index 7358a94..8b692b7 100644 --- a/assets/utils.js +++ b/assets/utils.js @@ -1,4 +1,3 @@ - function colorHeadingTable() { const headers = document.querySelectorAll('th'); @@ -21,7 +20,7 @@ function check_validity(e) { 'input[name="commerce_tag_value__contact:email"]', 'input[name="commerce_tag_value__contact:phone"]', 'input[name="commerce_tag_value__contact:website"]', - 'commerce_tag_value__contact:mastodon', + 'input[name="commerce_tag_value__contact:mastodon"]', 'input[name="commerce_tag_value__address"]', 'input[name="custom_opening_hours"]', 'input[name="commerce_tag_value__contact:street"]', diff --git a/labourage.sh b/labourage.sh index cc51777..59dca32 100644 --- a/labourage.sh +++ b/labourage.sh @@ -12,6 +12,18 @@ codes_insee=( "33063" # Bordeaux "59350" # Lille "35238" # Rennes + "75101" # Paris 1er + "75102" # Paris 2e + "75103" # Paris 3e + "75104" # Paris 4e + "75105" # Paris 5e + "75106" # Paris 6e + "75107" # Paris 7e + "75108" # Paris 8e + "75109" # Paris 9e + "75110" # Paris 10e + "75111" # Paris 11e + "75112" # Paris 12e "75113" # Paris 13e "75114" # Paris 14e "75115" # Paris 15e diff --git a/migrations/Version20250617141249.php b/migrations/Version20250617141249.php new file mode 100644 index 0000000..006f42b --- /dev/null +++ b/migrations/Version20250617141249.php @@ -0,0 +1,35 @@ +addSql(<<<'SQL' + ALTER TABLE place ADD habitants INT DEFAULT NULL + SQL); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql(<<<'SQL' + ALTER TABLE place DROP habitants + SQL); + } +} diff --git a/migrations/Version20250617141824.php b/migrations/Version20250617141824.php new file mode 100644 index 0000000..c6d01f3 --- /dev/null +++ b/migrations/Version20250617141824.php @@ -0,0 +1,35 @@ +addSql(<<<'SQL' + ALTER TABLE stats ADD population INT DEFAULT NULL + SQL); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql(<<<'SQL' + ALTER TABLE stats DROP population + SQL); + } +} diff --git a/public/assets/img/josm.png b/public/assets/img/josm.png new file mode 100644 index 0000000000000000000000000000000000000000..1764904bb0f2755488598088a3c2e3b5ce681df6 GIT binary patch literal 36702 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 literal 0 HcmV?d00001 diff --git a/public/assets/img/osm-id.png b/public/assets/img/osm-id.png new file mode 100644 index 0000000000000000000000000000000000000000..2ea19148b8d118cc92edd4ca26311fb232a95e50 GIT binary patch literal 45652 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 { - const item = document.createElement('div'); - item.className = 'suggestion-item'; - item.innerHTML = ` -
${suggestion.display_name}
-
- ${suggestion.type} - ${suggestion.postcode || ''} -
- `; - - item.addEventListener('click', () => { - searchInput.value = suggestion.display_name; - clearSuggestions(); - if (onCitySelected) { - onCitySelected(suggestion); - } - }); - - suggestionList.appendChild(item); - }); - - suggestionList.style.display = 'block'; - } - - // Fonction pour effectuer la recherche - async function performSearch(query) { - if (!query || query.length < 3) { + if (query.length < 2) { clearSuggestions(); return; } - try { - // Recherche avec Nominatim - const response = await fetch(`https://nominatim.openstreetmap.org/search?format=json&q=${encodeURIComponent(query)}&countrycodes=fr&limit=5`); - const data = await response.json(); - - // Filtrer pour ne garder que les villes - const citySuggestions = data.filter(item => - item.type === 'city' || - item.type === 'town' || - item.type === 'village' || - item.type === 'administrative' - ); - - displaySuggestions(citySuggestions); - } catch (error) { - console.error('Erreur lors de la recherche:', error); - clearSuggestions(); - } - } - - // Gestionnaire d'événements pour l'input - searchInput.addEventListener('input', (e) => { - const query = e.target.value.trim(); - - // Annuler la recherche précédente - if (searchTimeout) { - clearTimeout(searchTimeout); - } - - // Attendre 300ms après la dernière frappe avant de lancer la recherche - searchTimeout = setTimeout(() => { - performSearch(query); - }, 300); + timeoutId = setTimeout(() => performSearch(query), 300); }); - // Fermer la liste des suggestions en cliquant en dehors - document.addEventListener('click', (e) => { + function performSearch(query) { + fetch(`https://geo.api.gouv.fr/communes?nom=${encodeURIComponent(query)}&fields=nom,code,codesPostaux&limit=5`) + .then(response => response.json()) + .then(data => { + const citySuggestions = data.map(city => ({ + name: city.nom, + postcode: city.codesPostaux[0], + insee: city.code + })); + displaySuggestions(citySuggestions); + }) + .catch(error => { + console.error('Erreur lors de la recherche:', error); + clearSuggestions(); + }); + } + + function displaySuggestions(suggestions) { + clearSuggestions(); + suggestions.forEach(suggestion => { + const li = document.createElement('li'); + li.className = 'list-group-item'; + li.textContent = `${suggestion.name} (${suggestion.postcode})`; + li.addEventListener('click', () => { + searchInput.value = suggestion.name; + clearSuggestions(); + if (onSelect) onSelect(suggestion); + }); + suggestionList.appendChild(li); + }); + } + + function clearSuggestions() { + suggestionList.innerHTML = ''; + } + + // Fermer les suggestions en cliquant en dehors + document.addEventListener('click', function (e) { if (!searchInput.contains(e.target) && !suggestionList.contains(e.target)) { clearSuggestions(); } @@ -100,17 +70,97 @@ function setupCitySearch(searchInputId, suggestionListId, onCitySelected) { } // Fonction pour formater l'URL de labourage -function getLabourerUrl(zipCode) { +/** + * Génère l'URL de labourage pour un code postal donné + * @param {string} zipCode - Le code postal + * @returns {string} L'URL de labourage + */ +export function getLabourerUrl(zipCode) { return `/admin/labourer/${zipCode}`; } // Fonction pour gérer la soumission du formulaire d'ajout de ville -window.handleAddCityFormSubmit = function(event) { +export function handleAddCityFormSubmit(event) { event.preventDefault(); const form = event.target; - const zipCode = form.querySelector('input[name="zip_code"]').value; - - if (zipCode) { - window.location.href = getLabourerUrl(zipCode); + const submitButton = form.querySelector('button[type="submit"]'); + const zipCodeInput = form.querySelector('input[name="zip_code"]'); + if (!zipCodeInput.value) { + return; } -}; \ No newline at end of file + // Afficher le spinner + submitButton.disabled = true; + const originalContent = submitButton.innerHTML; + submitButton.innerHTML = ' Labourer...'; + // Rediriger + window.location.href = getLabourerUrl(zipCodeInput.value); +} + +/** + * Colore les cellules d'un tableau en fonction des pourcentages + * @param {string} selector - Le sélecteur CSS pour cibler les cellules à colorer + * @param {string} color - La couleur de base en format RGB (ex: '154, 205, 50') + */ +export function colorizePercentageCells(selector, color = '154, 205, 50') { + document.querySelectorAll(selector).forEach(cell => { + const percentage = parseInt(cell.textContent); + if (!isNaN(percentage)) { + const alpha = percentage / 100; + cell.style.backgroundColor = `rgba(${color}, ${alpha})`; + } + }); +} + +/** + * Colore les cellules d'un tableau avec un gradient relatif à la valeur maximale + * @param {string} selector - Le sélecteur CSS pour cibler les cellules à colorer + * @param {string} color - La couleur de base en format RGB (ex: '154, 205, 50') + */ +export function colorizePercentageCellsRelative(selector, color = '154, 205, 50') { + // Récupérer toutes les cellules + const cells = document.querySelectorAll(selector); + + // Trouver la valeur maximale + let maxValue = 0; + cells.forEach(cell => { + const value = parseInt(cell.textContent); + if (!isNaN(value) && value > maxValue) { + maxValue = value; + } + }); + + // Appliquer le gradient relatif à la valeur max + cells.forEach(cell => { + const value = parseInt(cell.textContent); + if (!isNaN(value)) { + const alpha = value / maxValue; // Ratio relatif au maximum + cell.style.backgroundColor = `rgba(${color}, ${alpha})`; + } + }); +} + +/** + * Ajuste dynamiquement la taille du texte des éléments list-group-item selon leur nombre + * @param {string} selector - Le sélecteur CSS des éléments à ajuster + * @param {number} [minFont=0.8] - Taille de police minimale en rem + * @param {number} [maxFont=1.2] - Taille de police maximale en rem + */ +export function adjustListGroupFontSize(selector, minFont = 0.8, maxFont = 1.2) { + const items = document.querySelectorAll(selector); + const count = items.length; + let fontSize = maxFont; + if (count > 0) { + // Plus il y a d'items, plus la taille diminue, mais jamais en dessous de minFont + fontSize = Math.max(minFont, maxFont - (count - 5) * 0.05); + } + items.forEach(item => { + item.style.fontSize = fontSize + 'rem'; + }); +} + +function check_validity() { + if (!document.getElementById('editLand')) { + return; + } + // ... suite du code ... +} \ No newline at end of file diff --git a/src/Controller/AdminController.php b/src/Controller/AdminController.php index 6c74ab3..0b3b30f 100644 --- a/src/Controller/AdminController.php +++ b/src/Controller/AdminController.php @@ -131,10 +131,8 @@ final class AdminController extends AbstractController // Récupérer ou créer les stats pour cette zone $stats = $this->entityManager->getRepository(Stats::class)->findOneBy(['zone' => $zip_code]); - $city = $this->motocultrice->get_city_osm_from_zip_code($zip_code); if (!$stats) { - $stats = new Stats(); $stats->setZone($zip_code) ->setPlacesCount(0) @@ -144,11 +142,27 @@ final class AdminController extends AbstractController ->setAvecAccessibilite(0) ->setAvecNote(0) ->setCompletionPercent(0); - $this->entityManager->persist($stats); - $this->entityManager->flush(); - } + $this->entityManager->persist($stats); + $this->entityManager->flush(); + } $stats->setName($city); + // Récupérer la population via l'API + $population = null; + try { + $apiUrl = 'https://geo.api.gouv.fr/communes/' . $zip_code . '?fields=population'; + $response = file_get_contents($apiUrl); + if ($response !== false) { + $data = json_decode($response, true); + if (isset($data['population'])) { + $population = (int)$data['population']; + $stats->setPopulation($population); + } + } + } catch (\Exception $e) { + // Ne rien faire si l'API échoue + } + // Récupérer toutes les données $places = $this->motocultrice->labourer($zip_code); $processedCount = 0; diff --git a/src/Entity/Place.php b/src/Entity/Place.php index 1ceb91b..a3d3328 100644 --- a/src/Entity/Place.php +++ b/src/Entity/Place.php @@ -100,6 +100,9 @@ class Place #[ORM\Column(length: 255, nullable: true)] private ?string $siret = null; + #[ORM\Column(nullable: true)] + private ?int $habitants = null; + public function getMainTag(): ?string { return $this->main_tag; @@ -579,4 +582,16 @@ class Place return $this; } + + public function getHabitants(): ?int + { + return $this->habitants; + } + + public function setHabitants(?int $habitants): static + { + $this->habitants = $habitants; + + return $this; + } } diff --git a/src/Entity/Stats.php b/src/Entity/Stats.php index 57a06d3..6db0de4 100644 --- a/src/Entity/Stats.php +++ b/src/Entity/Stats.php @@ -55,6 +55,10 @@ class Stats #[ORM\Column(length: 255, nullable: true)] private ?string $name = null; + // nombre d'habitants dans la zone + #[ORM\Column(type: Types::INTEGER, nullable: true)] + private ?int $population = null; + // calcule le pourcentage de complétion de la zone public function computeCompletionPercent(): ?int { @@ -255,6 +259,17 @@ class Stats return $this; } + + public function getPopulation(): ?int + { + return $this->population; + } + + public function setPopulation(?int $population): static + { + $this->population = $population; + return $this; + } } diff --git a/templates/admin/stats.html.twig b/templates/admin/stats.html.twig index ac20d2b..a4cf711 100644 --- a/templates/admin/stats.html.twig +++ b/templates/admin/stats.html.twig @@ -37,6 +37,27 @@ + {% if stats.population %} +
+
+ + Population : {{ stats.population|number_format(0, '.', ' ') }} + +
+
+ + 1 lieu pour + {% set ratio = (stats.population and stats.places|length > 0) ? (stats.population / stats.places|length)|round(0, 'ceil') : '?' %} + {{ ratio|number_format(0, '.', ' ') }} habitants + +
+
+ + {{ stats.getAvecNote() }} / {{ stats.places|length }} commerces avec note + +
+
+ {% endif %}
@@ -198,28 +219,52 @@ function calculateCompletion(element) { let completionCount = 0; let totalFields = 0; + let missingFields = []; const fieldsToCheck = [ - 'name', - 'contact:street', - 'contact:housenumber', - 'opening_hours', - 'contact:website', - 'contact:phone', - 'wheelchair' + {name: 'name', label: 'Nom du commerce'}, + {name: 'contact:street', label: 'Rue'}, + {name: 'contact:housenumber', label: 'Numéro'}, + {name: 'opening_hours', label: 'Horaires d\'ouverture'}, + {name: 'contact:website', label: 'Site web'}, + {name: 'contact:phone', label: 'Téléphone'}, + {name: 'wheelchair', label: 'Accessibilité PMR'} ]; fieldsToCheck.forEach(field => { totalFields++; - if (element.tags && element.tags[field]) { + if (element.tags && element.tags[field.name]) { completionCount++; + } else { + missingFields.push(field.label); } }); - return (completionCount / totalFields) * 100; + return { + percentage: (completionCount / totalFields) * 100, + missingFields: missingFields + }; + } + + function showMissingFieldsPopup(element) { + const completion = calculateCompletion(element); + if (completion.percentage < 100) { + const popup = new maplibregl.Popup() + .setLngLat(element.geometry.coordinates) + .setHTML(` +
+
Informations manquantes pour ${element.tags?.name || 'ce commerce'}
+
    + ${completion.missingFields.map(field => `
  • ${field}
  • `).join('')} +
+
+ `); + popup.addTo(map); + } } function createPopupContent(element) { + const completion = calculateCompletion(element); let content = `
`; + if (completion.percentage < 100) { + content += ` +
+
Informations manquantes :
+
    + ${completion.missingFields.map(field => `
  • ${field}
  • `).join('')} +
+
+ `; + } + content += ''; // Ajouter tous les tags @@ -250,7 +306,7 @@ elements.forEach(element => { const completion = calculateCompletion(element); - const bucketIndex = Math.floor(completion / 10); + const bucketIndex = Math.floor(completion.percentage / 10); buckets[bucketIndex]++; }); @@ -356,7 +412,7 @@ properties: { id: element.id, name: element.tags?.name || 'Sans nom', - completion: completion, + completion: completion.percentage, center: [lon, lat] }, geometry: { @@ -400,86 +456,33 @@ function updateMarkers() { // Supprimer tous les marqueurs existants - features.forEach(feature => { - const layerId = `marker-${feature.properties.id}`; - // Supprimer d'abord la couche - if (map.getLayer(layerId)) { - map.removeLayer(layerId); - } - // Puis supprimer la source - if (map.getSource(layerId)) { - map.removeSource(layerId); - } - }); - - // Supprimer tous les marqueurs en goutte existants dropMarkers.forEach(marker => marker.remove()); dropMarkers = []; - if (currentMarkerType === 'circle') { - // Afficher les cercles - features.forEach(feature => { - const layerId = `marker-${feature.properties.id}`; - const circle = turf.circle( - feature.properties.center, - 5/1000, - { steps: 64, units: 'kilometers' } - ); + features.forEach(feature => { + const el = document.createElement('div'); + el.className = 'marker'; + el.style.backgroundColor = getCompletionColor(feature.properties.completion); + el.style.width = '15px'; + el.style.height = '15px'; + el.style.borderRadius = '50%'; + el.style.border = '2px solid white'; + el.style.cursor = 'pointer'; - map.addSource(layerId, { - 'type': 'geojson', - 'data': circle - }); + const marker = new maplibregl.Marker(el) + .setLngLat(feature.geometry.coordinates) + .addTo(map); - map.addLayer({ - 'id': layerId, - 'type': 'fill', - 'source': layerId, - 'paint': { - 'fill-color': getCompletionColor(feature.properties.completion), - 'fill-opacity': 0.7 - } - }); - }); - - // Ajouter les popups sur les cercles - map.on('click', function(e) { - const clickedFeatures = map.queryRenderedFeatures(e.point, { - layers: features.map(f => `marker-${f.properties.id}`) - }); - - if (clickedFeatures.length > 0) { - const feature = clickedFeatures[0]; - const elementId = feature.layer.id.replace('marker-', ''); - const element = overpassData[elementId]; - - if (element) { - // Créer le contenu de la popup - const popupContent = createPopupContent(element); - - new maplibregl.Popup() - .setLngLat(e.lngLat) - .setHTML(popupContent) - .addTo(map); - } + // Ajouter l'événement de clic + el.addEventListener('click', () => { + const element = overpassData[feature.properties.id]; + if (element) { + showMissingFieldsPopup(element); } }); - } else { - // Afficher les marqueurs en goutte - features.forEach(feature => { - const element = overpassData[feature.properties.id]; - const popupContent = element ? createPopupContent(element) : `

${feature.properties.name}

`; - - const marker = new maplibregl.Marker({ - color: getCompletionColor(feature.properties.completion) - }) - .setLngLat(feature.properties.center) - .setPopup(new maplibregl.Popup({ offset: 25 }) - .setHTML(popupContent)) - .addTo(map); - dropMarkers.push(marker); - }); - } + + dropMarkers.push(marker); + }); } function draw_circle_containing_all_features(map) { @@ -722,6 +725,40 @@ }); sortTable(); + + // Initialiser les popovers pour les cellules de complétion + const completionCells = document.querySelectorAll('.completion-cell'); + completionCells.forEach(cell => { + new bootstrap.Popover(cell, { + trigger: 'hover', + html: true + }); + + // Fermer tous les popovers au clic sur une cellule + cell.addEventListener('click', function(e) { + e.stopPropagation(); + completionCells.forEach(otherCell => { + if (otherCell !== cell) { + const popover = bootstrap.Popover.getInstance(otherCell); + if (popover) { + popover.hide(); + } + } + }); + }); + }); + + // Fermer tous les popovers quand on clique ailleurs + document.addEventListener('click', function(e) { + if (!e.target.closest('.completion-cell')) { + completionCells.forEach(cell => { + const popover = bootstrap.Popover.getInstance(cell); + if (popover) { + popover.hide(); + } + }); + } + }); }); function toggleCompletionInfo() { diff --git a/templates/admin/stats/row.html.twig b/templates/admin/stats/row.html.twig index dba5d08..4e351a4 100644 --- a/templates/admin/stats/row.html.twig +++ b/templates/admin/stats/row.html.twig @@ -10,7 +10,37 @@ {% endif %} - {% for stat in stats %} - + {% endfor %} @@ -129,5 +163,35 @@ + +
+
+
+
+

Labourer une ville

+

+ + Rechercher une ville pour labourer ses commerces +

+
+
+ +
+
+ + + +
+
+
+
{% endblock %} diff --git a/templates/public/edit.html.twig b/templates/public/edit.html.twig index 3077d1e..a205bfb 100644 --- a/templates/public/edit.html.twig +++ b/templates/public/edit.html.twig @@ -4,7 +4,7 @@ {% block body %} -
+
@@ -15,7 +15,7 @@ {% if commerce_overpass is not empty %}
- {# nom #} +
@@ -86,13 +86,10 @@
- - {% endif %}
-
@@ -126,17 +123,20 @@ {{ 'display.by'|trans }} {{ commerce_overpass['@attributes'].user }}
- -
{{ 'display.view_on_osm'|trans }} + {{ asset('img/logo-osm.png') }} - -
diff --git a/templates/public/home.html.twig b/templates/public/home.html.twig index d711a3c..0f5a149 100644 --- a/templates/public/home.html.twig +++ b/templates/public/home.html.twig @@ -55,6 +55,14 @@ position: relative; margin-bottom: 1rem; } + .list-group-item{ + cursor: pointer; + + } + .list-group-item:hover{ + background-color: #f5f5f5; + color: #000; + } {% endblock %} @@ -94,29 +102,24 @@
-

Villes disponibles

-

Visualisez un tableau de bord de la complétion des commerces et autres lieux d'intérêt pour votre ville grâce à OpenStreetMap

+

Villes disponibles

+

Visualisez un tableau de bord de la complétion des commerces et autres lieux d'intérêt pour votre ville grâce à OpenStreetMap

+
+ + {% for stat in stats %} + +
+ {{ stat.zone }} + {{ stat.name }}
-
-
-
-
- Ajoutez votre ville - -
-
-
-
+ {{ stat.placesCount }} lieux + + {% endfor %} + + + +
{% endblock %} +{% block javascripts %} + {{ parent() }} + +{% endblock %} +
+ {{ commerce.getCompletionPercentage() }} diff --git a/templates/public/dashboard.html.twig b/templates/public/dashboard.html.twig index 35f6a52..b1a21ce 100644 --- a/templates/public/dashboard.html.twig +++ b/templates/public/dashboard.html.twig @@ -53,9 +53,21 @@ {% block javascripts %} {{ parent() }} - - {% endblock %} @@ -77,28 +113,6 @@
-
-
-
-

Labourer une ville

-
-
- -
-
- - -
-
-
-
-
- -

Statistiques par ville

@@ -115,12 +129,32 @@
{{ stat.name }} + {{ stat.name }} + {{ stat.zone }} {{ stat.completionPercent }}% {{ stat.places|length }} - Voir les statistiques +