summaryrefslogtreecommitdiff
path: root/controller.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--controller.py43
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)