Added csv export for traveller and email to schools function
This commit is contained in:
+31
-30
@@ -1,7 +1,7 @@
|
||||
import csv
|
||||
from datetime import date
|
||||
|
||||
from django.contrib.admin import DateFieldListFilter
|
||||
from django.contrib.admin.views.decorators import staff_member_required
|
||||
from django.forms import widgets
|
||||
from django.contrib import admin
|
||||
from django.http import HttpResponse
|
||||
@@ -11,29 +11,11 @@ from django.utils.http import urlencode
|
||||
from import_export.admin import ImportExportModelAdmin
|
||||
|
||||
from .adminClone import CloneModelAdmin
|
||||
from .context_helpers import bus_roll_context, emergency_contacts_context
|
||||
from .email_helpers import email_companies_bus_roll, render_to_pdf
|
||||
from .context_helpers import bus_roll_context, emergency_contacts_context, traveller_roll_context
|
||||
from .email_helpers import email_companies_bus_roll, render_to_pdf, email_school_roll_csv
|
||||
from .models import *
|
||||
|
||||
|
||||
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 show_bus_roll(self, request, queryset):
|
||||
@@ -48,6 +30,30 @@ class BusRollMixin:
|
||||
email_company.short_description = "Email Bus Roll to Company"
|
||||
|
||||
|
||||
class SchoolRollMixin:
|
||||
|
||||
def email_school_roll(self, request, queryset):
|
||||
for school in queryset:
|
||||
if not school.email:
|
||||
return HttpResponse(f"No email is set for {school.name}")
|
||||
email_school_roll_csv(request, school)
|
||||
|
||||
|
||||
class TravellerRollMixin:
|
||||
|
||||
def export_to_csv(self, request, queryset):
|
||||
traveller_list = traveller_roll_context(queryset)
|
||||
response = HttpResponse(content_type="text/csv")
|
||||
response["Content-Disposition"] = f"attachment; filename=traveller_list_{date.today()}.csv"
|
||||
|
||||
writer = csv.DictWriter(response, fieldnames=traveller_list[0].keys())
|
||||
writer.writeheader()
|
||||
writer.writerows(traveller_list)
|
||||
|
||||
return response
|
||||
|
||||
|
||||
|
||||
class HiddenNowTime(widgets.TimeInput):
|
||||
pass
|
||||
|
||||
@@ -114,11 +120,6 @@ class BusStopAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
||||
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):
|
||||
@@ -131,7 +132,7 @@ class TravellerRouteInline(admin.TabularInline):
|
||||
|
||||
|
||||
@admin.register(Traveller)
|
||||
class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin):
|
||||
class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin, TravellerRollMixin):
|
||||
list_display = ["first_name", "last_name", "school", "year_level", "residential_address", "residential_suburb", "stop_route", "travel_start_date", "travel_end_date"]
|
||||
list_filter = ["school", "eligibility_status", "bus_stops__bus", "residential_suburb", ("travel_end_date", DateFieldListFilter), "is_archived"]
|
||||
search_fields = ["first_name", "last_name", "residential_address"]
|
||||
@@ -144,6 +145,7 @@ class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin
|
||||
"emergency_contact_B_phone", "emergency_contact_B_relation"]
|
||||
inlines = [TravellerRouteInline]
|
||||
readonly_fields = ["fare_paying", "created_on", "last_edit", "is_archived"]
|
||||
actions = ["export_to_csv", "yearly_rollover"]
|
||||
fieldsets = [
|
||||
(None, {
|
||||
'fields': [
|
||||
@@ -209,8 +211,6 @@ class TravellerAdmin(MyImportExportModelAdmin, CloneModelAdmin, admin.ModelAdmin
|
||||
]
|
||||
# list_display_links = None
|
||||
|
||||
actions = ["yearly_rollover"]
|
||||
|
||||
def yearly_rollover(self, request, queryset):
|
||||
pass
|
||||
|
||||
@@ -236,8 +236,9 @@ class TravellerRouteAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(School)
|
||||
class SchoolAdmin(MyImportExportModelAdmin, admin.ModelAdmin):
|
||||
class SchoolAdmin(MyImportExportModelAdmin, admin.ModelAdmin, SchoolRollMixin):
|
||||
list_display = ["__str__", "address", "suburb", "school_email", "phone"]
|
||||
actions = ["email_school_roll"]
|
||||
|
||||
def school_email(self, obj):
|
||||
return format_html('<a href="mailto:{}">{}</a>', obj.email, obj.email)
|
||||
|
||||
Reference in New Issue
Block a user