diff --git a/report.py b/report.py index 9b4d48c..415a321 100644 --- a/report.py +++ b/report.py @@ -8,6 +8,7 @@ from sqlalchemy import func from weasyprint import HTML from datetime import date from helper import format_amount +from pprint import pprint @click.command(name="report") @@ -18,45 +19,18 @@ def command(profile, year): year = date.today().year session = get_session(profile) - result = ( - session.query( - Transaction.category_id, - Category.name, - func.sum(Transaction.amount).label("total"), - ) - .group_by(Transaction.category_id) - .join(Category, Transaction.category_id == Category.id) - .all() - ) + main_categories = session.query(Category).filter(Category.parent_id == None).all() - sum_of_categories = [] - for r in result: - tmp = {} - tmp["name"] = r.name - tmp["total"] = r.total - tmp["total_formatted"] = format_amount(r.total) - tmp["full_name"] = session.query(Category).get(r.category_id).full_name() - sum_of_categories.append(tmp) + data = {} - categories = sorted(sum_of_categories, key=lambda i: i["name"]) - einnahmen = [c for c in categories if c["total"] > 0] - ausgaben = [c for c in categories if c["total"] < 0] - - sum_einnahmen = sum(c["total"] for c in einnahmen) - sum_ausgaben = sum(c["total"] for c in ausgaben) - - total = { - "einnahmen": format_amount(sum_einnahmen), - "ausgaben": format_amount(sum_ausgaben), - "total": format_amount(sum_einnahmen + sum_ausgaben), - } - - context = { - "einnahmen": einnahmen, - "ausgaben": ausgaben, - "year": year, - "total": total, - } + for mc in main_categories: + data[mc.name] = {} + sub_categories = session.query(Category).filter(Category.parent_id == mc.id).all() + for sc in sub_categories: + transactions = session.query(Transaction).filter(Transaction.category_id == sc.id).all() + data[mc.name][sc.name] = format_amount(sum([x.amount for x in transactions])) + + context = {"year": year, "data": data} tpl = template("views/report.tpl", context) filename = "output/report_{}_{}.pdf".format(profile, year) diff --git a/views/report.tpl b/views/report.tpl index ccae71a..f45563c 100644 --- a/views/report.tpl +++ b/views/report.tpl @@ -5,7 +5,7 @@ - EUR {{ year }} + Report {{ year }}