2025-12-19 09:43:33 +00:00
|
|
|
"""Views pour la gestion des véhicules."""
|
|
|
|
|
|
|
|
|
|
from django.shortcuts import render, redirect
|
|
|
|
|
from django.http import JsonResponse
|
|
|
|
|
|
|
|
|
|
from authentification.models import Profile
|
|
|
|
|
from django.contrib.auth.models import Group
|
|
|
|
|
from django.contrib.auth.decorators import login_required
|
2026-08-03 14:31:48 +00:00
|
|
|
from django.contrib import messages
|
2025-12-19 09:43:33 +00:00
|
|
|
from . import forms
|
|
|
|
|
from . import models
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@login_required(login_url="login")
|
|
|
|
|
def index(request):
|
2026-01-21 11:03:11 +00:00
|
|
|
"""Retournez la page d'accueil de la gestion des véhicules.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
HttpResponse
|
|
|
|
|
La réponse HTTP avec le rendu de la page d'accueil de la gestion des
|
|
|
|
|
véhicules.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
formulaire_enregistrer_vehicule = forms.EnregistrerVehicule()
|
|
|
|
|
formulaire_demande_vehicule = forms.EnregistrerDemande()
|
|
|
|
|
parc_vehicule = models.Vehicule.objects.all().order_by("-id")
|
|
|
|
|
|
|
|
|
|
return render(
|
|
|
|
|
request,
|
|
|
|
|
"gestion_vehicule/index.html",
|
|
|
|
|
{
|
|
|
|
|
"formulaire_enregistrer_vehicule": formulaire_enregistrer_vehicule,
|
|
|
|
|
"parc_vehicule": parc_vehicule,
|
|
|
|
|
"formulaire_demande_vehicule": formulaire_demande_vehicule,
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@login_required(login_url="login")
|
|
|
|
|
def enregistrer_voiture(request):
|
2026-01-21 11:03:11 +00:00
|
|
|
"""Enregistrez un nouveau véhicule.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
HttpResponseRedirect
|
|
|
|
|
Redirige vers la page d'accueil de la gestion des véhicules après
|
|
|
|
|
l'enregistrement du véhicule.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
if request.method == "POST":
|
|
|
|
|
form_enregistrement = forms.EnregistrerVehicule(
|
|
|
|
|
request.POST,
|
|
|
|
|
request.FILES,
|
|
|
|
|
)
|
|
|
|
|
if form_enregistrement.is_valid:
|
|
|
|
|
form_enregistrement.save()
|
|
|
|
|
|
|
|
|
|
return redirect("gestion_vehicule:index")
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
@login_required(login_url="login")
|
|
|
|
|
def enregistrer_demande(request):
|
2026-01-21 11:03:11 +00:00
|
|
|
"""Enregistrez une nouvelle demande de véhicule.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
JsonResponse
|
|
|
|
|
Une réponse JSON indiquant le succès ou l'échec de l'enregistrement
|
|
|
|
|
de la demande de véhicule.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
if request.method == "POST":
|
|
|
|
|
form_demande = forms.EnregistrerDemande(request.POST)
|
|
|
|
|
if form_demande.is_valid():
|
|
|
|
|
form = form_demande.save(commit=False)
|
|
|
|
|
form.nom_passager = request.user.profile
|
|
|
|
|
form.save()
|
|
|
|
|
|
|
|
|
|
models.CarnetBord.objects.create(
|
|
|
|
|
course=models.DemandeVehicule.objects.get(id=form.id)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
return JsonResponse(
|
|
|
|
|
{"success": True, "message": "Demande enregistrée avec succès"}
|
|
|
|
|
)
|
|
|
|
|
return JsonResponse(
|
|
|
|
|
{
|
|
|
|
|
"success": False,
|
|
|
|
|
"message": (
|
|
|
|
|
"Une erreur s'est produit lors de "
|
|
|
|
|
"l'enregistrement de la demande"
|
|
|
|
|
),
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
return None
|
|
|
|
|
|
|
|
|
|
@login_required(login_url="login")
|
|
|
|
|
def liste_demande(request):
|
2026-01-21 11:03:11 +00:00
|
|
|
"""Affichez la liste des demandes de véhicules.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
La liste des demandes affichées dépend du groupe de l'utilisateur connecté:
|
|
|
|
|
- Si l'utilisateur appartient au groupe "Chauffeur", seules les demandes
|
|
|
|
|
qui lui sont assignées sont affichées.
|
|
|
|
|
- Sinon, toutes les demandes de véhicules sont affichées.
|
|
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
JsonResponse
|
|
|
|
|
Une réponse JSON contenant la liste des demandes de véhicules.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
liste_demande_vehicule = []
|
|
|
|
|
|
2026-08-03 14:31:48 +00:00
|
|
|
if request.user.groups.filter(name="chauffeur").exists():
|
2025-12-19 09:43:33 +00:00
|
|
|
liste_demande_vehicule = models.DemandeVehicule.objects.filter(
|
|
|
|
|
chauffeur__user_id=request.user.id
|
|
|
|
|
)
|
|
|
|
|
else:
|
|
|
|
|
liste_demande_vehicule = models.DemandeVehicule.objects.all()
|
|
|
|
|
|
|
|
|
|
demandes_en_cours = []
|
|
|
|
|
parc_vehicule = [
|
|
|
|
|
{"id": vehicule.id, "immatriculation": vehicule.immatriculation}
|
|
|
|
|
for vehicule in models.Vehicule.objects.filter(disponible=True)
|
|
|
|
|
]
|
2026-08-03 14:31:48 +00:00
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
chauffeur_group = Group.objects.get(name="chauffeur")
|
|
|
|
|
chauffeurs = [
|
|
|
|
|
{
|
|
|
|
|
"chauffeur_id": chauffeur.user.id,
|
|
|
|
|
"chauffeur_name": (
|
|
|
|
|
f"{chauffeur.user.first_name} {chauffeur.user.last_name}"
|
|
|
|
|
),
|
|
|
|
|
}
|
|
|
|
|
for chauffeur in Profile.objects.filter(user__groups=chauffeur_group)
|
|
|
|
|
]
|
|
|
|
|
except Group.DoesNotExist:
|
|
|
|
|
chauffeurs = []
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
demandes_en_cours = [
|
|
|
|
|
{
|
|
|
|
|
"id_demande": demande.id,
|
|
|
|
|
"nom_passager": (
|
|
|
|
|
f"{demande.nom_passager.user.first_name} "
|
|
|
|
|
f"{demande.nom_passager.user.last_name}"
|
|
|
|
|
),
|
|
|
|
|
"lieu_depart": demande.lieu_depart,
|
|
|
|
|
"date_heure_depart": demande.date_heure.strftime("%d/%m/%Y %H:%M"),
|
|
|
|
|
"lieu_arrivee": demande.lieu_arrive,
|
|
|
|
|
"validation": demande.validation,
|
|
|
|
|
"vehicule": parc_vehicule,
|
|
|
|
|
"chauffeurs": chauffeurs,
|
|
|
|
|
"motif_refus": demande.motif_refus,
|
|
|
|
|
"user_id": demande.nom_passager.user.id,
|
|
|
|
|
"is_logisticien": (
|
|
|
|
|
request.user.profile.departement
|
|
|
|
|
.nom_departement == "Logistique"
|
|
|
|
|
),
|
|
|
|
|
"is_chauffeur": (
|
|
|
|
|
request.user.groups.filter(name="Chauffeur")
|
|
|
|
|
.exists()
|
|
|
|
|
),
|
|
|
|
|
}
|
|
|
|
|
for demande in liste_demande_vehicule
|
|
|
|
|
]
|
|
|
|
|
|
2026-08-03 14:31:48 +00:00
|
|
|
|
|
|
|
|
|
2025-12-19 09:43:33 +00:00
|
|
|
return JsonResponse(demandes_en_cours, safe=False)
|
|
|
|
|
|
2026-01-21 11:03:11 +00:00
|
|
|
@login_required(login_url="login")
|
2025-12-19 09:43:33 +00:00
|
|
|
def detail_course(request, id_demande):
|
|
|
|
|
"""Afficher les détails d'une demande de véhicule spécifique.
|
|
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
id_demande : int
|
|
|
|
|
L'identifiant de la demande de véhicule.
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
HttpResponse
|
|
|
|
|
La réponse HTTP avec le rendu de la page de détails de la demande de
|
|
|
|
|
véhicule.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
la_demande = models.DemandeVehicule.objects.get(id=id_demande)
|
|
|
|
|
vehicule = la_demande.vehicule
|
|
|
|
|
|
|
|
|
|
details_course = models.CarnetBord.objects.get(course=la_demande)
|
|
|
|
|
|
|
|
|
|
return render(
|
|
|
|
|
request,
|
|
|
|
|
"gestion_vehicule/detail_course.html",
|
|
|
|
|
{
|
|
|
|
|
"detail_demande": {
|
|
|
|
|
"id": la_demande.id,
|
|
|
|
|
"nom_passager": (
|
|
|
|
|
f"{la_demande.nom_passager.user.first_name} "
|
|
|
|
|
f"{la_demande.nom_passager.user.last_name}"
|
|
|
|
|
),
|
|
|
|
|
"lieu_depart": la_demande.lieu_depart,
|
|
|
|
|
"date_heure": la_demande.date_heure,
|
|
|
|
|
"lieu_arrive": la_demande.lieu_arrive,
|
|
|
|
|
"immatriculation": la_demande.vehicule.immatriculation,
|
|
|
|
|
"id_vehicule": la_demande.vehicule.id,
|
|
|
|
|
"details_course": details_course,
|
|
|
|
|
"prise_carburant_formulaire": forms.PriseCarburant(
|
|
|
|
|
initial={"vehicule": vehicule.immatriculation}
|
|
|
|
|
),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
@login_required(login_url="login")
|
|
|
|
|
def statut_demande(request):
|
|
|
|
|
"""Mettre à jour le statut d'une demande de véhicule.
|
|
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
request.id-demande : int
|
|
|
|
|
L'identifiant de la demande de véhicule à mettre à jour.
|
|
|
|
|
request.radioValider : str
|
|
|
|
|
Le statut de validation de la demande
|
|
|
|
|
("Valider", "Refuser", ou autre).
|
|
|
|
|
request.vehicule : int
|
|
|
|
|
L'identifiant du véhicule assigné (si validée).
|
|
|
|
|
request.chauffeur : int
|
|
|
|
|
L'identifiant du chauffeur assigné (si validée).
|
|
|
|
|
request.motif : str
|
|
|
|
|
Le motif de refus (si refusée).
|
|
|
|
|
request.course_termine : str
|
|
|
|
|
Indique si la course est terminée ("on" si cochée).
|
|
|
|
|
request.date_heure_retour : str
|
|
|
|
|
La date et l'heure de retour de la course (si terminée).
|
|
|
|
|
request.heure_course_termine : str
|
|
|
|
|
L'heure de fin de la course (si terminée).
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
HttpResponseRedirect
|
|
|
|
|
Redirige vers la page d'accueil de la gestion des véhicules après
|
|
|
|
|
la mise à jour du statut de la demande.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
if request.method == "POST":
|
|
|
|
|
demande = models.DemandeVehicule.objects.get(
|
|
|
|
|
id=request.POST["id-demande"]
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if "radioValider" in request.POST:
|
|
|
|
|
if request.POST["radioValider"] == "Valider":
|
|
|
|
|
demande.validation = True
|
|
|
|
|
demande.vehicule = models.Vehicule.objects.get(
|
|
|
|
|
id=request.POST["vehicule"]
|
|
|
|
|
)
|
|
|
|
|
demande.chauffeur = models.Profile.objects.get(
|
|
|
|
|
user_id=request.POST["chauffeur"]
|
|
|
|
|
)
|
|
|
|
|
elif request.POST["radioValider"] == "Refuser":
|
|
|
|
|
demande.validation = False
|
|
|
|
|
demande.motif_refus = request.POST["motif"]
|
|
|
|
|
else:
|
|
|
|
|
demande.validation = None
|
|
|
|
|
|
|
|
|
|
if (
|
|
|
|
|
"course_termine" in request.POST
|
|
|
|
|
and "date_heure_retour" in request.POST
|
|
|
|
|
and request.POST["course_termine"] == "on"
|
|
|
|
|
and request.POST["date_heure_retour"] != ""
|
|
|
|
|
):
|
|
|
|
|
demande.course_terminer = True
|
|
|
|
|
demande.heure_course_termine = request.POST["date_heure_retour"]
|
|
|
|
|
|
|
|
|
|
demande.save()
|
|
|
|
|
|
|
|
|
|
return redirect("gestion_vehicule:index")
|
|
|
|
|
|
|
|
|
|
@login_required(login_url="login")
|
|
|
|
|
def detail_voiture(request, vehicule_id):
|
2026-01-21 11:03:11 +00:00
|
|
|
"""Affichez les détails d'un véhicule spécifique.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
vehicule_id : int
|
|
|
|
|
L'identifiant du véhicule.
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
HttpResponse
|
|
|
|
|
La réponse HTTP avec le rendu de la page de détails du véhicule.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
vehicule = models.Vehicule.objects.get(id=vehicule_id)
|
|
|
|
|
|
|
|
|
|
return render(
|
|
|
|
|
request,
|
|
|
|
|
"gestion_vehicule/detail_vehicule.html",
|
|
|
|
|
{
|
|
|
|
|
"vehicule": vehicule,
|
|
|
|
|
"carnet_bord_formulaire": forms.CarnetBord(
|
|
|
|
|
initial={"vehicule": vehicule.immatriculation}
|
|
|
|
|
),
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
@login_required(login_url="login")
|
|
|
|
|
def enregistrer_prise_carburant(request, course_id):
|
2026-01-21 11:03:11 +00:00
|
|
|
"""Enregistrez une prise de carburant pour une course spécifique.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
course_id : int
|
|
|
|
|
L'identifiant de la course pour laquelle enregistrer la prise de
|
|
|
|
|
carburant.
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
HttpResponseRedirect
|
|
|
|
|
Redirige vers la page de détails de la course après l'enregistrement
|
|
|
|
|
de la prise de carburant.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
course = models.DemandeVehicule(id=course_id)
|
|
|
|
|
if request.method == "POST":
|
|
|
|
|
prise_carburant = forms.PriseCarburant(request.POST)
|
|
|
|
|
if prise_carburant.is_valid():
|
|
|
|
|
d = prise_carburant.save(commit=False)
|
|
|
|
|
d.course = course
|
|
|
|
|
d.save()
|
|
|
|
|
|
|
|
|
|
return redirect("gestion_vehicule:detail-course", id_demande=course_id)
|
|
|
|
|
|
|
|
|
|
@login_required(login_url="login")
|
|
|
|
|
def carnet_carburant(request, vehicule_id):
|
2026-01-21 11:03:11 +00:00
|
|
|
"""Affichez le carnet de carburant d'un véhicule spécifique.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
|
|
|
|
|
vehicule_id : int
|
|
|
|
|
L'identifiant du véhicule.
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
HttpResponse
|
|
|
|
|
La réponse HTTP avec le rendu de la page du carnet de carburant
|
|
|
|
|
du véhicule.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
return render(
|
|
|
|
|
request,
|
|
|
|
|
"gestion_vehicule/carnet_carburant.html",
|
|
|
|
|
{
|
|
|
|
|
"id_vehicule": vehicule_id
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def carnet_sortie_vehicule(request, vehicule_id):
|
2026-01-21 11:03:11 +00:00
|
|
|
"""Affichez le carnet de sortie d'un véhicule spécifique.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
|
|
|
|
|
vehicule_id : int
|
|
|
|
|
L'identifiant du véhicule.
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
HttpResponse
|
|
|
|
|
La réponse HTTP avec le rendu de la page du carnet de sortie
|
|
|
|
|
du véhicule.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
return render(
|
|
|
|
|
request,
|
|
|
|
|
"gestion_vehicule/carnet_sortie_vehicule.html",
|
|
|
|
|
{"id_vehicule": vehicule_id},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
@login_required(login_url="login")
|
|
|
|
|
def filtre_carnet_carburant(request):
|
2026-01-21 11:03:11 +00:00
|
|
|
"""Filtrez les prises de carburant d'un véhicule pour un mois spécifique.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
request.id_vehicule : int
|
|
|
|
|
L'identifiant du véhicule.
|
|
|
|
|
request.mois : str
|
|
|
|
|
Le mois au format "YYYY-MM".
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
JsonResponse
|
|
|
|
|
Une réponse JSON contenant la liste des prises de carburant
|
|
|
|
|
filtrées.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
id_vehicule = request.GET["id_vehicule"]
|
|
|
|
|
annee, mois = request.GET["mois"].split("-")
|
|
|
|
|
|
|
|
|
|
prises_carburant = models.CarnetCarburant.objects.filter(
|
|
|
|
|
course__vehicule=models.Vehicule.objects.get(id=id_vehicule),
|
|
|
|
|
date__year=annee,
|
|
|
|
|
date__month=mois,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
mon_carnet = [
|
|
|
|
|
{
|
|
|
|
|
"date": p.date,
|
|
|
|
|
"nom_station": p.nom_station,
|
|
|
|
|
"type_carburant": p.type_carburant,
|
|
|
|
|
"litre": p.litre,
|
|
|
|
|
"prix": p.prix,
|
|
|
|
|
"montant_total": p.litre * p.prix,
|
|
|
|
|
"kilometrage": p.kilometrage,
|
|
|
|
|
"observation": p.observation,
|
|
|
|
|
"nom_chauffeur": (
|
|
|
|
|
f"{p.course.chauffeur.user.first_name} "
|
|
|
|
|
f"{p.course.chauffeur.user.last_name}"
|
|
|
|
|
),
|
|
|
|
|
}
|
|
|
|
|
for p in prises_carburant
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
return JsonResponse(mon_carnet, safe=False)
|
|
|
|
|
|
|
|
|
|
def filtre_sortie_vehicule(request):
|
2026-01-21 11:03:11 +00:00
|
|
|
"""Filtrez les sorties d'un véhicule pour un mois spécifique.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
request.id_vehicule : int
|
|
|
|
|
L'identifiant du véhicule.
|
|
|
|
|
request.mois : str
|
|
|
|
|
Le mois au format "YYYY-MM".
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
JsonResponse
|
|
|
|
|
Une réponse JSON contenant la liste des sorties de véhicule
|
|
|
|
|
filtrées.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
id_vehicule = request.GET["id_vehicule"]
|
|
|
|
|
annee, mois = request.GET["mois"].split("-")
|
|
|
|
|
|
|
|
|
|
sortie_vehicule = models.CarnetBord.objects.filter(
|
|
|
|
|
course__vehicule=models.Vehicule.objects.get(id=id_vehicule),
|
|
|
|
|
heure_effectif_depart__year=annee,
|
|
|
|
|
heure_effectif_depart__month=mois,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
mes_sorties = [
|
|
|
|
|
{
|
|
|
|
|
"nom_passager": (
|
|
|
|
|
f"{p.course.nom_passager.user.first_name} "
|
|
|
|
|
f"{p.course.nom_passager.user.last_name}"
|
|
|
|
|
),
|
|
|
|
|
"lieu_depart": p.course.lieu_depart,
|
|
|
|
|
"heure_depart_prevu": p.course.date_heure,
|
|
|
|
|
"heure_depart_effectif": p.heure_effectif_depart,
|
|
|
|
|
"lieu_arrive": p.course.lieu_arrive,
|
|
|
|
|
"heure_arrive": p.heure_arrive,
|
|
|
|
|
"nom_chauffeur": (
|
|
|
|
|
f"{p.course.chauffeur.user.first_name} "
|
|
|
|
|
f"{p.course.chauffeur.user.last_name}"
|
|
|
|
|
),
|
|
|
|
|
}
|
|
|
|
|
for p in sortie_vehicule
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
return JsonResponse(mes_sorties, safe=False)
|
|
|
|
|
|
|
|
|
|
@login_required(login_url="login")
|
|
|
|
|
def enregistrer_carnet_bord(request, vehicule_id):
|
2026-01-21 11:03:11 +00:00
|
|
|
"""Enregistrez ou mettez à jour le carnet de bord d'un véhicule.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
request.mois_concerne : str
|
|
|
|
|
Le mois concerné au format "YYYY-MM".
|
|
|
|
|
request.km_debut_mois : int
|
|
|
|
|
Le kilométrage au début du mois.
|
|
|
|
|
request.km_fin_mois : int
|
|
|
|
|
Le kilométrage à la fin du mois.
|
|
|
|
|
|
|
|
|
|
vehicule_id : int
|
|
|
|
|
L'identifiant du véhicule.
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
HttpResponseRedirect
|
|
|
|
|
Redirige vers la page de détails du véhicule après l'enregistrement
|
|
|
|
|
ou la mise à jour du carnet de bord.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
if request.method == "POST":
|
|
|
|
|
annee, mois = request.POST["mois_concerne"].split("-")
|
2026-01-21 11:03:11 +00:00
|
|
|
_, created = models.CarnetBord.objects.update_or_create(
|
2025-12-19 09:43:33 +00:00
|
|
|
mois_concerne="-".join([annee, mois, "01"]),
|
|
|
|
|
defaults={
|
|
|
|
|
"km_debut_mois": request.POST["km_debut_mois"],
|
|
|
|
|
"km_fin_mois": request.POST["km_fin_mois"],
|
|
|
|
|
"vehicule": models.Vehicule.objects.get(id=vehicule_id),
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if created:
|
2026-01-21 11:03:11 +00:00
|
|
|
messages.success(request, "Création effectuée avec succès.")
|
2025-12-19 09:43:33 +00:00
|
|
|
else:
|
2026-01-21 11:03:11 +00:00
|
|
|
messages.success(request, "Mise à jour effectuée avec succès.")
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
return redirect(detail_voiture, vehicule_id)
|
|
|
|
|
|
|
|
|
|
@login_required(login_url="login")
|
2026-01-21 11:03:11 +00:00
|
|
|
def carnet_vehicule_information(_request, mois_concerne):
|
|
|
|
|
"""Récupérez les informations du carnet de bord pour un mois spécifique.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
mois_concerne : str
|
|
|
|
|
Le mois concerné au format "YYYY-MM".
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
JsonResponse
|
|
|
|
|
Une réponse JSON contenant les informations du carnet de bord
|
|
|
|
|
pour le mois spécifié.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
annee, mois = mois_concerne.split("-")
|
|
|
|
|
try:
|
|
|
|
|
carnet_bord = models.CarnetBord.objects.get(
|
|
|
|
|
mois_concerne="-".join([annee, mois, "01"])
|
|
|
|
|
)
|
|
|
|
|
except models.CarnetBord.DoesNotExist:
|
|
|
|
|
carnet_dict = {}
|
|
|
|
|
else:
|
|
|
|
|
carnet_dict = {
|
|
|
|
|
"km_debut": carnet_bord.km_debut_mois,
|
|
|
|
|
"km_fin": carnet_bord.km_fin_mois,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return JsonResponse(carnet_dict)
|
|
|
|
|
|
|
|
|
|
def enregistrer_information_course_depart(request, id_demande):
|
2026-01-21 11:03:11 +00:00
|
|
|
"""Enregistrez les informations de départ d'une course spécifique.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
id_demande : int
|
|
|
|
|
L'identifiant de la demande de véhicule.
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
HttpResponseRedirect
|
|
|
|
|
Redirige vers la page de détails de la course après l'enregistrement
|
|
|
|
|
des informations de départ.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
demande = models.DemandeVehicule.objects.get(id=id_demande)
|
|
|
|
|
vehicule = models.Vehicule.objects.get(id=request.POST["id-vehicule"])
|
|
|
|
|
course = models.CarnetBord.objects.get(course=demande)
|
|
|
|
|
|
|
|
|
|
course.vehicule = vehicule
|
|
|
|
|
course.course = demande
|
|
|
|
|
course.heure_effectif_depart = request.POST["heure-depart"]
|
|
|
|
|
course.km_depart = request.POST["kilometrage_depart"]
|
|
|
|
|
course.save()
|
|
|
|
|
|
|
|
|
|
return redirect("gestion_vehicule:detail-course", id_demande)
|
|
|
|
|
|
|
|
|
|
def enregistrer_information_course_arrive(request, id_demande):
|
2026-01-21 11:03:11 +00:00
|
|
|
"""Enregistrez les informations d'arrivée d'une course spécifique.
|
2025-12-19 09:43:33 +00:00
|
|
|
|
|
|
|
|
Parameters
|
|
|
|
|
----------
|
|
|
|
|
request : HttpRequest
|
|
|
|
|
La requête HTTP reçue.
|
|
|
|
|
id_demande : int
|
|
|
|
|
L'identifiant de la demande de véhicule.
|
|
|
|
|
|
|
|
|
|
Returns
|
|
|
|
|
-------
|
|
|
|
|
HttpResponseRedirect
|
|
|
|
|
Redirige vers la page de détails de la course après l'enregistrement
|
|
|
|
|
des informations d'arrivée.
|
|
|
|
|
|
|
|
|
|
"""
|
|
|
|
|
demande = models.DemandeVehicule.objects.get(id=id_demande)
|
|
|
|
|
vehicule = models.Vehicule.objects.get(id=demande.vehicule.id)
|
|
|
|
|
|
|
|
|
|
course = models.CarnetBord.objects.get(course=demande)
|
|
|
|
|
|
|
|
|
|
course.vehicule = vehicule
|
|
|
|
|
course.course = demande
|
|
|
|
|
course.heure_arrive = request.POST["heure-effectif-arrivee"]
|
|
|
|
|
course.km_arrive = request.POST["kilometrage-arrivee"]
|
2026-01-21 11:03:11 +00:00
|
|
|
course.course_termine = "course-terminer" in request.POST
|
2025-12-19 09:43:33 +00:00
|
|
|
course.save()
|
|
|
|
|
|
|
|
|
|
return redirect("gestion_vehicule:detail-course", id_demande)
|