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('{}', obj.email, obj.email)