retapage accueil, gestion de Demandes

This commit is contained in:
Tykayn 2025-07-16 17:00:09 +02:00 committed by tykayn
parent d777221d0d
commit f4c5e048ff
26 changed files with 2498 additions and 292 deletions

View file

@ -0,0 +1,68 @@
{% extends 'base.html.twig' %}
{% block title %}Places contactées{% endblock %}
{% block body %}
<div class="container mt-4">
<h1>Places contactées</h1>
<div class="mb-4">
<a href="{{ path('app_admin') }}" class="btn btn-secondary">Retour à l'administration</a>
<a href="{{ path('app_admin_demandes') }}" class="btn btn-primary">Liste des demandes</a>
</div>
<div class="card">
<div class="card-header">
<h2>Places contactées ({{ demandes|length }})</h2>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>Nom du commerce</th>
<th>Email</th>
<th>Place</th>
<th>Dernière tentative de contact</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{% for demande in demandes %}
<tr>
<td>{{ demande.id }}</td>
<td>{{ demande.query }}</td>
<td>{{ demande.email }}</td>
<td>
{% if demande.place %}
{{ demande.place.name }}
<small class="text-muted">({{ demande.place.osmKind }}/{{ demande.place.osmId }})</small>
{% else %}
<span class="text-muted">Non liée</span>
{% endif %}
</td>
<td>{{ demande.lastContactAttempt ? demande.lastContactAttempt|date('Y-m-d H:i:s') : '' }}</td>
<td>
<div class="btn-group" role="group">
<a href="{{ path('app_admin_demande_edit', {'id': demande.id}) }}" class="btn btn-sm btn-primary">
<i class="bi bi-pencil"></i> Éditer
</a>
<a href="{{ path('app_admin_demande_send_email', {'id': demande.id}) }}" class="btn btn-sm btn-success">
<i class="bi bi-envelope"></i> Renvoyer un email
</a>
</div>
</td>
</tr>
{% else %}
<tr>
<td colspan="6" class="text-center">Aucune place contactée trouvée</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,120 @@
{% extends 'base.html.twig' %}
{% block title %}Éditer une demande{% endblock %}
{% block body %}
<div class="container mt-4">
<h1>Éditer une demande</h1>
<div class="mb-4">
<a href="{{ path('app_admin_demandes') }}" class="btn btn-secondary">Retour à la liste</a>
</div>
<div class="row">
<div class="col-md-6">
<div class="card mb-4">
<div class="card-header">
<h2>Informations de la demande</h2>
</div>
<div class="card-body">
<table class="table">
<tbody>
<tr>
<th>ID</th>
<td>{{ demande.id }}</td>
</tr>
<tr>
<th>Nom du commerce</th>
<td>{{ demande.query }}</td>
</tr>
<tr>
<th>Email</th>
<td>{{ demande.email }}</td>
</tr>
<tr>
<th>Date de création</th>
<td>{{ demande.createdAt ? demande.createdAt|date('Y-m-d H:i:s') : '' }}</td>
</tr>
<tr>
<th>Statut</th>
<td>
<span class="badge {% if demande.status == 'new' %}bg-primary{% elseif demande.status == 'email_provided' %}bg-info{% elseif demande.status == 'linked_to_place' %}bg-success{% else %}bg-secondary{% endif %}">
{{ demande.status }}
</span>
</td>
</tr>
<tr>
<th>Place UUID</th>
<td>{{ demande.placeUuid }}</td>
</tr>
<tr>
<th>Dernière tentative de contact</th>
<td>{{ demande.lastContactAttempt ? demande.lastContactAttempt|date('Y-m-d H:i:s') : '' }}</td>
</tr>
</tbody>
</table>
</div>
</div>
{% if demande.place %}
<div class="card mb-4">
<div class="card-header">
<h2>Place associée</h2>
</div>
<div class="card-body">
<table class="table">
<tbody>
<tr>
<th>ID</th>
<td>{{ demande.place.id }}</td>
</tr>
<tr>
<th>Nom</th>
<td>{{ demande.place.name }}</td>
</tr>
<tr>
<th>Email</th>
<td>{{ demande.place.email }}</td>
</tr>
<tr>
<th>UUID</th>
<td>{{ demande.place.uuidForUrl }}</td>
</tr>
<tr>
<th>OSM ID</th>
<td>{{ demande.place.osmKind }}/{{ demande.place.osmId }}</td>
</tr>
</tbody>
</table>
<div class="mt-3">
<a href="{{ path('app_admin_demande_send_email', {'id': demande.id}) }}" class="btn btn-success">
<i class="bi bi-envelope"></i> Envoyer un email
</a>
</div>
</div>
</div>
{% endif %}
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">
<h2>Lier à une Place</h2>
</div>
<div class="card-body">
<form method="post">
<div class="mb-3">
<label for="placeUuid" class="form-label">UUID de la Place</label>
<input type="text" id="placeUuid" name="placeUuid" class="form-control" value="{{ demande.placeUuid }}" placeholder="Entrez l'UUID de la Place">
<div class="form-text">Entrez l'UUID d'une Place existante pour la lier à cette demande.</div>
</div>
<button type="submit" class="btn btn-primary">Enregistrer</button>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -0,0 +1,152 @@
{% extends 'base.html.twig' %}
{% block title %}Liste des demandes{% endblock %}
{% block body %}
<div class="container mt-4">
<h1>Liste des demandes</h1>
<div class="mb-4">
<a href="{{ path('app_admin') }}" class="btn btn-secondary">Retour à l'administration</a>
</div>
<div class="card mb-4">
<div class="card-header d-flex justify-content-between align-items-center">
<h2 class="mb-0">Filtrer par statut</h2>
{% if current_status %}
<a href="{{ path('app_admin_demandes') }}" class="btn btn-sm btn-outline-secondary">
<i class="bi bi-x-circle"></i> Effacer le filtre
</a>
{% endif %}
</div>
<div class="card-body">
<div class="d-flex flex-wrap gap-2" style="row-gap: 0.5rem;">
<a href="{{ path('app_admin_demandes') }}" class="btn btn-sm {% if current_status is null %}btn-primary{% else %}btn-outline-primary{% endif %}">
<i class="bi bi-funnel"></i> Tous <span class="badge bg-secondary">{{ total_count }}</span>
</a>
{% for status in all_statuses %}
<a href="{{ path('app_admin_demandes', {'status': status}) }}" class="btn btn-sm {% if current_status == status %}btn-primary{% else %}btn-outline-primary{% endif %}">
{% if status == 'new' %}
<i class="bi bi-star"></i> Nouveau
{% elseif status == 'email_provided' %}
<i class="bi bi-envelope"></i> Email fourni
{% elseif status == 'ready' %}
<i class="bi bi-check-circle"></i> Prêt
{% elseif status == 'email_sent' %}
<i class="bi bi-send"></i> Email envoyé
{% elseif status == 'email_failed' %}
<i class="bi bi-exclamation-triangle"></i> Échec d'envoi
{% elseif status == 'email_opened' %}
<i class="bi bi-envelope-open"></i> Email ouvert
{% elseif status == 'edit_form_opened' %}
<i class="bi bi-pencil-square"></i> Formulaire ouvert
{% elseif status == 'place_modified' %}
<i class="bi bi-check2-all"></i> Place modifiée
{% elseif status == 'linked_to_place' %}
<i class="bi bi-link"></i> Lié à une place
{% else %}
{{ status }}
{% endif %}
<span class="badge bg-secondary">{{ status_counts[status]|length }}</span>
</a>
{% endfor %}
</div>
</div>
</div>
<div class="card">
<div class="card-header">
<h2>
Demandes ({{ demandes|length }})
{% if current_status %}
<small class="text-muted">
- Filtre actif :
{% if current_status == 'new' %}
<span class="badge bg-primary">Nouveau</span>
{% elseif current_status == 'email_provided' %}
<span class="badge bg-info">Email fourni</span>
{% elseif current_status == 'ready' %}
<span class="badge bg-success">Prêt</span>
{% elseif current_status == 'email_sent' %}
<span class="badge bg-success">Email envoyé</span>
{% elseif current_status == 'email_failed' %}
<span class="badge bg-danger">Échec d'envoi</span>
{% elseif current_status == 'email_opened' %}
<span class="badge bg-warning">Email ouvert</span>
{% elseif current_status == 'edit_form_opened' %}
<span class="badge bg-warning">Formulaire ouvert</span>
{% elseif current_status == 'place_modified' %}
<span class="badge bg-success">Place modifiée</span>
{% elseif current_status == 'linked_to_place' %}
<span class="badge bg-success">Lié à une place</span>
{% else %}
<span class="badge bg-secondary">{{ current_status }}</span>
{% endif %}
</small>
{% endif %}
</h2>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>ID</th>
<th>Nom du commerce</th>
<th>Email</th>
<th>Date de création</th>
<th>Statut</th>
<th>Place UUID</th>
<th>Dernière tentative de contact</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
{% for demande in demandes %}
<tr>
<td>{{ demande.id }}</td>
<td>{{ demande.query }}</td>
<td>{{ demande.email }}</td>
<td>{{ demande.createdAt ? demande.createdAt|date('Y-m-d H:i:s') : '' }}</td>
<td>
<span class="badge
{% if demande.status == 'new' %}bg-primary
{% elseif demande.status == 'email_provided' %}bg-info
{% elseif demande.status == 'ready' %}bg-success
{% elseif demande.status == 'email_sent' %}bg-success
{% elseif demande.status == 'email_failed' %}bg-danger
{% elseif demande.status == 'email_opened' %}bg-warning
{% elseif demande.status == 'edit_form_opened' %}bg-warning
{% elseif demande.status == 'place_modified' %}bg-success
{% elseif demande.status == 'linked_to_place' %}bg-success
{% else %}bg-secondary{% endif %}">
{{ demande.status }}
</span>
</td>
<td>{{ demande.placeUuid }}</td>
<td>{{ demande.lastContactAttempt ? demande.lastContactAttempt|date('Y-m-d H:i:s') : '' }}</td>
<td>
<div class="btn-group" role="group">
<a href="{{ path('app_admin_demande_edit', {'id': demande.id}) }}" class="btn btn-sm btn-primary">
<i class="bi bi-pencil"></i> Éditer
</a>
{% if demande.place %}
<a href="{{ path('app_admin_demande_send_email', {'id': demande.id}) }}" class="btn btn-sm btn-success">
<i class="bi bi-envelope"></i> Envoyer un email
</a>
{% endif %}
</div>
</td>
</tr>
{% else %}
<tr>
<td colspan="8" class="text-center">Aucune demande trouvée</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
</div>
{% endblock %}

View file

@ -1,15 +1,44 @@
{% extends 'base.html.twig' %}
{% block title %}Hello AdminController!{% endblock %}
{% block title %}Administration{% endblock %}
{% block body %}
<style>
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
</style>
<div class="container mt-4">
<h1>Administration</h1>
<div class="example-wrapper">
<h1>Hello {{ controller_name }}! ✅</h1>
<div class="row mt-4">
<div class="col-md-6">
<div class="card mb-4">
<div class="card-header">
<h2>Gestion des demandes</h2>
</div>
<div class="card-body">
<div class="list-group">
<a href="{{ path('app_admin_demandes') }}" class="list-group-item list-group-item-action">
<i class="bi bi-list-ul"></i> Liste des demandes
</a>
<a href="{{ path('app_admin_contacted_places') }}" class="list-group-item list-group-item-action">
<i class="bi bi-envelope"></i> Places contactées
</a>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card mb-4">
<div class="card-header">
<h2>Autres actions</h2>
</div>
<div class="card-body">
<div class="list-group">
<a href="{{ path('app_public_index') }}" class="list-group-item list-group-item-action">
<i class="bi bi-house"></i> Retour à l'accueil
</a>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}