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:
parent
c5ccbd665d
commit
5a231223c0
23 changed files with 828 additions and 37 deletions
|
|
@ -1,5 +1,4 @@
|
|||
from django.http import HttpResponse
|
||||
from django.shortcuts import render
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
from django.views.decorators.http import require_GET, require_POST
|
||||
|
||||
from .models import Feedbackeintrag
|
||||
|
|
@ -35,12 +34,48 @@ def submit(request):
|
|||
entry.erfasst_von = request.user
|
||||
entry.save()
|
||||
|
||||
return HttpResponse(
|
||||
'<div x-data="{open:true}" x-show="open" x-cloak '
|
||||
'class="fixed inset-0 bg-black/30 z-50 flex items-center justify-center">'
|
||||
'<div class="bg-white rounded-xl shadow-xl p-8 text-center max-w-sm mx-4">'
|
||||
'<p class="text-2xl mb-2">✅</p>'
|
||||
'<p class="font-medium text-slate-900">Danke für dein Feedback!</p>'
|
||||
'<button @click="open=false" class="btn-secondary mt-4">Schließen</button>'
|
||||
'</div></div>'
|
||||
)
|
||||
return render(request, 'partials/feedback_success.html', {})
|
||||
|
||||
|
||||
def backlog(request):
|
||||
qs = Feedbackeintrag.objects.select_related('erfasst_von', 'ausschreibung').all()
|
||||
|
||||
status_filter = request.GET.get('status')
|
||||
if status_filter:
|
||||
qs = qs.filter(status=status_filter)
|
||||
|
||||
kategorie_filter = request.GET.get('kategorie')
|
||||
if kategorie_filter:
|
||||
qs = qs.filter(kategorie=kategorie_filter)
|
||||
|
||||
dringlichkeit_filter = request.GET.get('dringlichkeit')
|
||||
if dringlichkeit_filter:
|
||||
qs = qs.filter(dringlichkeit=dringlichkeit_filter)
|
||||
|
||||
ctx = {
|
||||
'eintraege': qs,
|
||||
'status_choices': Feedbackeintrag.STATUS_CHOICES,
|
||||
'kategorie_choices': Feedbackeintrag.KATEGORIE_CHOICES,
|
||||
'dringlichkeit_choices': Feedbackeintrag.DRINGLICHKEIT_CHOICES,
|
||||
'current_status': status_filter or '',
|
||||
'current_kategorie': kategorie_filter or '',
|
||||
'current_dringlichkeit': dringlichkeit_filter or '',
|
||||
'breadcrumbs': [{'label': 'Feedback-Backlog', 'url': None}],
|
||||
}
|
||||
return render(request, 'feedback/backlog.html', ctx)
|
||||
|
||||
|
||||
@require_POST
|
||||
def status_aendern(request, pk):
|
||||
eintrag = get_object_or_404(Feedbackeintrag, pk=pk)
|
||||
neuer_status = request.POST.get('status')
|
||||
if neuer_status in dict(Feedbackeintrag.STATUS_CHOICES):
|
||||
eintrag.status = neuer_status
|
||||
bewertung = request.POST.get('bewertung')
|
||||
if bewertung is not None:
|
||||
eintrag.bewertung = bewertung
|
||||
entscheidung = request.POST.get('entscheidung')
|
||||
if entscheidung is not None:
|
||||
eintrag.entscheidung = entscheidung
|
||||
eintrag.save()
|
||||
return render(request, 'feedback/partials/eintrag_zeile.html', {'eintrag': eintrag})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue