From abfc1005db0f256ca60823f61b8a904304eb9a4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Fri, 12 Apr 2013 01:32:37 +0200 Subject: In Flask/Jinja: Show / Categories --- app/views/expenses.py | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 app/views/expenses.py (limited to 'app/views/expenses.py') diff --git a/app/views/expenses.py b/app/views/expenses.py new file mode 100644 index 0000000..6b976de --- /dev/null +++ b/app/views/expenses.py @@ -0,0 +1,76 @@ +from flask import Blueprint +from flask import render_template, request, url_for + +import datetime, decimal +from sqlalchemy import sql, func + +from ..model import Category, SingleExpense, CatExpense, MonthExpense + +mod = Blueprint('expenses', __name__) + +def is_last(exp): + return exp.date >= datetime.date.today().replace(day = 1) + +def calc_month_exp(year, month): + ssum = func.sum(SingleExpense.expense) + query = SingleExpense.of_month(month, year) + + result = query.group_by(SingleExpense.category_id).\ + values(SingleExpense.category_id, ssum) + + exps = [CatExpense(Category.query.get(c), s, query.filter(SingleExpense.category_id == c)) for c,s in result] + + return MonthExpense(datetime.date(year, month, 1), exps) + +def prev_date(exp): + if exp.date.month == 1: + return { "year": exp.date.year - 1, "month": 12 } + else: + return { "year": exp.date.year, "month": exp.date.month - 1 } + +def next_date(exps): + def _next_date(exp): + if exp.date.month == 13 - len(exps): + return { "year": exp.date.year + 1, "month": 1 } + else: + return { "year": exp.date.year, "month": exp.date.month + len(exps) } + return _next_date + +@mod.app_template_filter("date") +def format_date(s): + if hasattr(s, "date"): + return "%s/%s" % (s.date.year, s.date.month) + else: + return "%(year)s/%(month)s" % s + +def render_show(exps, is_last): + return render_template("pages/show.jinja", + exps = exps, is_last = is_last, + prev_date = prev_date, + next_date = next_date(exps)) + + +@mod.route("//") +def show_date(year, month): + c = calc_month_exp(year, month) + return render_show([c], is_last(c)) + +@mod.route("/") +def show(year = None, month = None): + d = datetime.date.today() + + first = calc_month_exp(d.year, d.month) + if d.month == 1: + second = calc_month_exp(d.year - 1, 12) + else: + second = calc_month_exp(d.year, d.month - 1) + + return render_show([first, second], is_last(first)) + +@mod.route("/edit/") +def edit(id): + return render_template("page.jinja") + +@mod.route("/add/") +def add(): + return render_template("page.jinja") -- cgit v1.2.3