diff --git a/categorize_transactions.py b/categorize_transactions.py index a5567ba..1031eaf 100644 --- a/categorize_transactions.py +++ b/categorize_transactions.py @@ -5,7 +5,7 @@ from datetime import datetime import json import csv import sys -from openpyxl import Workbook +from openpyxl import Workbook, load_workbook # -------------------------------------------------- # Kalenderwoche bestimmen @@ -49,12 +49,12 @@ source_json = ( categorized_csv_dir = year_dir / "categorized_csv" categorized_json_dir = year_dir / "categorized_json" summary_dir = year_dir / "summary" -excel_dir = year_dir / "excel" +jahresauswertung_dir = year_dir / "jahresauswertung" categorized_csv_dir.mkdir(parents=True, exist_ok=True) categorized_json_dir.mkdir(parents=True, exist_ok=True) summary_dir.mkdir(parents=True, exist_ok=True) -excel_dir.mkdir(parents=True, exist_ok=True) +jahresauswertung_dir.mkdir(parents=True, exist_ok=True) csv_file = ( categorized_csv_dir @@ -72,8 +72,8 @@ summary_file = ( ) excel_file = ( - excel_dir - / f"transactions_{year}_KW{week:02d}.xlsx" + jahresauswertung_dir + / f"Kontobewegungen_{year}.xlsx" ) # -------------------------------------------------- @@ -211,35 +211,51 @@ with open(json_file, "w", encoding="utf-8") as outfile: ) # -------------------------------------------------- -# Excel exportieren +# Jahres-Excel aktualisieren # -------------------------------------------------- +if excel_file.exists(): + wb = load_workbook(excel_file) +else: + wb = Workbook() -wb = Workbook() + if "Sheet" in wb.sheetnames: + wb.remove(wb["Sheet"]) -ws1 = wb.active -ws1.title = "Transaktionen" +sheet_name = f"KW{week:02d}" -ws1.append([ - "Datum", - "Betrag", - "Kategorie", - "Name", - "Verwendungszweck" -]) +# Vorhandenes Blatt ersetzen +if sheet_name in wb.sheetnames: + wb.remove(wb[sheet_name]) -for t in categorized_transactions: - ws1.append([ - t["date"], - t["amount"], - t["category"], - t["applicant_name"], - t["purpose"] - ]) +ws = wb.create_sheet(sheet_name) -ws2 = wb.create_sheet("Kategorien") +# Kennzahlen -ws2.append([ +total_income = sum( + values["income"] + for values in category_totals.values() +) + +total_expenses = sum( + values["expenses"] + for values in category_totals.values() +) + +total_saldo = sum( + values["saldo"] + for values in category_totals.values() +) + +ws.append(["Kennzahl", "Wert"]) +ws.append(["Transaktionen", len(categorized_transactions)]) +ws.append(["Einnahmen", total_income]) +ws.append(["Ausgaben", total_expenses]) +ws.append(["Saldo", total_saldo]) + +ws.append([]) + +ws.append([ "Kategorie", "Einnahmen", "Ausgaben", @@ -247,15 +263,48 @@ ws2.append([ ]) for category, values in sorted(category_totals.items()): - ws2.append([ + + ws.append([ category, values["income"], values["expenses"], values["saldo"] ]) -wb.save(excel_file) +# -------------------------------------------------- +# Übersicht aktualisieren +# -------------------------------------------------- +if "Übersicht" in wb.sheetnames: + wb.remove(wb["Übersicht"]) + +overview = wb.create_sheet("Übersicht", 0) + +overview.append([ + "KW", + "Einnahmen", + "Ausgaben", + "Saldo" +]) + +for sheet in sorted( + [s for s in wb.sheetnames if s.startswith("KW")] +): + + ws_kw = wb[sheet] + + income = ws_kw["B3"].value + expenses = ws_kw["B4"].value + saldo = ws_kw["B5"].value + + overview.append([ + sheet, + income, + expenses, + saldo + ]) + +wb.save(excel_file) # -------------------------------------------------- # Kategorien-Summen exportieren