from string import Template class BaseTemplate(object): def __init__(self, template_file): self.set_template(template_file) def build(self, **kwargs): return self.template.substitute(**kwargs) def set_template(self, template_file): with open(template_file, 'r') as f: template_base = f.read() self.template = Template(template_base) class UnsubmittedEmailTemplate(BaseTemplate): def __init__(self): self.set_template("templates/unsubmitted.html") def build(self, week, maconomyurl, helpurl): return self.template.substitute(week=week, maconomyurl=maconomyurl, helpurl=helpurl) class MissingEmailTemplate(BaseTemplate): def __init__(self): self.set_template("templates/missing.html") def build(self, maconomyurl, helpurl): return self.template.substitute(maconomyurl=maconomyurl, helpurl=helpurl) class ManagerEmailTemplate(BaseTemplate): def __init__(self): self.set_template("templates/manager.html") self.status_template = EmployeeStatusTemplate() def build(self, timesheets, maconomyurl): statuslist = self.build_statuslist(timesheets) return self.template.substitute(statuslist=statuslist,maconomyurl=maconomyurl) def build_statuslist(self, timesheets): statuslist = [self.status_template.build(timesheet) for timesheet in timesheets] return "\n".join(statuslist) class EmployeeStatusTemplate(BaseTemplate): def __init__(self, include_approver=False): self.set_template("templates/_employee_status.html") self.include_approver = include_approver def build(self, timesheet): employee = timesheet.employee submitted = '' if timesheet.is_submitted() else 'not' approver = timesheet.approver if self.include_approver else 'you' approved = '' if timesheet.is_approved() else 'not' return self.template.substitute(employee=employee.__unicode__(), submitted=submitted, approved=approved, approver=approver) class CEOEmailTemplate(BaseTemplate): def __init__(self): self.set_template("templates/ceo.html") self.status_template = EmployeeStatusTemplate(include_approver=True) def build(self, timesheets): statuslist = self.build_statuslist(timesheets) return self.template.substitute(statuslist=statuslist) def build_statuslist(self, timesheets): statuslist = [self.status_template.build(timesheet) for timesheet in timesheets] return "\n".join(statuslist)