fix: align total costs with visible budgets

This commit is contained in:
2026-05-06 13:31:32 +02:00
parent 7cd85cc5ae
commit 3990a2ea49
5 changed files with 162 additions and 11 deletions
+54
View File
@@ -2,6 +2,7 @@ from __future__ import annotations
from flask import Blueprint, flash, redirect, render_template, request, url_for
from flask_login import login_required
from sqlalchemy.exc import IntegrityError
from sqlalchemy import select
from app.extensions import db
@@ -51,6 +52,9 @@ def index():
entries = db.session.scalars(
select(Entry).order_by(Entry.category_id.asc(), Entry.sort_order.asc(), Entry.name.asc())
).all()
inactive_accounts = [account for account in accounts if not account.is_active]
inactive_categories = [category for category in categories if not category.is_active]
inactive_entries = [entry for entry in entries if not entry.is_active]
return render_template(
"admin/index.html",
users=users,
@@ -58,6 +62,9 @@ def index():
accounts=accounts,
categories=categories,
entries=entries,
inactive_accounts=inactive_accounts,
inactive_categories=inactive_categories,
inactive_entries=inactive_entries,
)
@@ -263,6 +270,53 @@ def update_entry(entry_id: int):
return redirect(url_for("admin.index"))
@admin_bp.route("/accounts/<int:account_id>/delete", methods=["POST"])
@login_required
@admin_required
def delete_account(account_id: int):
account = Account.query.get_or_404(account_id)
if account.is_active:
flash("Nur inaktive Konten können hier endgültig gelöscht werden.", "danger")
return redirect(url_for("admin.index"))
try:
db.session.delete(account)
db.session.commit()
except IntegrityError:
db.session.rollback()
flash("Konto konnte nicht gelöscht werden, weil noch abhängige Daten existieren.", "danger")
return redirect(url_for("admin.index"))
flash("Konto endgültig gelöscht.", "success")
return redirect(url_for("admin.index"))
@admin_bp.route("/categories/<int:category_id>/delete", methods=["POST"])
@login_required
@admin_required
def delete_category(category_id: int):
category = Category.query.get_or_404(category_id)
if category.is_active:
flash("Nur inaktive Kategorien können hier endgültig gelöscht werden.", "danger")
return redirect(url_for("admin.index"))
db.session.delete(category)
db.session.commit()
flash("Kategorie endgültig gelöscht.", "success")
return redirect(url_for("admin.index"))
@admin_bp.route("/entries/<int:entry_id>/delete", methods=["POST"])
@login_required
@admin_required
def delete_entry(entry_id: int):
entry = Entry.query.get_or_404(entry_id)
if entry.is_active:
flash("Nur inaktive Einträge können hier endgültig gelöscht werden.", "danger")
return redirect(url_for("admin.index"))
db.session.delete(entry)
db.session.commit()
flash("Eintrag endgültig gelöscht.", "success")
return redirect(url_for("admin.index"))
@admin_bp.route("/entries/<int:entry_id>/share-rules", methods=["POST"])
@login_required
@admin_required