summaryrefslogtreecommitdiff
path: root/app/views/stats.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/views/stats.py')
-rw-r--r--app/views/stats.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/app/views/stats.py b/app/views/stats.py
new file mode 100644
index 0000000..b1e9b1a
--- /dev/null
+++ b/app/views/stats.py
@@ -0,0 +1,36 @@
+from . import Blueprint, flash, db, \
+ current_user, login_required, \
+ assert_authorisation, templated, redirect, request, \
+ today
+
+from .. import forms as F
+from ..model import ConstExpense
+import sqlalchemy as sql
+import time
+from collections import defaultdict
+
+mod = Blueprint('stats', __name__)
+
+def next_date(d):
+ if d.month == 12:
+ return d.replace(year = d.year + 1, month = 1)
+ else:
+ return d.replace(month = d.month + 1)
+
+@mod.route('/')
+@login_required
+@templated
+def show():
+ # easy way: fetch them all and then do some computation
+ expenses = defaultdict(int)
+ t = next_date (today().replace(day = 1))
+ for e in ConstExpense.of(current_user):
+ cur = e.start
+ end = min(e.end, t)
+ while cur <= end:
+ expenses[time.mktime(cur.timetuple()) * 1000] += e.monthly
+ cur = next_date(cur)
+
+ expenses = list(sorted((int(k),v) for k,v in expenses.iteritems()))
+
+ return { 'consts': expenses }