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 }} |
-
-
- | Student |
- Fare |
- Mon AM |
- Mon PM |
- Tue AM |
- Tue PM |
- Wed AM |
- Wed PM |
- Thu AM |
- Thu PM |
- Fri AM |
- Fri PM |
-
- {% for traveller in stop.travellers %}
+ {% if stop.travellers %}
+
- | {{ traveller.display }} |
- {{ traveller.isFared }} |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
+ Student |
+ Fare |
+ Mon AM |
+ Mon PM |
+ Tue AM |
+ Tue PM |
+ Wed AM |
+ Wed PM |
+ Thu AM |
+ Thu PM |
+ Fri AM |
+ Fri PM |
- {% endfor %}
-
+ {% 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