From 2f1ae0586b26511bda2187dd617492dc10bd934c Mon Sep 17 00:00:00 2001 From: John Mullins Date: Mon, 28 Aug 2023 15:27:24 +1000 Subject: [PATCH] Added traveller count + hyperlinks to bus and shuttle view --- busManager/coord/admin.py | 31 +++++++++++++++++++++++++++---- busManager/coord/models.py | 14 ++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/busManager/coord/admin.py b/busManager/coord/admin.py index e77d4fe..8a68d14 100644 --- a/busManager/coord/admin.py +++ b/busManager/coord/admin.py @@ -60,14 +60,14 @@ class CompanyAdmin(MyImportExportModelAdmin, admin.ModelAdmin): url = ( reverse("admin:coord_bus_changelist") + "?" - + urlencode({"company__id": f"{obj.id}"}) + + urlencode({"company__id__exact": f"{obj.id}"}) ) return format_html('{} Buses', url, count) class DriverInline(admin.StackedInline): model = Driver - extra = 1 + extra = 0 class BusStopInline(admin.TabularInline): @@ -79,9 +79,24 @@ class BusStopInline(admin.TabularInline): @admin.register(Bus) class BusesAdmin(MyImportExportModelAdmin, admin.ModelAdmin, BusRollMixin): list_filter = ["company"] - list_display = ["route_name", "company", "contract_number"] + list_display = ["route_name", "company", "contract_number", "route_travellers"] + readonly_fields = ["traveller_count"] actions = ["email_company", "bus_roll"] inlines = [DriverInline, BusStopInline] + fieldsets = [ + (None, {'fields': [ + "company", "route_name", "contract_number", "registration", + "traveller_count", "seating_capacity", "make", "model", "notes" + ]}) + ] + + def route_travellers(self, obj): + url = ( + reverse("admin:coord_traveller_changelist") + + "?" + + urlencode({"bus_stops__bus__id__exact": f"{obj.id}"}) + ) + return format_html('{} Travellers', url, obj.traveller_count()) @admin.register(BusStop) @@ -205,7 +220,15 @@ class SettingAdmin(MyImportExportModelAdmin, admin.ModelAdmin): @admin.register(Shuttle) class ShuttleAdmin(MyImportExportModelAdmin, admin.ModelAdmin): - list_display = ["__str__", "school", "bus"] + list_display = ["__str__", "school", "bus", "shuttle_travellers"] + + def shuttle_travellers(self, obj): + url = ( + reverse("admin:coord_traveller_changelist") + + "?" + + urlencode({"shuttle__id__exact": f"{obj.id}"}) + ) + return format_html('{} Travellers', url, obj.traveller_count()) @admin.register(Driver) diff --git a/busManager/coord/models.py b/busManager/coord/models.py index 24d6bc3..3861486 100644 --- a/busManager/coord/models.py +++ b/busManager/coord/models.py @@ -84,6 +84,13 @@ class Bus(models.Model): def __str__(self): return f"{self.route_name}" + def traveller_count(self): + count = 0 + for traveller in Traveller.objects.filter(bus_stops__bus=self): + if traveller.is_active(): + count += 1 + return count + class Shuttle(models.Model): bus = models.ForeignKey(Bus, on_delete=models.CASCADE) @@ -95,6 +102,13 @@ class Shuttle(models.Model): def __str__(self): return f"{self.school.shortName} <-> {self.bus.route_name}" + def traveller_count(self): + count = 0 + for traveller in Traveller.objects.filter(shuttle=self): + if traveller.is_active(): + count += 1 + return count + class Driver(models.Model): bus = models.ForeignKey(Bus, on_delete=models.CASCADE)