summaryrefslogtreecommitdiff
path: root/maconomy
diff options
context:
space:
mode:
Diffstat (limited to 'maconomy')
-rw-r--r--maconomy/__init__.py3
-rw-r--r--maconomy/cli.py3
-rw-r--r--maconomy/models.py25
-rw-r--r--maconomy/repositories.py6
-rw-r--r--maconomy/templates.py35
-rw-r--r--maconomy/views.py37
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)