Email roll to schools function

This commit is contained in:
John Mullins
2023-09-01 16:24:55 +10:00
parent d051bc8beb
commit c55471a298
6 changed files with 47 additions and 39 deletions
+25 -18
View File
@@ -1,14 +1,13 @@
import csv
from datetime import date
from io import BytesIO, StringIO
from io import BytesIO
from django.core.mail import EmailMessage
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_travellerRoute_context
from coord.models import Company
from coord.context_helpers import bus_roll_context, school_roll_context
from coord.models import Company, School
def render_to_pdf(template, context):
@@ -47,20 +46,28 @@ def email_companies_bus_roll(request, query_set=None):
return render_to_pdf(html_template, context)
def email_school_roll_csv(request, school):
def email_school_roll(request, query_set):
html_template = 'reports/school_roll.html'
context = school_roll_context(query_set)
travellers = school_travellerRoute_context(school)
csvFile = StringIO()
fieldnames = list(travellers[0].keys())
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)
writer = csv.DictWriter(csvFile, fieldnames=fieldnames)
writer.writeheader(),
writer.writerows(travellers)
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)
email.attach(f"school_bus_roll_{date.today()}.pdf", pdf.content)
email.send(fail_silently=True)
subject = "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)
email.attach(f"school_bus_roll_{date.today()}.csv", csvFile.getvalue(), 'text/csv')
email.send()
return render_to_pdf(html_template, context)