Files
stiftung-management-system/app/stiftung/urls.py
SysAdmin Agent 2a7c9d8529 Add IMAP configuration UI and sidebar navigation for email inbox
- Email settings page at /administration/email/ with IMAP config form
- Connection test button to verify IMAP connectivity
- Sidebar link "E-Mail Eingang" for quick access
- AppConfiguration model extended with email category and password type
- init_config command includes IMAP default settings
- DB-based IMAP config with env var fallback

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 21:01:05 +00:00

499 lines
19 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
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/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"),
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"),
]