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 -
| Dokument | -Kontext | -Verknüpft mit | -Aktionen | -
|---|---|---|---|
|
- {{ dokument.titel }}
- - ID: {{ dokument.paperless_document_id }} - |
- - {{ dokument.get_kontext_display }} - | -- {% if dokument.verpachtung_id %} - Verpachtung - {% elif dokument.land_id %} - Länderei - {% elif dokument.paechter_id %} - Pächter - {% elif dokument.destinataer_id %} - Destinatär - {% elif dokument.foerderung_id %} - Förderung - {% else %} - Keine Verknüpfung - {% endif %} - | -- - | -
Verknüpfen Sie Dokumente aus Paperless mit Ihren Entitäten.
- - Dokumentenverwaltung öffnen - -Noch keine Ländereien vorhanden.
- {% endif %} -Noch keine Verpachtungen vorhanden.
- {% endif %} -Jährlicher Pachtzins
-Gesamtförderungen
-Verpachtete Fläche
-