summaryrefslogtreecommitdiff
path: root/app/views/expenses.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--app/views/expenses.py76
1 files changed, 76 insertions, 0 deletions
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("/<int(fixed_digits=4):year>/<int(fixed_digits=2):month>")
+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/<int:id>")
+def edit(id):
+ return render_template("page.jinja")
+
+@mod.route("/add/")
+def add():
+ return render_template("page.jinja")