feat: serve isolated companies below a fixed product path
All checks were successful
Application acceptance / application-tests (push) Successful in 1m12s
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Build and Publish Container Image / build-and-push (push) Successful in 25s

Assistant: codex
Assistant-Model: gpt-6-astra
Assistant-Session: 01a07ff8-19d0-7820-b4d0-1353833cb7fc
This commit is contained in:
tegwick 2026-09-11 21:29:26 +02:00
parent 09e2239bc6
commit 9345a1bb1a
28 changed files with 350 additions and 117 deletions

View file

@ -1,6 +1,7 @@
from datetime import date, timedelta
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse
from django.utils import timezone
from vergabe_teilnahme.apps.accounts.models import Mitarbeiter
@ -101,7 +102,7 @@ def ausschreibung_neu(request):
'historisch': historisch,
'titel': 'Neue Ausschreibung',
'breadcrumbs': [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': 'Neu', 'url': None},
],
})
@ -111,7 +112,11 @@ def ausschreibung_detail(request, pk):
from django.db.models import Count, Q
from vergabe_teilnahme.apps.aufgaben.models import Aufgabe
from vergabe_teilnahme.apps.core.services import aufgaben_score, build_phase_nav, get_deadline_warnings
from vergabe_teilnahme.apps.core.services import (
aufgaben_score,
build_phase_nav,
get_deadline_warnings,
)
from vergabe_teilnahme.apps.lose.models import Los
a = get_object_or_404(Ausschreibung, pk=pk)
@ -136,7 +141,7 @@ def ausschreibung_detail(request, pk):
'warnungen': get_deadline_warnings(a),
'aufgaben_score': aufgaben_score(Aufgabe.objects.filter(ausschreibung=a)),
'breadcrumbs': [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': a.titel, 'url': None},
],
}
@ -156,8 +161,8 @@ def ausschreibung_bearbeiten(request, pk):
'titel': 'Ausschreibung bearbeiten',
'ausschreibung': a,
'breadcrumbs': [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': a.titel, 'url': f'/ausschreibungen/{pk}/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': a.titel, 'url': reverse('ausschreibungen:detail', kwargs={'pk': pk})},
{'label': 'Bearbeiten', 'url': None},
],
})
@ -197,8 +202,8 @@ def ausschreibung_entscheidung(request, pk):
'regelergebnis': entscheidungsregel_auswertung(a),
'ausschlusskriterien_nicht_erfuellbar': ausschlusskriterien,
'breadcrumbs': [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': a.titel, 'url': f'/ausschreibungen/{pk}/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': a.titel, 'url': reverse('ausschreibungen:detail', kwargs={'pk': pk})},
{'label': 'Teilnahmeentscheidung', 'url': None},
],
}
@ -227,8 +232,8 @@ def freigaben_uebersicht(request, pk):
'ct_id': ct.pk,
'freigabe_typ_choices': Freigabe.TYP_CHOICES,
'breadcrumbs': [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': a.titel, 'url': f'/ausschreibungen/{pk}/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': a.titel, 'url': reverse('ausschreibungen:detail', kwargs={'pk': pk})},
{'label': 'Freigaben', 'url': None},
],
}
@ -245,8 +250,8 @@ def ausschreibung_archivieren(request, pk):
return render(request, 'ausschreibungen/archivieren_confirm.html', {
'ausschreibung': a,
'breadcrumbs': [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': a.titel, 'url': f'/ausschreibungen/{pk}/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': a.titel, 'url': reverse('ausschreibungen:detail', kwargs={'pk': pk})},
{'label': 'Archivieren', 'url': None},
],
})