- Make Destinatär names clickable in list view (link to detail page) - Nachweis-Board: auto-create missing VierteljahresNachweis records for active Destinatäre when viewing a year (fixes missing Q1 2026) - Add archive/deactivate toggle for Destinatäre (button on detail page) with AuditLog entry and confirmation dialog - Default Destinatär list to show active only (filter preset to "Aktiv") Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
498 lines
18 KiB
Python
498 lines
18 KiB
Python
from django.urls import path
|
||
|
||
from . import views
|
||
|
||
app_name = "stiftung"
|
||
|
||
urlpatterns = [
|
||
# Home - Main landing page after login
|
||
path("", views.home, name="home"),
|
||
# CSV Import URLs
|
||
path("import/", views.csv_import_list, name="csv_import_list"),
|
||
path("import/neu/", views.csv_import_create, name="csv_import_create"),
|
||
# Destinatär URLs (Förderungsempfänger)
|
||
path("destinataere/", views.destinataer_list, name="destinataer_list"),
|
||
path(
|
||
"destinataere/<uuid:pk>/", views.destinataer_detail, name="destinataer_detail"
|
||
),
|
||
path("destinataere/neu/", views.destinataer_create, name="destinataer_create"),
|
||
path(
|
||
"destinataere/<uuid:pk>/bearbeiten/",
|
||
views.destinataer_update,
|
||
name="destinataer_update",
|
||
),
|
||
path(
|
||
"destinataere/<uuid:pk>/loeschen/",
|
||
views.destinataer_delete,
|
||
name="destinataer_delete",
|
||
),
|
||
path(
|
||
"destinataere/<uuid:pk>/archivieren/",
|
||
views.destinataer_toggle_archiv,
|
||
name="destinataer_toggle_archiv",
|
||
),
|
||
path(
|
||
"destinataere/<uuid:pk>/notiz/",
|
||
views.destinataer_notiz_create,
|
||
name="destinataer_notiz_create",
|
||
),
|
||
path(
|
||
"destinataere/<uuid:pk>/export/",
|
||
views.destinataer_export,
|
||
name="destinataer_export",
|
||
),
|
||
# Paechter URLs (Landpächter)
|
||
path("paechter/", views.paechter_list, name="paechter_list"),
|
||
path("paechter/<uuid:pk>/", views.paechter_detail, name="paechter_detail"),
|
||
path("paechter/neu/", views.paechter_create, name="paechter_create"),
|
||
path(
|
||
"paechter/<uuid:pk>/bearbeiten/", views.paechter_update, name="paechter_update"
|
||
),
|
||
path("paechter/<uuid:pk>/loeschen/", views.paechter_delete, name="paechter_delete"),
|
||
path("paechter/<uuid:pk>/export/", views.paechter_export, name="paechter_export"),
|
||
# Legacy Person URLs removed (Destinatäre ersetzen Personen)
|
||
# Land URLs
|
||
path("laendereien/", views.land_list, name="land_list"),
|
||
path("laendereien/<uuid:pk>/", views.land_detail, name="land_detail"),
|
||
path("laendereien/neu/", views.land_create, name="land_create"),
|
||
path("laendereien/<uuid:pk>/bearbeiten/", views.land_update, name="land_update"),
|
||
path("laendereien/<uuid:pk>/loeschen/", views.land_delete, name="land_delete"),
|
||
path("laendereien/<uuid:pk>/export/", views.land_export, name="land_export"),
|
||
# Landabrechnung URLs
|
||
path("landabrechnungen/", views.land_abrechnung_list, name="land_abrechnung_list"),
|
||
path(
|
||
"landabrechnungen/<uuid:pk>/",
|
||
views.land_abrechnung_detail,
|
||
name="land_abrechnung_detail",
|
||
),
|
||
path(
|
||
"landabrechnungen/neu/",
|
||
views.land_abrechnung_create,
|
||
name="land_abrechnung_create",
|
||
),
|
||
path(
|
||
"landabrechnungen/<uuid:pk>/bearbeiten/",
|
||
views.land_abrechnung_update,
|
||
name="land_abrechnung_update",
|
||
),
|
||
path(
|
||
"landabrechnungen/<uuid:pk>/loeschen/",
|
||
views.land_abrechnung_delete,
|
||
name="land_abrechnung_delete",
|
||
),
|
||
# Vereinheitlichte Verpachtung URLs (direkt im Land)
|
||
path(
|
||
"laendereien/<uuid:land_pk>/verpachtung/neu/",
|
||
views.land_verpachtung_create,
|
||
name="land_verpachtung_create",
|
||
),
|
||
path(
|
||
"laendereien/<uuid:land_pk>/verpachtung/bearbeiten/",
|
||
views.land_verpachtung_edit,
|
||
name="land_verpachtung_edit",
|
||
),
|
||
path(
|
||
"laendereien/<uuid:land_pk>/verpachtung/beenden/",
|
||
views.land_verpachtung_end,
|
||
name="land_verpachtung_end",
|
||
),
|
||
# LandVerpachtung URLs (neue Verpachtungen)
|
||
path(
|
||
"laendereien/verpachtungen/<uuid:pk>/",
|
||
views.land_verpachtung_detail,
|
||
name="land_verpachtung_detail",
|
||
),
|
||
path(
|
||
"laendereien/verpachtungen/<uuid:pk>/bearbeiten/",
|
||
views.land_verpachtung_update,
|
||
name="land_verpachtung_update",
|
||
),
|
||
path(
|
||
"laendereien/verpachtungen/<uuid:pk>/beenden/",
|
||
views.land_verpachtung_end_direct,
|
||
name="land_verpachtung_end_direct",
|
||
),
|
||
# Verpachtung URLs (Management Overview)
|
||
path("verpachtungen/", views.verpachtung_list, name="verpachtung_list"),
|
||
path("verpachtungen/<uuid:pk>/", views.verpachtung_detail, name="verpachtung_detail"),
|
||
path("verpachtungen/neu/", views.verpachtung_create, name="verpachtung_create"),
|
||
path(
|
||
"verpachtungen/<uuid:pk>/bearbeiten/",
|
||
views.verpachtung_update,
|
||
name="verpachtung_update",
|
||
),
|
||
path(
|
||
"verpachtungen/<uuid:pk>/loeschen/",
|
||
views.verpachtung_delete,
|
||
name="verpachtung_delete",
|
||
),
|
||
# Förderung URLs
|
||
path("foerderungen/", views.foerderung_list, name="foerderung_list"),
|
||
path("foerderungen/<uuid:pk>/", views.foerderung_detail, name="foerderung_detail"),
|
||
path("foerderungen/neu/", views.foerderung_create, name="foerderung_create"),
|
||
path(
|
||
"foerderungen/<uuid:pk>/bearbeiten/",
|
||
views.foerderung_update,
|
||
name="foerderung_update",
|
||
),
|
||
path(
|
||
"foerderungen/<uuid:pk>/loeschen/",
|
||
views.foerderung_delete,
|
||
name="foerderung_delete",
|
||
),
|
||
# Dokumente URLs
|
||
path("dokumente/", views.dokument_list, name="dokument_list"),
|
||
path("dokumente/<uuid:pk>/", views.dokument_detail, name="dokument_detail"),
|
||
path("dokumente/neu/", views.dokument_create, name="dokument_create"),
|
||
path(
|
||
"dokumente/<uuid:pk>/bearbeiten/", views.dokument_update, name="dokument_update"
|
||
),
|
||
path(
|
||
"dokumente/<uuid:pk>/loeschen/", views.dokument_delete, name="dokument_delete"
|
||
),
|
||
# Dokumentenverwaltung (Paperless-Integration, Verwaltung & Verknüpfung)
|
||
path(
|
||
"dokumente/verwaltung/", views.dokument_management, name="dokument_management"
|
||
),
|
||
# Legacy document URLs removed - use dokument_management instead
|
||
# Dokument-Verknüpfung
|
||
path(
|
||
"api/link-document/search/",
|
||
views.link_document_search,
|
||
name="link_document_search",
|
||
),
|
||
path(
|
||
"api/link-document/create/",
|
||
views.link_document_create,
|
||
name="link_document_create",
|
||
),
|
||
path(
|
||
"api/link-document/list/", views.link_document_list, name="link_document_list"
|
||
),
|
||
path(
|
||
"api/link-document/update/",
|
||
views.link_document_update,
|
||
name="link_document_update",
|
||
),
|
||
path(
|
||
"api/link-document/delete/<uuid:link_id>/",
|
||
views.link_document_delete,
|
||
name="link_document_delete",
|
||
),
|
||
# Legacy dokument_verknuepfung URL removed - use dokument_management instead
|
||
# Jahresbericht URLs
|
||
path("berichte/", views.bericht_list, name="bericht_list"),
|
||
path(
|
||
"berichte/jahresbericht/",
|
||
views.jahresbericht_generate_redirect,
|
||
name="jahresbericht_generate_redirect",
|
||
),
|
||
path(
|
||
"berichte/jahresbericht/<int:jahr>/",
|
||
views.jahresbericht_generate,
|
||
name="jahresbericht_generate",
|
||
),
|
||
path(
|
||
"berichte/jahresbericht/<int:jahr>/pdf/",
|
||
views.jahresbericht_pdf,
|
||
name="jahresbericht_pdf",
|
||
),
|
||
# Geschäftsführung URLs
|
||
path("geschaeftsfuehrung/", views.geschaeftsfuehrung, name="geschaeftsfuehrung"),
|
||
path("geschaeftsfuehrung/konten/", views.konto_list, name="konto_list"),
|
||
path("geschaeftsfuehrung/konten/neu/", views.konto_create, name="konto_create"),
|
||
path(
|
||
"geschaeftsfuehrung/konten/<uuid:pk>/", views.konto_detail, name="konto_detail"
|
||
),
|
||
path(
|
||
"geschaeftsfuehrung/konten/<uuid:pk>/bearbeiten/",
|
||
views.konto_edit,
|
||
name="konto_edit",
|
||
),
|
||
path(
|
||
"geschaeftsfuehrung/verwaltungskosten/",
|
||
views.verwaltungskosten_list,
|
||
name="verwaltungskosten_list",
|
||
),
|
||
path(
|
||
"geschaeftsfuehrung/verwaltungskosten/neu/",
|
||
views.verwaltungskosten_create,
|
||
name="verwaltungskosten_create",
|
||
),
|
||
path(
|
||
"geschaeftsfuehrung/verwaltungskosten/<uuid:pk>/bearbeiten/",
|
||
views.verwaltungskosten_edit,
|
||
name="verwaltungskosten_edit",
|
||
),
|
||
path(
|
||
"geschaeftsfuehrung/verwaltungskosten/<uuid:pk>/loeschen/",
|
||
views.verwaltungskosten_delete,
|
||
name="verwaltungskosten_delete",
|
||
),
|
||
path(
|
||
"verwaltungskosten/mark-paid/",
|
||
views.mark_expense_paid,
|
||
name="mark_expense_paid",
|
||
),
|
||
path(
|
||
"geschaeftsfuehrung/rentmeister/",
|
||
views.rentmeister_list,
|
||
name="rentmeister_list",
|
||
),
|
||
path(
|
||
"geschaeftsfuehrung/rentmeister/neu/",
|
||
views.rentmeister_create,
|
||
name="rentmeister_create",
|
||
),
|
||
path(
|
||
"geschaeftsfuehrung/rentmeister/<uuid:pk>/",
|
||
views.rentmeister_detail,
|
||
name="rentmeister_detail",
|
||
),
|
||
path(
|
||
"geschaeftsfuehrung/rentmeister/<uuid:pk>/bearbeiten/",
|
||
views.rentmeister_edit,
|
||
name="rentmeister_edit",
|
||
),
|
||
path(
|
||
"geschaeftsfuehrung/rentmeister/<uuid:pk>/ausgaben/",
|
||
views.rentmeister_ausgaben,
|
||
name="rentmeister_ausgaben",
|
||
),
|
||
# Administration URLs
|
||
path("administration/", views.administration, name="administration"),
|
||
path("administration/settings/", views.app_settings, name="app_settings"),
|
||
path("administration/audit-log/", views.audit_log_list, name="audit_log_list"),
|
||
path("administration/backup/", views.backup_management, name="backup_management"),
|
||
path(
|
||
"administration/backup/<uuid:backup_id>/download/",
|
||
views.backup_download,
|
||
name="backup_download",
|
||
),
|
||
path("administration/backup/restore/", views.backup_restore, name="backup_restore"),
|
||
path(
|
||
"administration/backup/<uuid:backup_id>/cancel/",
|
||
views.backup_cancel,
|
||
name="backup_cancel",
|
||
),
|
||
path(
|
||
"administration/unterstuetzungen/",
|
||
views.unterstuetzungen_list,
|
||
name="unterstuetzungen_list",
|
||
),
|
||
path(
|
||
"administration/unterstuetzungen/<uuid:pk>/bearbeiten/",
|
||
views.unterstuetzung_edit,
|
||
name="unterstuetzung_edit",
|
||
),
|
||
path(
|
||
"administration/unterstuetzungen/<uuid:pk>/loeschen/",
|
||
views.unterstuetzung_delete,
|
||
name="unterstuetzung_delete",
|
||
),
|
||
# Unterstützungen URLs (direct access from Destinataer)
|
||
path("unterstuetzungen/", views.unterstuetzungen_all, name="unterstuetzungen_all"),
|
||
path(
|
||
"unterstuetzungen/neu/",
|
||
views.unterstuetzung_create,
|
||
name="unterstuetzung_create",
|
||
),
|
||
path(
|
||
"unterstuetzungen/<uuid:pk>/",
|
||
views.unterstuetzung_detail,
|
||
name="unterstuetzung_detail",
|
||
),
|
||
path(
|
||
"unterstuetzungen/<uuid:pk>/bezahlt/",
|
||
views.unterstuetzung_mark_paid,
|
||
name="unterstuetzung_mark_paid",
|
||
),
|
||
path(
|
||
"unterstuetzungen/wiederkehrend/",
|
||
views.wiederkehrende_unterstuetzungen,
|
||
name="wiederkehrende_unterstuetzungen",
|
||
),
|
||
# AJAX endpoints
|
||
path(
|
||
"api/destinataer/<uuid:destinataer_id>/info/",
|
||
views.get_destinataer_info,
|
||
name="get_destinataer_info",
|
||
),
|
||
# Authentication URLs
|
||
path("login/", views.user_login, name="login"),
|
||
path("logout/", views.user_logout, name="logout"),
|
||
# User Management URLs
|
||
path("administration/users/", views.user_management, name="user_management"),
|
||
path("administration/users/create/", views.user_create, name="user_create"),
|
||
path("administration/users/<int:pk>/", views.user_detail, name="user_detail"),
|
||
path("administration/users/<int:pk>/edit/", views.user_edit, name="user_edit"),
|
||
path(
|
||
"administration/users/<int:pk>/password/",
|
||
views.user_change_password,
|
||
name="user_change_password",
|
||
),
|
||
path(
|
||
"administration/users/<int:pk>/permissions/",
|
||
views.user_permissions,
|
||
name="user_permissions",
|
||
),
|
||
path(
|
||
"administration/users/<int:pk>/delete/", views.user_delete, name="user_delete"
|
||
),
|
||
# Two-Factor Authentication URLs
|
||
path("auth/2fa/setup/", views.two_factor_setup, name="two_factor_setup"),
|
||
path("auth/2fa/qr/", views.two_factor_qr, name="two_factor_qr"),
|
||
path("auth/2fa/verify/", views.two_factor_verify, name="two_factor_verify"),
|
||
path("auth/2fa/disable/", views.two_factor_disable, name="two_factor_disable"),
|
||
path("auth/2fa/backup-tokens/", views.backup_tokens, name="backup_tokens"),
|
||
# Hilfsbox URLs
|
||
path("help-box/edit/", views.edit_help_box, name="edit_help_box"),
|
||
path("help-box/admin/", views.edit_help_box, name="help_boxes_admin"),
|
||
# Phase 4: Globale Suche (Cmd+K)
|
||
path("api/suche/", views.globale_suche_api, name="globale_suche_api"),
|
||
|
||
# API URLs
|
||
path("api/land-stats/", views.land_stats_api, name="land_stats_api"),
|
||
path("api/health/", views.health_check, name="health_check"),
|
||
path("api/paperless/ping/", views.paperless_ping, name="paperless_ping"),
|
||
path(
|
||
"api/paperless/documents/",
|
||
views.paperless_documents,
|
||
name="paperless_documents",
|
||
),
|
||
path("api/paperless/tags/", views.paperless_tags_only, name="paperless_tags_only"),
|
||
path("api/paperless/debug/", views.paperless_debug, name="paperless_debug"),
|
||
path(
|
||
"api/paperless/documents/<int:doc_id>/",
|
||
views.paperless_document_redirect,
|
||
name="paperless_document_redirect",
|
||
),
|
||
# Veranstaltungsmodul
|
||
path("veranstaltungen/", views.veranstaltung_list, name="veranstaltung_list"),
|
||
path("veranstaltungen/neu/", views.veranstaltung_create, name="veranstaltung_create"),
|
||
path("veranstaltungen/<uuid:pk>/", views.veranstaltung_detail, name="veranstaltung_detail"),
|
||
path("veranstaltungen/<uuid:pk>/bearbeiten/", views.veranstaltung_update, name="veranstaltung_update"),
|
||
path("veranstaltungen/<uuid:pk>/loeschen/", views.veranstaltung_delete, name="veranstaltung_delete"),
|
||
path(
|
||
"veranstaltungen/<uuid:pk>/serienbrief/",
|
||
views.veranstaltung_serienbrief_pdf,
|
||
name="veranstaltung_serienbrief_pdf",
|
||
),
|
||
path(
|
||
"veranstaltungen/<uuid:pk>/serienbrief-vorschau/",
|
||
views.veranstaltung_serienbrief_vorschau,
|
||
name="veranstaltung_serienbrief_vorschau",
|
||
),
|
||
# Teilnehmer CRUD
|
||
path(
|
||
"veranstaltungen/<uuid:veranstaltung_pk>/teilnehmer/neu/",
|
||
views.teilnehmer_create,
|
||
name="teilnehmer_create",
|
||
),
|
||
path(
|
||
"veranstaltungen/<uuid:veranstaltung_pk>/teilnehmer/<uuid:pk>/bearbeiten/",
|
||
views.teilnehmer_update,
|
||
name="teilnehmer_update",
|
||
),
|
||
path(
|
||
"veranstaltungen/<uuid:veranstaltung_pk>/teilnehmer/<uuid:pk>/loeschen/",
|
||
views.teilnehmer_delete,
|
||
name="teilnehmer_delete",
|
||
),
|
||
# Gramps integration (probe)
|
||
path("api/gramps/search/", views.gramps_search_api, name="gramps_search_api"),
|
||
path("api/gramps/debug/", views.gramps_debug_api, name="gramps_debug_api"),
|
||
# Quarterly Confirmations
|
||
path(
|
||
"quarterly-confirmations/create/<uuid:destinataer_id>/",
|
||
views.quarterly_confirmation_create,
|
||
name="quarterly_confirmation_create",
|
||
),
|
||
path(
|
||
"quarterly-confirmations/<uuid:pk>/edit/",
|
||
views.quarterly_confirmation_edit,
|
||
name="quarterly_confirmation_edit",
|
||
),
|
||
path(
|
||
"quarterly-confirmations/<uuid:pk>/update/",
|
||
views.quarterly_confirmation_update,
|
||
name="quarterly_confirmation_update",
|
||
),
|
||
path(
|
||
"quarterly-confirmations/<uuid:pk>/approve/",
|
||
views.quarterly_confirmation_approve,
|
||
name="quarterly_confirmation_approve",
|
||
),
|
||
path(
|
||
"quarterly-confirmations/<uuid:pk>/reset/",
|
||
views.quarterly_confirmation_reset,
|
||
name="quarterly_confirmation_reset",
|
||
),
|
||
# Geschichte URLs
|
||
path("geschichte/", views.geschichte_list, name="geschichte_list"),
|
||
path("geschichte/neu/", views.geschichte_create, name="geschichte_create"),
|
||
path("geschichte/<slug:slug>/", views.geschichte_detail, name="geschichte_detail"),
|
||
path("geschichte/<slug:slug>/bearbeiten/", views.geschichte_edit, name="geschichte_edit"),
|
||
path("geschichte/<slug:slug>/bild-upload/", views.geschichte_bild_upload, name="geschichte_bild_upload"),
|
||
path("geschichte/<slug:slug>/bild/<uuid:bild_id>/loeschen/", views.geschichte_bild_delete, name="geschichte_bild_delete"),
|
||
|
||
# E-Mail-Eingang Destinatäre
|
||
path("email-eingang/", views.email_eingang_list, name="email_eingang_list"),
|
||
path("email-eingang/<uuid:pk>/", views.email_eingang_detail, name="email_eingang_detail"),
|
||
path("email-eingang/poll/", views.email_eingang_poll_trigger, name="email_eingang_poll_trigger"),
|
||
# Kalender URLs
|
||
path("kalender/", views.kalender_view, name="kalender"),
|
||
path("kalender/admin/", views.kalender_admin, name="kalender_admin"),
|
||
path("kalender/neu/", views.kalender_create, name="kalender_create"),
|
||
path("kalender/<uuid:pk>/", views.kalender_detail, name="kalender_detail"),
|
||
path("kalender/<uuid:pk>/bearbeiten/", views.kalender_edit, name="kalender_edit"),
|
||
path("kalender/<uuid:pk>/loeschen/", views.kalender_delete, name="kalender_delete"),
|
||
path("kalender/api/events/", views.kalender_api_events, name="kalender_api_events"),
|
||
|
||
# Phase 2: Destinatär-Timeline (2a)
|
||
path(
|
||
"destinataere/<uuid:pk>/timeline/",
|
||
views.destinataer_timeline,
|
||
name="destinataer_timeline",
|
||
),
|
||
|
||
# Phase 2: Nachweis-Board (2b)
|
||
path("nachweis-board/", views.nachweis_board, name="nachweis_board"),
|
||
path(
|
||
"nachweis-board/erinnerung/",
|
||
views.batch_erinnerung_senden,
|
||
name="batch_erinnerung_senden",
|
||
),
|
||
|
||
# Phase 2: Zahlungs-Pipeline (2c)
|
||
path("zahlungs-pipeline/", views.zahlungs_pipeline, name="zahlungs_pipeline"),
|
||
path(
|
||
"unterstuetzungen/<uuid:pk>/freigeben/",
|
||
views.unterstuetzung_freigeben,
|
||
name="unterstuetzung_freigeben",
|
||
),
|
||
path(
|
||
"unterstuetzungen/<uuid:pk>/nachweis-eingereicht/",
|
||
views.unterstuetzung_nachweis_eingereicht,
|
||
name="unterstuetzung_nachweis_eingereicht",
|
||
),
|
||
path(
|
||
"unterstuetzungen/<uuid:pk>/abschliessen/",
|
||
views.unterstuetzung_abschliessen,
|
||
name="unterstuetzung_abschliessen",
|
||
),
|
||
path("sepa-export/", views.sepa_xml_export, name="sepa_xml_export"),
|
||
|
||
# Phase 2: Pächter-Workflow (2d)
|
||
path("paechter/workflow/", views.paechter_workflow, name="paechter_workflow"),
|
||
|
||
# Phase 3: DMS – Django-natives Dokumentenmanagement
|
||
path("dms/", views.dms_list, name="dms_list"),
|
||
path("dms/hochladen/", views.dms_upload, name="dms_upload"),
|
||
path("dms/suche/", views.dms_search_api, name="dms_search_api"),
|
||
path("dms/<uuid:pk>/", views.dms_detail, name="dms_detail"),
|
||
path("dms/<uuid:pk>/herunterladen/", views.dms_download, name="dms_download"),
|
||
path("dms/<uuid:pk>/bearbeiten/", views.dms_edit, name="dms_edit"),
|
||
path("dms/<uuid:pk>/loeschen/", views.dms_delete, name="dms_delete"),
|
||
]
|