#! /usr/bin/env python3 from models import Category, Transaction from helper import get_session import sys import click from bottle import template 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") @click.option("--profile", "-p") @click.option("--year", "-y") def command(profile, year): if not year: year = date.today().year session = get_session(profile) main_categories = session.query(Category).filter(Category.parent_id == None).all() data = {} 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) HTML(string=tpl).write_pdf(filename) print("Report saved to {}".format(filename))