diff options
Diffstat (limited to 'controller.py')
-rw-r--r-- | controller.py | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/controller.py b/controller.py index 95dba66..21684ee 100644 --- a/controller.py +++ b/controller.py @@ -9,6 +9,7 @@ from helper import appdir from renderer import render import datetime, decimal +import itertools as iter import operator as op from sqlalchemy import sql @@ -134,8 +135,19 @@ class Edit (Add): raise web.seeother("/") class Const: - def GET(self): - return "Const" + dformat = "%m.%Y" + def GET(self, id=None): + if id is None: + d = datetime.date.today() + + current = ConstExpense.of_month(d.month, d.year) + old = ConstExpense.query.except_(current).order_by(ConstExpense.start) + + return render("constlist", current = current.order_by(ConstExpense.start).all(), old = old.all()) + + else: + exp = ConstExpense.get(id) + return render("const", exp = exp, dformat = lambda x: x.strftime(self.dformat)) class ConstAdd: template = "constadd" @@ -157,7 +169,10 @@ class ConstAdd: e.expense = decimal.Decimal(f.expense.value) e.description = f.description.value - raise web.seeother("/") + if int(f.prev.value) != -1: + e.prev = ConstExpense.get(f.prev.value) + + raise web.seeother("/const/%s" % e.id) else: return render(self.template, form = f) @@ -165,6 +180,7 @@ class ConstAdd: return ConstExpense() def form(self): + CE = ConstExpense return Form( form.Textbox( "start", @@ -197,14 +213,28 @@ class ConstAdd: form.Dropdown( "category", map(op.itemgetter(0), sorted(Category.query.values(Category.name))) + ), + form.Dropdown( + "prev", + iter.chain([(-1, '')], ConstExpense.query.order_by(CE.description).values(CE.id, CE.description)) ) ) class ConstEdit (ConstAdd): template = "constedit" - def GET(self, id): - exp = ConstExpense.get(id) + def GET(self, id, fromId): + + if id == "from": + fromC = ConstExpense.get(fromId) + + exp = ConstExpense() + exp.from_dict(fromC.to_dict(exclude=["id", "prev"])) + exp.prev = fromC + session.commit() + else: + exp = ConstExpense.get(id) + self.get_expense = lambda *x: exp fvalues = { @@ -213,7 +243,8 @@ class ConstEdit (ConstAdd): "months" : str(exp.months), "expense" : str(exp.expense), "description" : exp.description, - "category" : exp.category.name + "category" : exp.category.name, + "prev" : exp.prev.id if exp.prev else str(-1) } f = self.form() f.fill(fvalues) |