feat: Ausgaben-Anteile faerben nach Budget
Die Karte zeigte nur, wie sich die Ausgaben verteilen – nicht, ob sie im Rahmen liegen. Der Betrag ist jetzt gruen, solange er unter dem Geplanten bleibt, und rot darueber. Dieselben Farben wie ueberall sonst fuer Einnahme und Ausgabe. Ohne Plan bleibt der Betrag gedeckt. "Ueber Budget" waere sonst die Aussage ueber jede Kategorie, fuer die nie eine Vorgabe gemacht wurde – die Karte stuende dann fast durchgehend auf Rot und sagte nichts mehr. Das Geplante kommt aus derselben Quelle wie im Budget-Fortschritt, also einschliesslich eines Monats-Werts, der die Vorlage uebersteuert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -158,13 +158,20 @@ def expense_share(
|
||||
label = _label(db, user)
|
||||
start, end = budget.period_bounds(label, _start_day(db, user))
|
||||
actual = budget.actual_expense_by_category(db, user, start, end, base)
|
||||
# Das Geplante kommt mit, damit die Karte zeigen kann, ob ein Anteil noch
|
||||
# im Rahmen liegt. Ohne Plan wird nichts behauptet: „ueber Budget" waere
|
||||
# sonst die Aussage ueber jede Kategorie, fuer die nie eine gemacht wurde.
|
||||
planned = budget.effective_planned(db, user, label)
|
||||
by_category = group_by != "group"
|
||||
|
||||
rows = []
|
||||
for name, color, ids in _units(_expense_groups(db, user), by_category):
|
||||
val = sum(actual.get(i, 0) for i in ids)
|
||||
if val > 0:
|
||||
rows.append({"name": name, "color": color, "amount": val})
|
||||
geplant = sum(planned.get(i, 0) for i in ids)
|
||||
rows.append({"name": name, "color": color, "amount": val,
|
||||
"planned": geplant,
|
||||
"over": geplant > 0 and val > geplant})
|
||||
rows.sort(key=lambda r: r["amount"], reverse=True)
|
||||
return {
|
||||
"rows": rows,
|
||||
|
||||
Reference in New Issue
Block a user