From 01531c519a4a93b985a8494d28f951c746683f56 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Wed, 12 May 2010 10:44:15 +0200 Subject: Show more details --- controller.py | 14 +++++--------- model.py | 22 ++++++++++++++++++---- static/js/show.js | 2 +- templates/show.mako | 23 ++++++++++++++++++----- 4 files changed, 42 insertions(+), 19 deletions(-) diff --git a/controller.py b/controller.py index 4e488dd..b853f2a 100644 --- a/controller.py +++ b/controller.py @@ -32,18 +32,14 @@ class Show: month = int(month) ssum = sql.functions.sum(SingleExpense.expense) - csum = sql.functions.sum(ConstExpense.monthly) + query = SingleExpense.of_month(month, year) - query = SingleExpense.of_month(month, year).\ - group_by(SingleExpense.category_id).\ - values(SingleExpense.category_id, ssum) + result = query.group_by(SingleExpense.category_id).\ + values(SingleExpense.category_id, ssum) - exps = [CatExpense(Category.query.get(c), s) for c,s in query] + exps = [CatExpense(Category.query.get(c), s, query.filter(SingleExpense.category_id == c)) for c,s in result] - 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) + return MonthExpense(datetime.date(int(year), int(month), 1), exps) def render(self, exps): return render("show", exps = exps) diff --git a/model.py b/model.py index 2a16bde..d8cf91d 100644 --- a/model.py +++ b/model.py @@ -82,7 +82,7 @@ class ConstExpense (Expense): next = OneToOne('ConstExpense', inverse = 'prev') prev = ManyToOne('ConstExpense') - monthly = ColumnProperty(lambda c: sql.cast(c.expense / c.months, ExpNum), deferred = True) + monthly = ColumnProperty(lambda c: sql.cast(c.expense / c.months, ExpNum)) @classmethod def of_month (cls, month, year): @@ -92,14 +92,28 @@ class ConstExpense (Expense): # # Work entities (not stored in DB) # -CatExpense = namedtuple('CatExpense', 'cat expense') +class CatExpense (namedtuple('CatExpense', 'cat expense exps')): + __slots__ = () + + @property + def all (self): + return self.exps.order_by(SingleExpense.day).all() -class MonthExpense (namedtuple('MonthExpense', 'date const catexps')): +class MonthExpense (namedtuple('MonthExpense', 'date catexps')): __slots__ = () + @property + def constsum (self): + c = ConstExpense.of_month(self.date.month, self.date.year) + return c.value(sql.functions.sum(ConstExpense.monthly)) or None + + @property + def consts (self): + return ConstExpense.of_month(self.date.month, self.date.year).all() + @property def sum (self): - return self.const + sum(x.expense for x in self.catexps) + return self.constsum + sum(x.expense for x in self.catexps) @property def all (self): diff --git a/static/js/show.js b/static/js/show.js index c0b6d12..0c2fd8a 100644 --- a/static/js/show.js +++ b/static/js/show.js @@ -1,6 +1,6 @@ $(document).ready(function(){ $(".details_heading").click(function() { - $(this).next().toggle() + $(this).next().next().toggle() }) $(".details").hide() diff --git a/templates/show.mako b/templates/show.mako index 97c2731..88d802c 100644 --- a/templates/show.mako +++ b/templates/show.mako @@ -5,12 +5,24 @@

${get_d(e)}

% endif % for c in e.catexps: - ${c.cat.name} ${c.expense}
+ ${c.cat.name} ${c.expense}
+
+ +
% endfor - Constant: ${e.const}
- In Summa: ${e.sum}

- -

Details

+ Constant: ${e.constsum}
+
+ +
+ In Summa: ${e.sum}
+
% endfor <%def name="heading()"> -- cgit v1.2.3-54-g00ecf