Remove obsolete dashboard functionality

- 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.
This commit is contained in:
2025-10-05 20:49:48 +02:00
parent 1a40277d66
commit 544284dd8b
20 changed files with 28 additions and 574 deletions

View File

@@ -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"),

View File

@@ -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.")