summary history files

web/scripts/report_account_breakdown.py
import sys
import os

sys.path.insert(1, os.path.join(sys.path[0], ".."))

from app import app, models
from app.models import session
from flask_script import Manager
import pandas as pd

manager = Manager(app)


@manager.option("--account-id", dest="account_id", required=True)
@manager.option("--monthly", required=False, action="store_true")
@manager.option("--monthly-count", required=False, default=3)
@manager.option("--weekly", required=False, action="store_true")
@manager.option("--weekly-count", required=False, default=12)
@manager.option("--daily", required=False, action="store_true")
@manager.option("--daily-count", required=False, default=30)
def run(account_id, monthly, monthly_count, weekly, weekly_count, daily, daily_count):
    transactions = (
        session.query(
            models.Transaction.date, models.Transaction.debit, models.Transaction.credit
        )
        .filter(
            models.Transaction.account_id == account_id,
            models.Transaction.is_deleted == 0,
        )
        .order_by(models.Transaction.date.desc())
        .statement
    )
    pd.set_option("display.max_rows", 1000)
    df = pd.read_sql_query(
        sql=transactions,
        con=session.bind,
        parse_dates=["date"],
    )
    df["total"] = df["debit"] + df["credit"]
    df["total"] = df["total"].apply(pd.to_numeric) / float(100)
    df.pop("debit")
    df.pop("credit")
    df.date = pd.to_datetime(df.date)
    df.set_index("date", inplace=True)

    if monthly:
        print(df.resample("M").sum().tail(int(monthly_count)))
    if weekly:
        print(df.resample("W").sum().tail(int(weekly_count)))
    if daily:
        print(df.resample("D").sum().tail(int(daily_count)))


if __name__ == "__main__":
    manager.run()