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:
@@ -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"),
|
||||
|
||||
@@ -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.")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user