Files
bus-manager/busManager/messaging/services/email.py
T
st01765 b695dd8054 Created new models to replicate out of and split coord app
Moved helpers and views to their respective new apps
2026-02-05 11:18:08 +11:00

127 lines
4.7 KiB
Python

from datetime import date
from django.core.mail import EmailMessage
from common.documents import render_to_pdf
from transport.context_busroll import bus_roll_context
from transport.context_helpers import emergency_contacts_context
from transport.models import Company
from traveller.context_helpers import school_roll_context
from traveller.models import School
def _getBCC(request):
if request.user.email:
return [request.user.email]
return []
def email_companies_bus_roll(request, query_set=None):
html_template = 'reports/bus_roll.html'
context = bus_roll_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 Schools Bus Roll"
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, _getBCC(request))
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(request))
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_school_roll(request, query_set):
html_template = 'reports/school_roll.html'
context = school_roll_context(query_set)
for school in School.objects.all():
if not school.email:
continue
school_route = []
for school_context in context.get("schools"):
if school_context.get("name") == school.name:
school_route.append(school_context)
if not school_route:
continue
school_context = {'schools': school_route}
pdf = render_to_pdf(html_template, school_context)
subject = "Echuca Schools Bus Roll"
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, _getBCC(request))
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_school_shuttle_roll(request, queryset):
html_template = 'reports/bus_roll.html'
schools = []
for shuttle in queryset:
if shuttle.school not in schools:
schools.append(shuttle.school)
for school in schools:
buses = []
for shuttle in queryset:
if shuttle.school == school:
buses.append(shuttle.bus)
pdf = render_to_pdf(html_template, bus_roll_context(buses, include_bus_stops=False))
subject = "Echuca Schools Shuttle Roll"
message = f"A new shuttle 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, _getBCC(request))
email.attach(f"school_shuttle_roll_{date.today()}.pdf", pdf.content)
email.send(fail_silently=True)
buses = []
for shuttle in queryset:
if shuttle.bus not in buses:
buses.append(shuttle.bus)
return render_to_pdf(html_template, bus_roll_context(buses, include_bus_stops=False))