schmeckels/report.py
2020-06-17 22:01:21 +02:00

38 lines
1.2 KiB
Python

#! /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))