From 544284dd8b5e59a12f076c218e34cbc0602bdaa9 Mon Sep 17 00:00:00 2001 From: Jan Remmer Siebels Date: Sun, 5 Oct 2025 20:49:48 +0200 Subject: [PATCH] Remove obsolete dashboard functionality MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove dashboard view from urls.py and views.py - Delete dashboard.html template - Remove dashboard navigation link from base.html - Replace all dashboard redirects with home redirects in views.py - Update all breadcrumb links from 'Dashboard' to 'Home' in templates - Update German text from 'Dashboard' to 'Startseite' in auth templates - Update 'Zurück zum Dashboard' links to 'Zurück zur Startseite' The dashboard was redundant with the home page functionality. All navigation now directs users to the main home page instead. System check passes without issues after removal. --- app/stiftung/urls.py | 2 - app/stiftung/views.py | 157 +------ app/templates/base.html | 5 - .../stiftung/auth/backup_tokens.html | 4 +- .../stiftung/auth/backup_tokens_manage.html | 4 +- .../stiftung/auth/two_factor_disable.html | 2 +- .../stiftung/auth/two_factor_manage.html | 4 +- .../stiftung/auth/two_factor_setup.html | 2 +- app/templates/stiftung/dashboard.html | 400 ------------------ .../stiftung/geschichte/bild_delete.html | 2 +- .../stiftung/geschichte/bild_form.html | 2 +- app/templates/stiftung/geschichte/detail.html | 2 +- app/templates/stiftung/geschichte/form.html | 2 +- app/templates/stiftung/geschichte/liste.html | 2 +- app/templates/stiftung/land_list.html | 2 +- app/templates/stiftung/person_list.html | 2 +- .../stiftung/unterstuetzung_detail.html | 2 +- .../stiftung/unterstuetzung_form.html | 2 +- .../stiftung/unterstuetzung_mark_paid.html | 2 +- .../wiederkehrende_unterstuetzungen.html | 2 +- 20 files changed, 28 insertions(+), 574 deletions(-) delete mode 100644 app/templates/stiftung/dashboard.html diff --git a/app/stiftung/urls.py b/app/stiftung/urls.py index ba1fb51..4a25ed3 100644 --- a/app/stiftung/urls.py +++ b/app/stiftung/urls.py @@ -7,8 +7,6 @@ app_name = "stiftung" urlpatterns = [ # Home - Main landing page after login path("", views.home, name="home"), - # Dashboard (detailed view) - path("dashboard/", views.dashboard, name="dashboard"), # CSV Import URLs path("import/", views.csv_import_list, name="csv_import_list"), path("import/neu/", views.csv_import_create, name="csv_import_create"), diff --git a/app/stiftung/views.py b/app/stiftung/views.py index 1fcfbe0..03956af 100644 --- a/app/stiftung/views.py +++ b/app/stiftung/views.py @@ -2498,145 +2498,6 @@ def jahresbericht_pdf(request, jahr): return response -# Dashboard Views -@login_required -def dashboard(request): - # Foerderung statistics (Person statistics removed - was legacy Verpachtung system) - total_foerderungen = Foerderung.objects.aggregate(total=Sum("betrag"))["total"] or 0 - - # Land statistics - total_land = Land.objects.count() - active_land = Land.objects.filter(aktiv=True).count() - total_flaeche = Land.objects.aggregate(total=Sum("groesse_qm"))["total"] or 0 - - # Calculate total verpachtet from active verpachtungen - total_verpachtet = ( - LandVerpachtung.objects.filter(status="aktiv").aggregate( - total=Sum("verpachtete_flaeche") - )["total"] - or 0 - ) - - # Verpachtung statistics - total_verpachtungen = LandVerpachtung.objects.count() - active_verpachtungen = LandVerpachtung.objects.filter(status="aktiv").count() - total_pachtzins = ( - LandVerpachtung.objects.filter(status="aktiv").aggregate( - total=Sum("pachtzins_pauschal") - )["total"] - or 0 - ) - - # Recent activities - recent_lands = Land.objects.order_by("-erstellt_am")[:5] - recent_verpachtungen = LandVerpachtung.objects.select_related( - "land", "paechter" - ).order_by("-erstellt_am")[:5] - - # Dokumentenübersicht - dokumente_uebersicht = DokumentLink.objects.all().order_by("-id")[:10] - - # Verfügbare Paperless-Dokumente für Dashboard - available_paperless_docs = [] - from stiftung.utils.config import get_paperless_config - - config = get_paperless_config() - url = config["api_url"] - token = config["api_token"] - - if url and token: - try: - base_url = url.rstrip("/api") if url.endswith("/api") else url - headers = {"Authorization": f"Token {token}"} - - # Alle verfügbaren Dokumente abrufen (mit Paginierung) - all_dokumente = [] - page = 1 - page_size = 100 - - while True: - response = requests.get( - f"{base_url}/api/documents/?page={page}&page_size={page_size}", - headers=headers, - timeout=10, - ) - response.raise_for_status() - data = response.json() - - all_dokumente.extend(data.get("results", [])) - - if not data.get("next"): - break - page += 1 - - # Stiftung-Dokumente filtern - for doc in all_dokumente: - try: - tags = [] - doc_tags = doc.get("tags", []) - - if isinstance(doc_tags, list): - for tag in doc_tags: - if isinstance(tag, dict) and "name" in tag: - tags.append(tag["name"]) - elif isinstance(tag, str): - tags.append(tag) - elif isinstance(tag, int): - tags.append(f"Tag_{tag}") - elif isinstance(doc_tags, str): - tags = [tag.strip() for tag in doc_tags.split(",")] - - if any( - tag - in [ - config["destinataere_tag"], - config["land_tag"], - config["admin_tag"], - ] - for tag in tags - ): - bereits_verknuepft = DokumentLink.objects.filter( - paperless_document_id=doc["id"] - ).exists() - - if not bereits_verknuepft: - available_paperless_docs.append( - { - "id": doc["id"], - "title": doc.get("title", f'Dokument {doc["id"]}'), - "created_date": doc.get("created_date", ""), - "tags": tags, - "thumbnail_url": f"{base_url}/api/documents/{doc['id']}/thumb/", - "document_url": f"{base_url}/documents/{doc['id']}/", - } - ) - except Exception: - continue - - # Nach Erstellungsdatum sortieren (neueste zuerst) - available_paperless_docs.sort(key=lambda x: x["created_date"], reverse=True) - - except Exception: - pass - - context = { - # Person statistics removed - was legacy Verpachtung system - "total_foerderungen": total_foerderungen, - "total_land": total_land, - "active_land": active_land, - "total_flaeche": total_flaeche, - "total_verpachtet": total_verpachtet, - "total_verpachtungen": total_verpachtungen, - "active_verpachtungen": active_verpachtungen, - "total_pachtzins": total_pachtzins, - "recent_lands": recent_lands, - "recent_verpachtungen": recent_verpachtungen, - "dokumente_uebersicht": dokumente_uebersicht, - "available_paperless_docs": available_paperless_docs, - } - return render(request, "stiftung/dashboard.html", context) - - # API Views for AJAX @login_required def land_stats_api(request): @@ -6517,7 +6378,7 @@ def user_login(request): from django.contrib.auth.forms import AuthenticationForm if request.user.is_authenticated: - return redirect("stiftung:dashboard") + return redirect("stiftung:home") if request.method == "POST": form = AuthenticationForm(request, data=request.POST) @@ -6535,11 +6396,11 @@ def user_login(request): messages.success(request, f"Willkommen zurück, {user.username}!") - # Redirect to safe next URL path or dashboard + # Redirect to safe next URL path or home next_param = request.GET.get("next") or request.POST.get("next") if next_param and next_param.startswith("/"): return redirect(next_param) - return redirect("stiftung:dashboard") + return redirect("stiftung:home") else: messages.error(request, "Ungültige Anmeldedaten.") else: @@ -7248,7 +7109,7 @@ def edit_help_box(request): messages.error( request, "Sie haben keine Berechtigung, Hilfsboxen zu bearbeiten." ) - return redirect("stiftung:dashboard") + return redirect("stiftung:home") if request.method == "POST": page_key = request.POST.get("page_key") @@ -7258,7 +7119,7 @@ def edit_help_box(request): if not page_key or not title or not content: messages.error(request, "Alle Felder sind erforderlich.") - return redirect(request.META.get("HTTP_REFERER", "stiftung:dashboard")) + return redirect(request.META.get("HTTP_REFERER", "stiftung:home")) # Hilfsbox erstellen oder aktualisieren help_box, created = HelpBox.objects.get_or_create( @@ -7285,7 +7146,7 @@ def edit_help_box(request): messages.success(request, f'Hilfsbox "{title}" wurde erstellt.') # Zurück zur vorherigen Seite - return redirect(request.META.get("HTTP_REFERER", "stiftung:dashboard")) + return redirect(request.META.get("HTTP_REFERER", "stiftung:home")) # GET Request - Zeige Admin-Übersicht der Hilfsboxen help_boxes = HelpBox.objects.all().order_by("page_key", "-updated_at") @@ -7955,7 +7816,7 @@ def two_factor_verify(request): if device.verify_token(token): request.session['2fa_verified'] = True messages.success(request, "Zwei-Faktor-Authentifizierung erfolgreich.") - return redirect(request.GET.get('next', 'stiftung:dashboard')) + return redirect(request.GET.get('next', 'stiftung:home')) # Check static backup tokens static_devices = StaticDevice.objects.filter(user=request.user) @@ -7963,7 +7824,7 @@ def two_factor_verify(request): if device.verify_token(token): request.session['2fa_verified'] = True messages.success(request, "Backup-Code erfolgreich verwendet.") - return redirect(request.GET.get('next', 'stiftung:dashboard')) + return redirect(request.GET.get('next', 'stiftung:home')) messages.error(request, "Ungültiger Code. Bitte versuchen Sie es erneut.") @@ -7992,7 +7853,7 @@ def two_factor_disable(request): request, "Zwei-Faktor-Authentifizierung wurde erfolgreich deaktiviert." ) - return redirect("stiftung:dashboard") + return redirect("stiftung:home") else: messages.error(request, "Ungültiges Passwort.") diff --git a/app/templates/base.html b/app/templates/base.html index f07d309..f5dbdb3 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -528,11 +528,6 @@ Home -