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 calendar 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) def date_to_ms(d): return calendar.timegm(d.timetuple()) * 1000 @mod.route('/') @login_required @templated def show(): # easy way: fetch them all and then do some computation expenses = defaultdict(int) t = today().replace(day = 1) for e in ConstExpense.of(current_user): cur = e.start end = min(e.end, t) while cur <= end: expenses[date_to_ms(cur)] += e.monthly cur = next_date(cur) expenses = list(sorted(expenses.iteritems())) return { 'consts': expenses }