summaryrefslogtreecommitdiff
path: root/app/views/stats.py
blob: 90f1686094ac225c81ba82f9b8189ff9c5cb9e21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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 }