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,12 +1,12 @@
from datetime import date, timedelta
from django.http import HttpResponse
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse
from django.utils import timezone
from vergabe_teilnahme.apps.ausschreibungen.models import Ausschreibung
from django.http import HttpResponse
from .issue_backends import gitea_configured as _gitea_configured
from .models import Aufgabe, AufgabenVerknuepfung, Bieterfrage, ExternalIssue
@ -65,8 +65,8 @@ def aufgaben_liste(request, ausschreibung_id=None):
if ausschreibung:
breadcrumbs = [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': ausschreibung.titel, 'url': f'/ausschreibungen/{ausschreibung_id}/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': ausschreibung.titel, 'url': reverse('ausschreibungen:detail', kwargs={'pk': ausschreibung_id})},
{'label': 'Aufgaben', 'url': None},
]
else:
@ -119,9 +119,9 @@ def aufgabe_neu(request, ausschreibung_id):
'ausschreibung': ausschreibung,
'titel': 'Aufgabe anlegen',
'breadcrumbs': [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': ausschreibung.titel, 'url': f'/ausschreibungen/{ausschreibung_id}/'},
{'label': 'Aufgaben', 'url': f'/ausschreibungen/{ausschreibung_id}/aufgaben/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': ausschreibung.titel, 'url': reverse('ausschreibungen:detail', kwargs={'pk': ausschreibung_id})},
{'label': 'Aufgaben', 'url': reverse('ausschreibungen:aufgaben:liste', kwargs={'ausschreibung_id': ausschreibung_id})},
{'label': 'Neu', 'url': None},
],
})
@ -142,9 +142,9 @@ def aufgabe_bearbeiten(request, ausschreibung_id, pk):
'aufgabe': aufgabe,
'titel': 'Aufgabe bearbeiten',
'breadcrumbs': [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': ausschreibung.titel, 'url': f'/ausschreibungen/{ausschreibung_id}/'},
{'label': 'Aufgaben', 'url': f'/ausschreibungen/{ausschreibung_id}/aufgaben/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': ausschreibung.titel, 'url': reverse('ausschreibungen:detail', kwargs={'pk': ausschreibung_id})},
{'label': 'Aufgaben', 'url': reverse('ausschreibungen:aufgaben:liste', kwargs={'ausschreibung_id': ausschreibung_id})},
{'label': aufgabe.titel[:50], 'url': None},
],
})
@ -161,9 +161,9 @@ def aufgabe_loeschen(request, ausschreibung_id, pk):
'aufgabe': aufgabe,
'ausschreibung': ausschreibung,
'breadcrumbs': [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': ausschreibung.titel, 'url': f'/ausschreibungen/{ausschreibung_id}/'},
{'label': 'Aufgaben', 'url': f'/ausschreibungen/{ausschreibung_id}/aufgaben/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': ausschreibung.titel, 'url': reverse('ausschreibungen:detail', kwargs={'pk': ausschreibung_id})},
{'label': 'Aufgaben', 'url': reverse('ausschreibungen:aufgaben:liste', kwargs={'ausschreibung_id': ausschreibung_id})},
{'label': 'Löschen', 'url': None},
],
})
@ -176,9 +176,9 @@ def aufgabe_detail(request, ausschreibung_id, pk):
'aufgabe': aufgabe,
'ausschreibung': ausschreibung,
'breadcrumbs': [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': ausschreibung.titel, 'url': f'/ausschreibungen/{ausschreibung_id}/'},
{'label': 'Aufgaben', 'url': f'/ausschreibungen/{ausschreibung_id}/aufgaben/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': ausschreibung.titel, 'url': reverse('ausschreibungen:detail', kwargs={'pk': ausschreibung_id})},
{'label': 'Aufgaben', 'url': reverse('ausschreibungen:aufgaben:liste', kwargs={'ausschreibung_id': ausschreibung_id})},
{'label': aufgabe.titel[:50], 'url': None},
],
})
@ -237,17 +237,18 @@ def bieterfragen_liste(request, ausschreibung_id):
'mitarbeiter': Mitarbeiter.objects.all(),
'current_status': status_filter or '',
'breadcrumbs': [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': ausschreibung.titel, 'url': f'/ausschreibungen/{ausschreibung_id}/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': ausschreibung.titel, 'url': reverse('ausschreibungen:detail', kwargs={'pk': ausschreibung_id})},
{'label': 'Bieterfragen', 'url': None},
],
})
def bieterfrage_neu(request, ausschreibung_id):
from .forms import BieterfragenForm
from vergabe_teilnahme.apps.lose.models import Anforderung
from .forms import BieterfragenForm
ausschreibung = get_object_or_404(Ausschreibung, pk=ausschreibung_id)
initial = {}
@ -275,9 +276,9 @@ def bieterfrage_neu(request, ausschreibung_id):
'ausschreibung': ausschreibung,
'titel': 'Bieterfrage anlegen',
'breadcrumbs': [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': ausschreibung.titel, 'url': f'/ausschreibungen/{ausschreibung_id}/'},
{'label': 'Bieterfragen', 'url': f'/ausschreibungen/{ausschreibung_id}/bieterfragen/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': ausschreibung.titel, 'url': reverse('ausschreibungen:detail', kwargs={'pk': ausschreibung_id})},
{'label': 'Bieterfragen', 'url': reverse('ausschreibungen:bieterfragen:liste', kwargs={'ausschreibung_id': ausschreibung_id})},
{'label': 'Neu', 'url': None},
],
})
@ -290,9 +291,9 @@ def bieterfrage_detail(request, ausschreibung_id, pk):
'bieterfrage': bieterfrage,
'ausschreibung': ausschreibung,
'breadcrumbs': [
{'label': 'Ausschreibungen', 'url': '/ausschreibungen/'},
{'label': ausschreibung.titel, 'url': f'/ausschreibungen/{ausschreibung_id}/'},
{'label': 'Bieterfragen', 'url': f'/ausschreibungen/{ausschreibung_id}/bieterfragen/'},
{'label': 'Ausschreibungen', 'url': reverse('ausschreibungen:liste')},
{'label': ausschreibung.titel, 'url': reverse('ausschreibungen:detail', kwargs={'pk': ausschreibung_id})},
{'label': 'Bieterfragen', 'url': reverse('ausschreibungen:bieterfragen:liste', kwargs={'ausschreibung_id': ausschreibung_id})},
{'label': str(bieterfrage)[:50], 'url': None},
],
})