- Application FastAPI avec SQLite et Jinja2 - Gestion des véhicules (VIN, immatriculation, infos libres) - Gestion des interventions avec statut (en_attente/en_cours/termine) - Gestion des pièces détachées avec photos - Tableau de bord avec statistiques - Déploiement Docker + Traefik (HTTPS) - README complet en français
50 lines
2.9 KiB
HTML
50 lines
2.9 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}{{ client.nom }} {{ client.prenom }} - GarageManager{% endblock %}
|
|
{% block content %}
|
|
<div class="mb-6">
|
|
<a href="/clients" class="text-slate-500 hover:text-slate-700 text-sm flex items-center gap-1 mb-4"><i class="fas fa-arrow-left"></i> Retour aux clients</a>
|
|
<div class="flex justify-between items-start">
|
|
<div>
|
|
<h2 class="text-2xl font-bold text-slate-800">{{ client.nom }} {{ client.prenom }}</h2>
|
|
<div class="flex flex-wrap gap-4 mt-2 text-sm text-slate-500">
|
|
{% if client.telephone %}<span><i class="fas fa-phone mr-1"></i>{{ client.telephone }}</span>{% endif %}
|
|
{% if client.email %}<span><i class="fas fa-envelope mr-1"></i>{{ client.email }}</span>{% endif %}
|
|
{% if client.adresse %}<span><i class="fas fa-map-marker-alt mr-1"></i>{{ client.adresse }}</span>{% endif %}
|
|
</div>
|
|
</div>
|
|
<div class="flex gap-2">
|
|
<a href="/clients/{{ client.id }}/edit" class="border border-orange-300 text-orange-500 px-4 py-2 rounded-lg text-sm hover:bg-orange-50">Modifier</a>
|
|
<form method="post" action="/clients/{{ client.id }}/delete" onsubmit="return confirm('Supprimer ce client et tous ses véhicules ?')">
|
|
<button class="border border-red-300 text-red-500 px-4 py-2 rounded-lg text-sm hover:bg-red-50">Supprimer</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="bg-white rounded-xl shadow">
|
|
<div class="p-6 border-b border-gray-100 flex justify-between items-center">
|
|
<h3 class="font-semibold text-slate-800">Véhicules ({{ vehicules|length }})</h3>
|
|
<a href="/vehicules/new" class="bg-orange-500 text-white px-4 py-2 rounded-lg text-sm hover:bg-orange-600">+ Ajouter un véhicule</a>
|
|
</div>
|
|
{% if vehicules %}
|
|
<div class="divide-y divide-gray-100">
|
|
{% for v in vehicules %}
|
|
<div class="px-6 py-4 flex justify-between items-center hover:bg-gray-50">
|
|
<div>
|
|
<span class="font-medium text-slate-800">{{ v.immatriculation }}</span>
|
|
<span class="text-slate-500 ml-2">{{ v.marque }} {{ v.modele }}</span>
|
|
{% if v.annee %}<span class="text-slate-400 text-sm ml-2">({{ v.annee }})</span>{% endif %}
|
|
{% if v.kilometrage %}<span class="text-slate-400 text-sm ml-2">— {{ v.kilometrage }} km</span>{% endif %}
|
|
</div>
|
|
<div class="flex items-center gap-3">
|
|
<span class="bg-gray-100 text-gray-600 px-2 py-1 rounded-full text-xs">{{ v.nb_interventions }} intervention(s)</span>
|
|
<a href="/vehicules/{{ v.id }}" class="text-blue-500 hover:underline text-sm">Voir →</a>
|
|
</div>
|
|
</div>
|
|
{% endfor %}
|
|
</div>
|
|
{% else %}
|
|
<div class="p-8 text-center text-slate-400 text-sm">Aucun véhicule enregistré pour ce client.</div>
|
|
{% endif %}
|
|
</div>
|
|
{% endblock %}
|