Files
stiftung-management-system/app/stiftung/urls.py
SysAdmin Agent faeb7c1073
Some checks failed
CI/CD Pipeline / test (push) Has been cancelled
CI/CD Pipeline / deploy (push) Has been cancelled
Code Quality / quality (push) Has been cancelled
Implement modular report system with 6 report types and composer UI
Refactors the Berichte section from a single hardcoded Jahresbericht into
a modular report-building system. Jahresbericht now uses PDFGenerator for
corporate identity (logo, colors, headers/footers, cover page). 8 reusable
section templates can be freely combined. 6 predefined report templates
(Jahres-, Destinatär-, Grundstücks-, Finanz-, Förder-, Pachtbericht) with
HTML preview and PDF export. New Bericht-Baukasten UI lets users compose
custom reports from individual sections.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 20:55:31 +00:00

463 lines
17 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 (DMS) Legacy-Paperless-URLs entfernt (Phase 3)
# 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",
),
path(
"berichte/zusammenstellen/",
views.bericht_zusammenstellen,
name="bericht_zusammenstellen",
),
path(
"berichte/<str:vorlage_key>/",
views.bericht_vorlage,
name="bericht_vorlage",
),
# 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>/",
views.verwaltungskosten_detail,
name="verwaltungskosten_detail",
),
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/email/", views.email_settings, name="email_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"),
# 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/<uuid:pk>/loeschen/", views.email_eingang_delete, name="email_eingang_delete"),
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"),
]