Files
bus-manager/busManager/traveller/admin.py
T
st01765 b695dd8054 Created new models to replicate out of and split coord app
Moved helpers and views to their respective new apps
2026-02-05 11:18:08 +11:00

111 lines
4.0 KiB
Python

from django.contrib import admin
from django.utils.html import format_html
from rangefilter.filters import DateRangeFilterBuilder
from common.admin import MyImportExportModelAdmin
from traveller.adminClone import CloneModelAdmin
from traveller.admin_mixins import SchoolRollMixin, TravellerRollMixin
from traveller.models import Family, TravellerRoute, Traveller, School
class FamilyInline(admin.StackedInline):
model = Family
classes = ['collapse']
extra = 0
clone_parent = "traveller"
class TravellerRouteInline(admin.TabularInline):
model = TravellerRoute
extra = 0
clone_parent = "traveller"
@admin.register(Traveller)
class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, TravellerRollMixin):
list_display = ["first_name", "last_name", "school", "year_level", "is_active", "address", "stop_route", "shuttle", "travel_start_date", "travel_end_date"]
list_filter = [
"is_active", "school", "year_level", "eligibility_status", "bus_stops__bus", "shuttle",
("travel_start_date", DateRangeFilterBuilder(
title="Start date"
)),
("travel_end_date", DateRangeFilterBuilder(
title="End date"
))
]
cloneable_fields = ["last_name"]
search_fields = ["first_name", "last_name", "address"]
inlines = [FamilyInline, TravellerRouteInline]
readonly_fields = ["travel_start_date", "travel_end_date", "created_on", "last_edit", "is_active", "address"]
actions = ["export_to_csv", "send_sms", "confirmation_letter", "letter_creator"]
fieldsets = [
(None, {
'fields': [
"is_active",
"school",
"first_name",
"last_name",
"year_level",
"dob",
"address",
]
}),
('Office Use', {
'classes': ('collapse',),
'fields': [
"distance_to_school",
"travel_start_date",
"travel_end_date",
"eligibility_status",
"term_1_paid",
"term_2_paid",
"term_3_paid",
"term_4_paid",
"assessment_date",
"application_form_completed",
"parent_notified",
"seat_number",
"created_on",
"last_edit",
]
}),
(None, {'fields': ["notes", "shuttle"]})
]
# list_display_links = None
def stop_route(self, obj):
from transport.models import BusStop
stops = BusStop.objects.filter(traveller__id__exact=obj.id)
if stops.count() == 0:
return ""
if stops.count() == 1:
return stops.first()
return "Multiple"
# def save_model(self, request, obj, form, change):
# if obj.is_archived and obj.travel_end_date is None:
# obj.is_archived = False
# super().save_model(request, obj, form, change)
# @admin.register(Family)
class FamilyAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
list_display = ["traveller", "__str__",
"parent_A_firstname", "parent_A_lastname", "parent_A_phone",
"parent_B_firstname", "parent_B_lastname", "parent_B_phone",
"emergency_contact_A_firstname", "emergency_contact_A_lastname", "emergency_contact_A_phone",
"emergency_contact_B_firstname", "emergency_contact_B_lastname", "emergency_contact_B_phone"]
# @admin.register(TravellerRoute)
class TravellerRouteAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
list_display = ["traveller", "busStop"]
@admin.register(School)
class SchoolAdmin(MyImportExportModelAdmin, admin.ModelAdmin, SchoolRollMixin):
list_display = ["__str__", "address", "suburb", "school_email", "phone"]
actions = ["email_travellers_to_school", "show_school_travellers", "export_travellers_to_csv"]
def school_email(self, obj):
return format_html('<a href="mailto:{}">{}</a>', obj.email, obj.email)