fix: align total costs with visible budgets
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user