from string import Template from maconomy import utils 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) def tag(self, tag, content): return u"<{tag}>{content}".format(tag=tag, content=content) 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 = EmployeeStatusListTemplate() def build(self, timesheets, maconomyurl): statuslist = self.build_statuslist(timesheets) return self.template.substitute(statuslist=statuslist,maconomyurl=maconomyurl, amount=len(timesheets)) def build_statuslist(self, timesheets): result = u"" unfinished = [timesheet for timesheet in timesheets if not timesheet.is_submitted()] #Sort to get unsubmitted last unfinished.sort(key=lambda t: t.status_summary()) if unfinished: result += self.tag("h4","Unfinished:")+u"\n{}".format(self.status_template.build(unfinished)) notapproved = set(timesheets) - set(unfinished) if notapproved: result += self.tag("h4", "For approval:") + u"\n{}".format(self.status_template.build(notapproved)) return result class EmployeeStatusListTemplate(BaseTemplate): def __init__(self): pass def build(self, timesheets): statuslist = u"\n".join([self.status_summary(t) for t in timesheets]) return self.tag("ul", statuslist) if statuslist else "" def status_summary(self, timesheet): content = u"{}".format(timesheet.status_summary()) return self.tag("li", content) class CEOEmailTemplate(BaseTemplate): def __init__(self): self.set_template("templates/ceo.html") self.status_template = EmployeeStatusListTemplate() def build(self, timesheets): per_manager = utils.per_manager(timesheets) statuslist = u"" for manager_id, relevant_timesheets in per_manager.items(): relevant_timesheets.sort(key=lambda t: t.status_summary()) statuslist += self.tag("h4", u"Status for {} employees:".format(manager_id)) statuslist += self.status_template.build(relevant_timesheets) return self.template.substitute(statuslist=statuslist)