Initial commit
This commit is contained in:
@@ -0,0 +1,199 @@
|
||||
import csv
|
||||
|
||||
from django.contrib.admin.utils import unquote
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.forms import widgets
|
||||
from django.contrib import admin
|
||||
from django.http import HttpResponse, Http404
|
||||
from django.urls import reverse
|
||||
from django.utils.translation import gettext_lazy
|
||||
from django.utils.html import format_html
|
||||
from django.utils.http import urlencode
|
||||
from import_export.admin import ImportExportModelAdmin
|
||||
|
||||
from .adminClone import ClonableModelAdmin
|
||||
from .models import *
|
||||
from .views import bus_roll
|
||||
|
||||
|
||||
class ExportCsvMixin:
|
||||
def export_as_csv(self, request, queryset):
|
||||
meta = self.model._meta
|
||||
field_names = [field.name for field in meta.fields]
|
||||
|
||||
response = HttpResponse(content_type='text/csv')
|
||||
response['Content-Disposition'] = 'attachment; filename={}.csv'.format(meta)
|
||||
writer = csv.writer(response)
|
||||
|
||||
writer.writerow(field_names)
|
||||
for obj in queryset:
|
||||
row = writer.writerow([getattr(obj, field) for field in field_names])
|
||||
|
||||
return response
|
||||
|
||||
export_as_csv.short_description = "Export Selected"
|
||||
|
||||
|
||||
class BusRollMixin:
|
||||
|
||||
def bus_roll(self, request, queryset):
|
||||
return bus_roll(request, queryset)
|
||||
|
||||
def email_company(self, request, queryset):
|
||||
pass
|
||||
|
||||
email_company.short_description = "Email Bus Roll to Company"
|
||||
|
||||
|
||||
class HiddenNowTime(widgets.TimeInput):
|
||||
pass
|
||||
|
||||
|
||||
class MyImportExportModelAdmin(ImportExportModelAdmin):
|
||||
def has_import_permission(self, request):
|
||||
return request.user.is_superuser
|
||||
|
||||
|
||||
@admin.register(Company)
|
||||
class CompanyAdmin(admin.ModelAdmin):
|
||||
list_display = ["name", "buses"]
|
||||
|
||||
def buses(self, obj):
|
||||
count = obj.bus_set.count()
|
||||
url = (
|
||||
reverse("admin:coord_bus_changelist")
|
||||
+ "?"
|
||||
+ urlencode({"company__id": f"{obj.id}"})
|
||||
)
|
||||
return format_html('<a href="{}">{} Buses</a>', url, count)
|
||||
|
||||
|
||||
class DriverInline(admin.StackedInline):
|
||||
model = Driver
|
||||
extra = 1
|
||||
|
||||
|
||||
class BusStopInline(admin.TabularInline):
|
||||
model = BusStop
|
||||
extra = 0
|
||||
ordering = ("am_time",)
|
||||
|
||||
|
||||
@admin.register(Bus)
|
||||
class BusesAdmin(MyImportExportModelAdmin, admin.ModelAdmin, BusRollMixin):
|
||||
list_filter = ["company"]
|
||||
list_display = ["route_name", "company", "contract_number"]
|
||||
actions = ["email_company", "bus_roll"]
|
||||
inlines = [DriverInline, BusStopInline]
|
||||
|
||||
|
||||
@admin.register(BusStop)
|
||||
class BusStopAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
||||
list_filter = ["bus__company", "bus__route_name"]
|
||||
list_display = ["__str__", "am_time", "pm_time", "address"]
|
||||
search_fields = ["bus__route_name", "address"]
|
||||
|
||||
# change_form_template = 'admin/change_form_busStops.html'
|
||||
|
||||
def export_as_csv(self, request, queryset):
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(Suburb)
|
||||
class SuburbsAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
||||
list_filter = ["state"]
|
||||
|
||||
|
||||
class TravellerRouteInline(admin.TabularInline):
|
||||
model = TravellerRoute
|
||||
extra = 0
|
||||
|
||||
|
||||
@admin.register(Traveller)
|
||||
class TravellerAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
||||
list_display = ["first_name", "last_name", "school", "year_level", "residential_address", "residential_suburb"]
|
||||
list_filter = ["school", "eligibility_status", "bus_stops__bus", "residential_suburb"]
|
||||
search_fields = ["first_name", "last_name", "residential_address"]
|
||||
inlines = [TravellerRouteInline]
|
||||
readonly_fields = ["fare_paying"]
|
||||
fieldsets = [
|
||||
(None, {
|
||||
'fields': [
|
||||
"school",
|
||||
"first_name",
|
||||
"last_name",
|
||||
"dob",
|
||||
"year_level",
|
||||
]
|
||||
}),
|
||||
('Address', {
|
||||
'classes': ('collapse',),
|
||||
'fields': [
|
||||
"residential_address",
|
||||
"residential_suburb",
|
||||
"postal_address",
|
||||
"postal_suburb",
|
||||
]
|
||||
}),
|
||||
('Office Use', {
|
||||
'classes': ('collapse',),
|
||||
'fields': [
|
||||
"distance_to_school",
|
||||
"travel_start_date",
|
||||
"travel_end_date",
|
||||
"eligibility_status",
|
||||
"fare_paying",
|
||||
"assessment_date",
|
||||
"application_form_completed",
|
||||
"parent_notified",
|
||||
"seat_number",
|
||||
]
|
||||
}),
|
||||
('Adult Contacts', {
|
||||
'classes': ('collapse',),
|
||||
'fields': [
|
||||
"parent_A_firstname",
|
||||
"parent_A_lastname",
|
||||
"parent_A_phone",
|
||||
"parent_A_email",
|
||||
"parent_B_firstname",
|
||||
"parent_B_lastname",
|
||||
"parent_B_phone",
|
||||
"parent_B_email",
|
||||
"emergency_contact_A_firstname",
|
||||
"emergency_contact_A_lastname",
|
||||
"emergency_contact_A_phone",
|
||||
"emergency_contact_A_relation",
|
||||
"emergency_contact_B_firstname",
|
||||
"emergency_contact_B_lastname",
|
||||
"emergency_contact_B_phone",
|
||||
"emergency_contact_B_relation"
|
||||
]
|
||||
}),
|
||||
(None, {'fields': ["notes", "shuttle"]})
|
||||
]
|
||||
# list_display_links = None
|
||||
|
||||
actions = ["yearly_rollover"]
|
||||
|
||||
def yearly_rollover(self, request, queryset):
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(TravellerRoute)
|
||||
class TravellerRouteAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
||||
list_display = ["traveller", "busStop"]
|
||||
|
||||
|
||||
@admin.register(School)
|
||||
class SchoolAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
@admin.register(Setting)
|
||||
class SettingAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
||||
list_display = ["name", "value"]
|
||||
|
||||
|
||||
admin.site.register(Shuttle)
|
||||
admin.site.register(Driver)
|
||||
Reference in New Issue
Block a user