test page follow up unused stores ctc

This commit is contained in:
Tykayn 2025-07-03 17:33:05 +02:00 committed by tykayn
parent 00977d4fba
commit 2bbc7153c6
2 changed files with 129 additions and 1 deletions

View file

@ -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'
]);
}
}

View 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 %}