diff options
Diffstat (limited to 'controller.py')
-rw-r--r-- | controller.py | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/controller.py b/controller.py index 69eaf76..0957692 100644 --- a/controller.py +++ b/controller.py @@ -1,13 +1,47 @@ from __future__ import with_statement import web + +from model import * from helper import appdir from renderer import render +import datetime +from sqlalchemy import sql + class Show: def GET(self, year = '', month = ''): - if year: return "Show %s/%s" % (year, month) - else: return "Show current" + if year: + return self.render([self.calc(year, month)]) + else: + d = datetime.date.today() + + first = self.calc(d.year, d.month) + if d.month == 1: + second = self.calc(d.year - 1, 12) + else: + second = self.calc(d.year, d.month - 1) + + return self.render([first, second]) + + def calc(self, year, month): + + ssum = sql.functions.sum(SingleExpense.expense) + csum = sql.functions.sum(ConstExpense.expense) + + query = SingleExpense.of_month(month, year).\ + group_by(SingleExpense.category_id).\ + values(SingleExpense.category_id, ssum) + + exps = [CatExpense(Category.query.get(c), s) for c,s in query] + + consts = ConstExpense.of_month(month, year).value(csum) + if consts is None: consts = 0 + + return MonthExpense(datetime.date(int(year), int(month), 1), consts, exps) + + def render(self, exps): + return render("show", exps = exps) class Add: def GET(self): |