57 lines
2.4 KiB
Python
57 lines
2.4 KiB
Python
|
from datetime import datetime, timedelta
|
||
|
from django.core.mail import send_mail
|
||
|
from django.template import Template, Context
|
||
|
from django.http import HttpResponse
|
||
|
from django.conf import settings
|
||
|
from .models import ScheduledReport, ScheduledReportGroup, ReportRecipient
|
||
|
class ScheduledReportConfig(object):
|
||
|
def __init__(self, scheduled_report):
|
||
|
"""
|
||
|
Expects a scheduled report object and inititializes
|
||
|
its own scheduled_report attribute with it
|
||
|
"""
|
||
|
self.scheduled_report = scheduled_report
|
||
|
def get_report_config(self):
|
||
|
"""
|
||
|
Returns the configuration related to a scheduled report, needed
|
||
|
to populate the email
|
||
|
"""
|
||
|
return {
|
||
|
"template_context": self._get_related_reports_data(),
|
||
|
"recipients": self._get_report_recipients()
|
||
|
}
|
||
|
def _get_related_reports_data(self):
|
||
|
"""
|
||
|
Returns the list of reports data which needs to be sent out in a scheduled report
|
||
|
"""
|
||
|
pass
|
||
|
def _get_report_recipients(self):
|
||
|
"""
|
||
|
Returns the recipient list for a scheduled report
|
||
|
"""
|
||
|
pass
|
||
|
def create_email_data(content=None):
|
||
|
content = '''
|
||
|
|
||
|
|
||
|
''' + str(content) + ''''''
|
||
|
return content
|
||
|
def send_emails():
|
||
|
current_time = datetime.utcnow()
|
||
|
scheduled_reports = ScheduledReport.objects.filter(next_run_at__lt = current_time)
|
||
|
for scheduled_report in scheduled_reports:
|
||
|
report_config = ScheduledReportConfig(scheduled_report).get_report_config()
|
||
|
""" Specify the template path you want to send out in the email. """
|
||
|
template = Template(create_email_data('path/to/your/email_template.html'))
|
||
|
""" //Create your email html using Django's context processor """
|
||
|
report_template = template.render(Context(report_config['template_context']))
|
||
|
scheduled_report.save()
|
||
|
if not scheduled_report.subject:
|
||
|
""" Handle exception for subject not provided """
|
||
|
if not report_config['recipients']:
|
||
|
""" Handle exception for recipients not provided """
|
||
|
send_mail(
|
||
|
scheduled_report.subject, 'Here is the message.',
|
||
|
settings.EMAIL_HOST_USER, report_config['recipients'],
|
||
|
fail_silently=False, html_message=report_template
|
||
|
)
|