stats: Automatic selection of valid tags. Show withdrawals
This commit is contained in:
parent
d9a1f637f8
commit
b890d13e6e
1 changed files with 25 additions and 3 deletions
|
@ -13,16 +13,20 @@ from dateutil.relativedelta import relativedelta
|
||||||
def command():
|
def command():
|
||||||
outgoing = {}
|
outgoing = {}
|
||||||
incoming = {}
|
incoming = {}
|
||||||
|
withdrawal = {}
|
||||||
session = get_session()
|
session = get_session()
|
||||||
|
|
||||||
tags = session.query(Tag).filter_by(reporting=True).all()
|
tags = session.query(Tag).filter_by(reporting=True).all()
|
||||||
|
|
||||||
# Get start and end of timerange
|
# Get start and end of timerange
|
||||||
year = 2021
|
year = 2022
|
||||||
start_date = date(year=year,month=1,day=1)
|
start_date = date(year=year,month=1,day=1)
|
||||||
end_date = date(year=year,month=12,day=31)
|
end_date = date(year=year,month=12,day=31)
|
||||||
|
|
||||||
for tag in tags:
|
for tag in tags:
|
||||||
|
if tag.name.find(":") < 0 and tag.name != "Privatentnahme":
|
||||||
|
continue
|
||||||
|
|
||||||
tag_sum = (
|
tag_sum = (
|
||||||
session.query(func.sum(Transaction.amount))
|
session.query(func.sum(Transaction.amount))
|
||||||
.filter(and_(Transaction.date >= start_date, Transaction.date <= end_date))
|
.filter(and_(Transaction.date >= start_date, Transaction.date <= end_date))
|
||||||
|
@ -30,29 +34,47 @@ def command():
|
||||||
.first()[0]
|
.first()[0]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# No transactions with this tag in the given timeframe
|
||||||
|
if not tag_sum:
|
||||||
|
continue
|
||||||
|
|
||||||
if tag_sum < 0:
|
if tag_sum < 0:
|
||||||
outgoing[tag] = {"sum": tag_sum}
|
if tag.name == "Privatentnahme":
|
||||||
|
withdrawal[tag] = {"sum": tag_sum}
|
||||||
|
else:
|
||||||
|
outgoing[tag] = {"sum": tag_sum}
|
||||||
else:
|
else:
|
||||||
incoming[tag] = {"sum": tag_sum}
|
incoming[tag] = {"sum": tag_sum}
|
||||||
|
|
||||||
sum_outgoing = sum(x["sum"] for x in outgoing.values())
|
sum_outgoing = sum(x["sum"] for x in outgoing.values())
|
||||||
sum_incoming = sum(x["sum"] for x in incoming.values())
|
sum_incoming = sum(x["sum"] for x in incoming.values())
|
||||||
|
sum_withdrawal = sum(x["sum"] for x in withdrawal.values())
|
||||||
|
|
||||||
outgoing = {k: format_amount(v) for k, v in sorted(outgoing.items(), key=lambda item: float(item[1]["sum"]))}
|
outgoing = {k: format_amount(v) for k, v in sorted(outgoing.items(), key=lambda item: float(item[1]["sum"]))}
|
||||||
incoming = {k: format_amount(v) for k, v in sorted(incoming.items(), key=lambda item: float(item[1]["sum"]))}
|
incoming = {k: format_amount(v) for k, v in sorted(incoming.items(), key=lambda item: float(item[1]["sum"]))}
|
||||||
|
withdrawawl = {k: format_amount(v) for k, v in sorted(withdrawal.items(), key=lambda item: float(item[1]["sum"]))}
|
||||||
|
|
||||||
print(f"============== Report for {year} =============\n")
|
print(f"============== Report for {year} =============\n")
|
||||||
|
|
||||||
|
# Ausgaben
|
||||||
for name, data in outgoing.items():
|
for name, data in outgoing.items():
|
||||||
print(" {:<30} {:>10} €".format(name.name, data['sum']))
|
print(" {:<30} {:>10} €".format(name.name, data['sum']))
|
||||||
print("-"*44)
|
print("-"*44)
|
||||||
print(" {:<30} {:>10} €".format("AUSGABEN", format_amount(sum_outgoing)))
|
print(" {:<30} {:>10} €".format("AUSGABEN", format_amount(sum_outgoing)))
|
||||||
|
|
||||||
print("\n")
|
print("\n")
|
||||||
|
|
||||||
|
# Einnahmen
|
||||||
for name, data in incoming.items():
|
for name, data in incoming.items():
|
||||||
print(" {:<30} {:>10} €".format(name.name, data['sum']))
|
print(" {:<30} {:>10} €".format(name.name, data['sum']))
|
||||||
print("-"*44)
|
print("-"*44)
|
||||||
print(" {:<30} {:>10} €".format("EINNAHMEN", format_amount(sum_incoming)))
|
print(" {:<30} {:>10} €".format("EINNAHMEN", format_amount(sum_incoming)))
|
||||||
|
print("\n")
|
||||||
|
|
||||||
|
# Entnahmen
|
||||||
|
for name, data in withdrawal.items():
|
||||||
|
print(" {:<30} {:>10} €".format(name.name, data['sum']))
|
||||||
|
print("-"*44)
|
||||||
|
print(" {:<30} {:>10} €".format("ENTNAHME", format_amount(sum_withdrawal)))
|
||||||
|
|
||||||
print("\n")
|
print("\n")
|
||||||
print("="*44)
|
print("="*44)
|
||||||
|
|
Loading…
Add table
Reference in a new issue