diff options
Diffstat (limited to 'maconomy')
-rw-r--r-- | maconomy/__init__.py | 3 | ||||
-rw-r--r-- | maconomy/cli.py | 3 | ||||
-rw-r--r-- | maconomy/models.py | 25 | ||||
-rw-r--r-- | maconomy/repositories.py | 6 | ||||
-rw-r--r-- | maconomy/templates.py | 35 | ||||
-rw-r--r-- | maconomy/views.py | 37 |
6 files changed, 97 insertions, 12 deletions
diff --git a/maconomy/__init__.py b/maconomy/__init__.py index 09f2516..6f51466 100644 --- a/maconomy/__init__.py +++ b/maconomy/__init__.py @@ -1,4 +1,5 @@ from maconomy.models import Employee, Timesheet from maconomy.repositories import create_db, TimeRegistrationRepository from maconomy.mailer import Mailer -from maconomy.templates import UnsubmittedEmailTemplate, MissingEmailTemplate, ManagerEmailTemplate +from maconomy.templates import * +from maconomy.views import * diff --git a/maconomy/cli.py b/maconomy/cli.py index 0a11db5..426e826 100644 --- a/maconomy/cli.py +++ b/maconomy/cli.py @@ -5,6 +5,9 @@ def parse(): parser = argparse.ArgumentParser(description="Notifies people of missing hours registration") parser.add_argument("-c", "--config", required=True) parser.add_argument("--dry", action="store_true", default=False, help="Do not send emails to users, but print affected users instead") + parser.add_argument("--manager", action="store_true", default=False, help="Sends email to managers about employees missing submission and not yet approved") + parser.add_argument("--ceo", action="store_true", default=False, help="Sends a executive summery employees missing submission and not yet approved") + parser.add_argument("--summary", action="store_true", default=False, help="Prints unsubmitted, missing and non approved status") return parser.parse_args() def load_config(conf_file): diff --git a/maconomy/models.py b/maconomy/models.py index 15fb46b..14629ca 100644 --- a/maconomy/models.py +++ b/maconomy/models.py @@ -1,15 +1,32 @@ class Employee: - def __init__(self, result): - self.id, self.name, self.email = result[:3] + def __init__(self, id, name, email): + self.id = id + self.name = name + self.email = email + @classmethod + def from_result(cls, result): + id, name, email = result[:3] + return cls(id, name, email) + def __unicode__(self): return u"{} ({})".format(self.name, self.id) class Timesheet: - def __init__(self, result): - self.week, self.submitted, self.approved = result[:3] + def __init__(self, week, submitted, approved, employee, approver): + self.week = week + self.submitted = submitted + self.approved = approved + self.employee = employee + self.approver = approver + + @classmethod + def from_result(cls, result): + employee = Employee.from_result(result) + week, submitted, approved, approver = result[3:7] + return cls(week, submitted, approved, employee, approver) def status(self): return "submitted" if self.is_submitted() else "unsubmitted" diff --git a/maconomy/repositories.py b/maconomy/repositories.py index fb143e8..2dcb019 100644 --- a/maconomy/repositories.py +++ b/maconomy/repositories.py @@ -1,5 +1,5 @@ import cx_Oracle -from maconomy.models import Employee, Timesheet +from maconomy.models import Timesheet def create_db(config): user = config.get("db", "user") @@ -17,7 +17,7 @@ class DBRepository: class TimeRegistrationRepository(DBRepository): def all_active(self): - query = """SELECT e.EMPLOYEENUMBER,e.NAME1,e.ELECTRONICMAILADDRESS, t.WEEKNUMBER, t.SUBMITTED, t.APPROVED from EMPLOYEE e + query = """SELECT e.EMPLOYEENUMBER,e.NAME1,e.ELECTRONICMAILADDRESS, t.WEEKNUMBER, t.SUBMITTED, t.APPROVED, e.SUPERIOREMPLOYEE from EMPLOYEE e LEFT OUTER JOIN TIMESHEETHEADER t ON e.EMPLOYEENUMBER = t.EMPLOYEENUMBER and t.PERIODSTART=to_char(trunc(sysdate-7, 'IW'),'YYYY.MM.DD') @@ -31,5 +31,5 @@ class TimeRegistrationRepository(DBRepository): res = self.cursor.execute(query) rows = res.fetchall() - return [(Employee(r), Timesheet(r[3:])) for r in rows] + return [Timesheet.from_result(r) for r in rows] diff --git a/maconomy/templates.py b/maconomy/templates.py index 07cbeb1..4889c48 100644 --- a/maconomy/templates.py +++ b/maconomy/templates.py @@ -30,11 +30,38 @@ class MissingEmailTemplate(BaseTemplate): class ManagerEmailTemplate(BaseTemplate): def __init__(self): self.set_template("templates/manager.html") + self.status_template = EmployeeStatusTemplate() - def build(self, employee, week, maconomyurl, **kwargs): - submitted = '' if 'submitted' in kwargs and kwargs['submitted'] else 'not' - approved = '' if 'approved' in kwargs and kwargs['approved'] else 'not' - return self.template.substitute(employee=employee.__unicode__(),week=week,maconomyurl=maconomyurl, submitted=submitted, approved=approved) + 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) + diff --git a/maconomy/views.py b/maconomy/views.py new file mode 100644 index 0000000..10e9c06 --- /dev/null +++ b/maconomy/views.py @@ -0,0 +1,37 @@ +from maconomy import MissingEmailTemplate, UnsubmittedEmailTemplate, ManagerEmailTemplate, CEOEmailTemplate + +class EmployeeEmailView(object): + def __init__(self, config): + self.missing_template = MissingEmailTemplate() + self.unsubmitted_template = UnsubmittedEmailTemplate() + self.maconomyurl = config.get("view", "maconomyurl") + self.helpurl = config.get("view", "helpurl") + + def render(self,timesheet): + if timesheet.is_missing(): + return self.missing_template.build( + maconomyurl=self.maconomyurl, + helpurl=self.helpurl) + elif not timesheet.is_submitted(): + return self.unsubmitted_template.build( + week=timesheet.week, + maconomyurl=self.maconomyurl, + helpurl=self.helpurl) + else: + return None + + +class ManagerEmailView(object): + def __init__(self, config): + self.maconomyurl = config.get("view", "maconomyurl") + self.template = ManagerEmailTemplate() + + def render(self, timesheets): + return self.template.build(timesheets, self.maconomyurl) + +class CEOEmailView(object): + def __init__(self): + self.template = CEOEmailTemplate() + + def render(self, timesheets): + return self.template.build(timesheets) |