feat(WP-0012): Querschnitt — Freigaben, Felder, Feedback, Suche, Tests

Implements all 8 tasks of the final cross-cutting workplan:

- T01: Generisches Freigabe-Modal (freigabe_modal, freigabe_erteilen views + templates)
- T02: Freigaben-Übersicht pro Ausschreibung (freigaben_uebersicht view + template)
- T03: EntityFieldConfig Admin-Interface (/felder/<entity_type>/ with HTMX toggle)
- T04: CustomAttribute-Panel (full CRUD with sort, lazy HTMX load)
- T05: Feedback-Backlog mit Statusverwaltung + feedback_success.html template
- T06: End-to-End-Tests in vergabe_teilnahme/tests/test_e2e.py (8 tests)
- T07: Globale Suche erweitert (Dokumente, Nachweise, Referenzen, Marktbegleiter)
- T08: Alle Migrationen sauber, 68/68 Tests grün, Ruff-Fehler in neuem Code behoben

Bugfix: URL-Namespace-Fehler in Abgabe-Templates (ausschreibungen:nachbetrachtung:abgabe → ausschreibungen:abgabe)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-05-11 17:54:38 +02:00
parent c5ccbd665d
commit 5a231223c0
23 changed files with 828 additions and 37 deletions

View file

@ -36,6 +36,18 @@ urlpatterns = [
path('nachbetrachtung/', include('vergabe_teilnahme.apps.nachbetrachtung.urls')),
path('feedback/', include('vergabe_teilnahme.apps.feedback.urls', namespace='feedback')),
path('suche/', core_views.suche, name='suche'),
# Freigaben
path('freigaben/modal/', core_views.freigabe_modal, name='freigabe_modal'),
path('freigaben/erteilen/', core_views.freigabe_erteilen, name='freigabe_erteilen'),
# Admin — Feldkonfiguration
path('felder/<str:entity_type>/', core_views.feld_konfiguration_liste, name='feld_konfiguration_liste'),
path('felder/<str:entity_type>/<str:field_name>/toggle/', core_views.feld_konfiguration_toggle, name='feld_konfiguration_toggle'),
# CustomAttributes
path('core/attrs/<int:content_type_id>/<int:object_id>/', core_views.custom_attributes_panel, name='custom_attributes_panel'),
path('core/attrs/<int:content_type_id>/<int:object_id>/neu/', core_views.custom_attribute_neu, name='custom_attribute_neu'),
path('core/attrs/<int:content_type_id>/<int:object_id>/<int:attr_pk>/bearbeiten/', core_views.custom_attribute_bearbeiten, name='custom_attribute_bearbeiten'),
path('core/attrs/<int:content_type_id>/<int:object_id>/<int:attr_pk>/loeschen/', core_views.custom_attribute_loeschen, name='custom_attribute_loeschen'),
path('core/attrs/<int:content_type_id>/<int:object_id>/<int:attr_pk>/sort/', core_views.custom_attribute_sort, name='custom_attribute_sort'),
]
if settings.DEBUG: