mirror of
https://forge.chapril.org/tykayn/osm-commerces
synced 2025-10-04 17:04:53 +02:00
test page follow up unused stores ctc
This commit is contained in:
parent
00977d4fba
commit
2bbc7153c6
2 changed files with 129 additions and 1 deletions
|
@ -21,6 +21,7 @@ class FollowUpController extends AbstractController
|
|||
$this->followUpService = $followUpService;
|
||||
}
|
||||
|
||||
|
||||
#[Route('/admin/followup/{insee_code}/delete', name: 'admin_followup_delete', requirements: ['insee_code' => '\\d+'])]
|
||||
public function deleteFollowups(string $insee_code, EntityManagerInterface $em): Response {
|
||||
$stats = $em->getRepository(Stats::class)->findOneBy(['zone' => $insee_code]);
|
||||
|
@ -224,4 +225,11 @@ class FollowUpController extends AbstractController
|
|||
'icon' => FollowUpService::getFollowUpIcons()[$theme] ?? 'bi-question-circle',
|
||||
]);
|
||||
}
|
||||
}
|
||||
#[Route('/admin/followup/unused-stores', name: 'admin_followup_unused_stores')]
|
||||
public function unusedStores(): Response
|
||||
{
|
||||
return $this->render('admin/followup_unused_stores.html.twig', [
|
||||
'json_url' => 'https://complete-tes-commerces.fr/13/13001-aix-en-provence/json/aix-en-provence_last_stats.json'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
120
templates/admin/followup_unused_stores.html.twig
Normal file
120
templates/admin/followup_unused_stores.html.twig
Normal file
|
@ -0,0 +1,120 @@
|
|||
{% extends 'base.html.twig' %}
|
||||
|
||||
{% block title %}Magasins inutilisés - Aix-en-Provence{% endblock %}
|
||||
|
||||
{% block body %}
|
||||
<div class="container mt-4">
|
||||
<h1><i class="bi bi-shop fs-2"></i> Magasins inutilisés <small class="text-muted">- Aix-en-Provence</small></h1>
|
||||
|
||||
<div class="alert alert-info">
|
||||
Chargement des données en cours...
|
||||
</div>
|
||||
|
||||
<div id="stores-container" class="mt-4" style="display: none;">
|
||||
<h2>Liste des magasins inutilisés</h2>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Nom</th>
|
||||
<th>Type</th>
|
||||
<th>Adresse</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="stores-list">
|
||||
<!-- Les données seront chargées ici par JavaScript -->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="error-container" class="alert alert-danger mt-4" style="display: none;">
|
||||
<strong>Erreur:</strong> <span id="error-message">Une erreur est survenue lors du chargement des données.</span>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block javascripts %}
|
||||
{{ parent() }}
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const jsonUrl = {{ json_url|json_encode|raw }};
|
||||
const storesContainer = document.getElementById('stores-container');
|
||||
const storesList = document.getElementById('stores-list');
|
||||
const errorContainer = document.getElementById('error-container');
|
||||
const loadingAlert = document.querySelector('.alert-info');
|
||||
|
||||
// Fonction pour charger les données JSON via XHR
|
||||
function loadStoresData() {
|
||||
const xhr = new XMLHttpRequest();
|
||||
xhr.open('GET', jsonUrl, true);
|
||||
|
||||
xhr.onload = function() {
|
||||
loadingAlert.style.display = 'none';
|
||||
|
||||
if (xhr.status === 200) {
|
||||
try {
|
||||
const data = JSON.parse(xhr.responseText);
|
||||
displayStores(data);
|
||||
} catch (e) {
|
||||
console.error('Erreur de parsing JSON:', e);
|
||||
showError('Le format des données reçues est invalide.');
|
||||
}
|
||||
} else {
|
||||
showError('Impossible de charger les données (Statut: ' + xhr.status + ')');
|
||||
}
|
||||
};
|
||||
|
||||
xhr.onerror = function() {
|
||||
loadingAlert.style.display = 'none';
|
||||
showError('Une erreur réseau est survenue.');
|
||||
};
|
||||
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
// Fonction pour afficher les magasins dans le tableau
|
||||
function displayStores(data) {
|
||||
if (!data || !data.unused_stores || data.unused_stores.length === 0) {
|
||||
showError('Aucun magasin inutilisé trouvé dans les données.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Vider le tableau existant
|
||||
storesList.innerHTML = '';
|
||||
|
||||
// Ajouter chaque magasin au tableau
|
||||
data.unused_stores.forEach(function(store) {
|
||||
const row = document.createElement('tr');
|
||||
|
||||
const nameCell = document.createElement('td');
|
||||
nameCell.textContent = store.name || 'Non spécifié';
|
||||
|
||||
const typeCell = document.createElement('td');
|
||||
typeCell.textContent = store.type || 'Non spécifié';
|
||||
|
||||
const addressCell = document.createElement('td');
|
||||
addressCell.textContent = store.address || 'Non spécifié';
|
||||
|
||||
row.appendChild(nameCell);
|
||||
row.appendChild(typeCell);
|
||||
row.appendChild(addressCell);
|
||||
|
||||
storesList.appendChild(row);
|
||||
});
|
||||
|
||||
// Afficher le conteneur des magasins
|
||||
storesContainer.style.display = 'block';
|
||||
}
|
||||
|
||||
// Fonction pour afficher une erreur
|
||||
function showError(message) {
|
||||
document.getElementById('error-message').textContent = message;
|
||||
errorContainer.style.display = 'block';
|
||||
}
|
||||
|
||||
// Charger les données au chargement de la page
|
||||
loadStoresData();
|
||||
});
|
||||
</script>
|
||||
{% endblock %}
|
Loading…
Add table
Add a link
Reference in a new issue