From a304a5bd2034d1aa3747628cc96cdcd85582fb13 Mon Sep 17 00:00:00 2001 From: Rowin Date: Mon, 2 Feb 2026 17:37:04 +0100 Subject: [PATCH] Fix #40 : add last trip distance to the vehicle details --- main/models.py | 2 ++ main/templates/main/vehicle_detail.html | 6 ++++++ main/views.py | 18 +++++++++++++----- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/main/models.py b/main/models.py index a3f6103..76e9082 100644 --- a/main/models.py +++ b/main/models.py @@ -57,6 +57,8 @@ class FuelChoice(models.TextChoices): ) inventory = models.URLField(_("inventaire"), null=True, blank=True) + trip_set: models.QuerySet["Trip"] + @property def mileage(self): latest_trip = ( diff --git a/main/templates/main/vehicle_detail.html b/main/templates/main/vehicle_detail.html index cfac900..0ee9ba5 100644 --- a/main/templates/main/vehicle_detail.html +++ b/main/templates/main/vehicle_detail.html @@ -42,6 +42,12 @@

{{ vehicle.name }}

{% endif %} + {% if last_trip_distance %} + + Dernier trajet + {{ last_trip_distance }} + + {% endif %} diff --git a/main/views.py b/main/views.py index 623786f..62f6757 100644 --- a/main/views.py +++ b/main/views.py @@ -1,4 +1,5 @@ import datetime +import typing import django.http import django.urls @@ -8,7 +9,8 @@ from django.contrib.auth.mixins import LoginRequiredMixin from django.utils.translation import gettext as _ import django.shortcuts -from django.forms import BooleanField, HiddenInput +from django.forms import BooleanField, HiddenInput, ModelForm + from . import models from . import forms @@ -27,6 +29,7 @@ class VehicleDetailView(DetailView): template_name = "main/vehicle_detail.html" def get_context_data(self, **kwargs): + self.object: models.Vehicle context = super().get_context_data(**kwargs) context["open_defects"] = context["vehicle"].defect_set.filter( @@ -34,7 +37,7 @@ def get_context_data(self, **kwargs): | Q(status=models.Defect.DefectStatus.CONFIRMED) ) - delegated_forms = { + delegated_forms: dict[str, type[ModelForm]] = { "defect_form": forms.DefectForm, "fuel_expense_form": forms.FuelExpenseForm, "trip_start_form": forms.TripStartForm, @@ -50,7 +53,7 @@ def get_context_data(self, **kwargs): try: current_trip = self.object.trip_set.get(finished=False) - initial = { + initial: dict[str, typing.Any] = { "starting_mileage": current_trip.starting_mileage, "starting_time": current_trip.starting_time, "driver_name": current_trip.driver_name, @@ -72,7 +75,12 @@ def get_context_data(self, **kwargs): context["trip_started"] = False except models.Trip.MultipleObjectsReturned: - return django.http.HttpResponseServerError() + raise models.Trip.MultipleObjectsReturned(_("Corruption de la base de données : plusieurs trajets sont en cours !")) + + try: + context["last_trip_distance"] = self.object.trip_set.filter(finished=True).latest("ending_time").distance + except models.Trip.DoesNotExist: + pass return context @@ -87,7 +95,7 @@ def get_vehicle(self): models.Vehicle, pk=self.kwargs.get("pk") ) - def post(self, request, *args, **kwargs): + def post(self, request: django.http.HttpRequest, *args, **kwargs): form = self.form_class(request.POST, vehicle=self.get_vehicle()) form.instance.vehicle = self.get_vehicle()