retapage accueil, gestion de Demandes
This commit is contained in:
parent
d777221d0d
commit
f4c5e048ff
26 changed files with 2498 additions and 292 deletions
68
templates/admin/demandes/contacted_places.html.twig
Normal file
68
templates/admin/demandes/contacted_places.html.twig
Normal 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 %}
|
120
templates/admin/demandes/edit.html.twig
Normal file
120
templates/admin/demandes/edit.html.twig
Normal 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 %}
|
152
templates/admin/demandes/list.html.twig
Normal file
152
templates/admin/demandes/list.html.twig
Normal 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 %}
|
|
@ -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 %}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue