diff --git a/busManager/busManager/settings.py b/busManager/busManager/settings.py index 6fa65aa..1a956cf 100644 --- a/busManager/busManager/settings.py +++ b/busManager/busManager/settings.py @@ -11,6 +11,7 @@ https://docs.djangoproject.com/en/4.2/ref/settings/ """ import os from pathlib import Path +import platform from dotenv import load_dotenv @@ -45,6 +46,12 @@ INSTALLED_APPS = [ 'rangefilter', ] +if platform.system() == "Linux": + INSTALLED_APPS.append('django_crontab') + CRONJOBS = [ + ('0 6 * * *', 'coord.scheduled_tasks.nightly_check_active_status') + ] + TWILIO = { "ACCOUNT_SID": os.environ.get('TWILIO_SID'), "AUTH_TOKEN": os.environ.get('TWILIO_TOKEN'), diff --git a/busManager/coord/admin.py b/busManager/coord/admin.py index eef1e75..f8d9aed 100644 --- a/busManager/coord/admin.py +++ b/busManager/coord/admin.py @@ -12,7 +12,8 @@ from rangefilter.filters import DateRangeFilterBuilder from .adminClone import CloneModelAdmin from .context_helpers import * -from .email_helpers import email_companies_bus_roll, render_to_pdf, email_school_roll +from .email_helpers import email_companies_bus_roll, render_to_pdf, email_school_roll, \ + email_companies_emergency_contacts from .models import * from .utils.send_sms import send_sms @@ -25,10 +26,14 @@ class BusRollMixin: def show_emergency_contacts(self, request, queryset): return render_to_pdf('reports/emergency_contacts.html', emergency_contacts_context(queryset)) - def email_company(self, request, queryset): + def email_bus_roll(self, request, queryset): return email_companies_bus_roll(request, queryset) - email_company.short_description = "Email Bus Roll to Company" + def email_emergency_contacts(self, request, queryset): + return email_companies_emergency_contacts(request, queryset) + + email_bus_roll.short_description = "Email Bus Roll to Company" + email_emergency_contacts.short_description = "Email Emergency Contacts to Company" class ShuttleRollMixin: @@ -132,7 +137,7 @@ class BusesAdmin(MyImportExportModelAdmin, admin.ModelAdmin, BusRollMixin): list_filter = ["company"] list_display = ["route_name", "company", "contract_number", "seating_capacity", "route_travellers"] readonly_fields = ["traveller_count"] - actions = ["email_company", "show_bus_roll", "show_emergency_contacts"] + actions = ["show_bus_roll", "show_emergency_contacts", "email_bus_roll", "email_emergency_contacts"] inlines = [DriverInline, BusStopInline] fieldsets = [ (None, {'fields': [ diff --git a/busManager/coord/email_helpers.py b/busManager/coord/email_helpers.py index 3582a50..df82698 100644 --- a/busManager/coord/email_helpers.py +++ b/busManager/coord/email_helpers.py @@ -6,8 +6,15 @@ from django.http import HttpResponse from django.template.loader import get_template from xhtml2pdf import pisa -from coord.context_helpers import bus_roll_context, school_roll_context -from coord.models import Company, School +from .models import Company, School, Setting +from .context_helpers import bus_roll_context, emergency_contacts_context, school_roll_context + + +def _getBCC(): + address = Setting.objects.filter(name="MAIL_BCC") + if address.exists(): + return [address.first().value] + return [] def render_to_pdf(template, context): @@ -40,7 +47,35 @@ def email_companies_bus_roll(request, query_set=None): message = f"A new bus roll for {company.name} has been generated" email_from = "bus.manager@education.vic.gov.au" recipient = [company.contact_email] - email = EmailMessage(subject, message, email_from, recipient) + email = EmailMessage(subject, message, email_from, recipient, _getBCC()) + email.attach(f"school_bus_roll_{date.today()}.pdf", pdf.content) + email.send(fail_silently=True) + + return render_to_pdf(html_template, context) + + +def email_companies_emergency_contacts(request, query_set=None): + html_template = 'reports/emergency_contacts.html' + context = emergency_contacts_context(query_set) + + for company in Company.objects.all(): + if not company.contact_email: + continue + company_route = [] + + for route in context.get("routes"): + if route.get("bus").company == company: + company_route.append(route) + if not company_route: + continue + company_context = {'routes': company_route} + pdf = render_to_pdf(html_template, company_context) + + subject = "Echuca School Buses Emergency Contacts" + message = f"A new emergency contact list for {company.name} has been generated" + email_from = "bus.manager@education.vic.gov.au" + recipient = [company.contact_email] + email = EmailMessage(subject, message, email_from, recipient, _getBCC()) email.attach(f"school_bus_roll_{date.today()}.pdf", pdf.content) email.send(fail_silently=True) @@ -67,8 +102,8 @@ def email_school_roll(request, query_set): message = f"A new bus roll for {school.name} has been generated" email_from = "bus.manager@education.vic.gov.au" recipient = [school.email] - email = EmailMessage(subject, message, email_from, recipient) + email = EmailMessage(subject, message, email_from, recipient, _getBCC()) email.attach(f"school_bus_roll_{date.today()}.pdf", pdf.content) email.send(fail_silently=True) - return render_to_pdf(html_template, context) \ No newline at end of file + return render_to_pdf(html_template, context) diff --git a/busManager/coord/templates/reports/bus_roll.html b/busManager/coord/templates/reports/bus_roll.html index 4777fc2..7fea2a0 100644 --- a/busManager/coord/templates/reports/bus_roll.html +++ b/busManager/coord/templates/reports/bus_roll.html @@ -43,38 +43,40 @@ {{ stop.pm }} - - - - - - - - - - - - - - - - {% for traveller in stop.travellers %} + {% if stop.travellers %} +
StudentFareMon AMMon PMTue AMTue PMWed AMWed PMThu AMThu PMFri AMFri PM
- - - - - - - - - - - - + + + + + + + + + + + + - {% endfor %} -
{{ traveller.display }}{{ traveller.isFared }} StudentFareMon AMMon PMTue AMTue PMWed AMWed PMThu AMThu PMFri AMFri PM
+ {% for traveller in stop.travellers %} + + {{ traveller.display }} + {{ traveller.isFared }} + + + + + + + + + + + + {% endfor %} + + {% endif %}
{% endfor %} {% if route.route_stops %} diff --git a/busManager/coord/templates/reports/school_roll.html b/busManager/coord/templates/reports/school_roll.html index 40e2ed7..3068167 100644 --- a/busManager/coord/templates/reports/school_roll.html +++ b/busManager/coord/templates/reports/school_roll.html @@ -18,8 +18,8 @@ Fare Shuttle Stop - AM Time - PM Time + Pickup + Drop off {% for traveller in route.travellers %} diff --git a/requirements.txt b/requirements.txt index a1d5891..8a2e3c8 100644 Binary files a/requirements.txt and b/requirements.txt differ