Added traveller count + hyperlinks to bus and shuttle view
This commit is contained in:
@@ -60,14 +60,14 @@ class CompanyAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
|||||||
url = (
|
url = (
|
||||||
reverse("admin:coord_bus_changelist")
|
reverse("admin:coord_bus_changelist")
|
||||||
+ "?"
|
+ "?"
|
||||||
+ urlencode({"company__id": f"{obj.id}"})
|
+ urlencode({"company__id__exact": f"{obj.id}"})
|
||||||
)
|
)
|
||||||
return format_html('<a href="{}">{} Buses</a>', url, count)
|
return format_html('<a href="{}">{} Buses</a>', url, count)
|
||||||
|
|
||||||
|
|
||||||
class DriverInline(admin.StackedInline):
|
class DriverInline(admin.StackedInline):
|
||||||
model = Driver
|
model = Driver
|
||||||
extra = 1
|
extra = 0
|
||||||
|
|
||||||
|
|
||||||
class BusStopInline(admin.TabularInline):
|
class BusStopInline(admin.TabularInline):
|
||||||
@@ -79,9 +79,24 @@ class BusStopInline(admin.TabularInline):
|
|||||||
@admin.register(Bus)
|
@admin.register(Bus)
|
||||||
class BusesAdmin(MyImportExportModelAdmin, admin.ModelAdmin, BusRollMixin):
|
class BusesAdmin(MyImportExportModelAdmin, admin.ModelAdmin, BusRollMixin):
|
||||||
list_filter = ["company"]
|
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"]
|
actions = ["email_company", "bus_roll"]
|
||||||
inlines = [DriverInline, BusStopInline]
|
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('<a href="{}">{} Travellers</a>', url, obj.traveller_count())
|
||||||
|
|
||||||
|
|
||||||
@admin.register(BusStop)
|
@admin.register(BusStop)
|
||||||
@@ -205,7 +220,15 @@ class SettingAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
|||||||
|
|
||||||
@admin.register(Shuttle)
|
@admin.register(Shuttle)
|
||||||
class ShuttleAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
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('<a href="{}">{} Travellers</a>', url, obj.traveller_count())
|
||||||
|
|
||||||
|
|
||||||
@admin.register(Driver)
|
@admin.register(Driver)
|
||||||
|
|||||||
@@ -84,6 +84,13 @@ class Bus(models.Model):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.route_name}"
|
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):
|
class Shuttle(models.Model):
|
||||||
bus = models.ForeignKey(Bus, on_delete=models.CASCADE)
|
bus = models.ForeignKey(Bus, on_delete=models.CASCADE)
|
||||||
@@ -95,6 +102,13 @@ class Shuttle(models.Model):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.school.shortName} <-> {self.bus.route_name}"
|
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):
|
class Driver(models.Model):
|
||||||
bus = models.ForeignKey(Bus, on_delete=models.CASCADE)
|
bus = models.ForeignKey(Bus, on_delete=models.CASCADE)
|
||||||
|
|||||||
Reference in New Issue
Block a user