Complete dashboard loose ends and reconcile blocked pilot work
All checks were successful
All checks were successful
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a0e394-2a69-7df0-8980-22a0ebe55216
This commit is contained in:
parent
387b7e9782
commit
35df9bb772
13 changed files with 325 additions and 55 deletions
|
|
@ -1,5 +1,7 @@
|
|||
from datetime import date, timedelta
|
||||
|
||||
from django.db import transaction
|
||||
from django.db.models import Q
|
||||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
|
|
@ -15,6 +17,7 @@ def _is_htmx(request):
|
|||
|
||||
def dashboard(request):
|
||||
from vergabe_teilnahme.apps.aufgaben.models import Aufgabe
|
||||
from vergabe_teilnahme.apps.bibliothek.models import Nachweis
|
||||
|
||||
heute = date.today()
|
||||
in_14_tagen = heute + timedelta(days=14)
|
||||
|
|
@ -41,6 +44,10 @@ def dashboard(request):
|
|||
status__range=(1, 9),
|
||||
).order_by('-geaendert_am')[:10],
|
||||
|
||||
'ablaufende_nachweise': Nachweis.objects.filter(
|
||||
gueltig_bis__lte=heute + timedelta(days=60),
|
||||
).order_by('gueltig_bis', 'pk'),
|
||||
'today': heute,
|
||||
'breadcrumbs': [{'label': 'Übersicht', 'url': None}],
|
||||
}
|
||||
return render(request, 'ausschreibungen/dashboard.html', ctx)
|
||||
|
|
@ -49,6 +56,10 @@ def dashboard(request):
|
|||
def ausschreibung_liste(request):
|
||||
qs = Ausschreibung.objects.all()
|
||||
|
||||
q = request.GET.get('q', '').strip()
|
||||
if q:
|
||||
qs = qs.filter(Q(titel__icontains=q) | Q(ausschreiber__icontains=q))
|
||||
|
||||
status_filter = request.GET.get('status')
|
||||
if status_filter:
|
||||
qs = qs.filter(status=status_filter)
|
||||
|
|
@ -60,7 +71,7 @@ def ausschreibung_liste(request):
|
|||
if bid_manager_filter:
|
||||
qs = qs.filter(bid_manager=bid_manager_filter)
|
||||
|
||||
from django.db.models import Count, Q
|
||||
from django.db.models import Count
|
||||
qs = qs.select_related('bid_manager').annotate(
|
||||
aufgaben_total=Count('aufgaben', distinct=True),
|
||||
aufgaben_erledigt=Count(
|
||||
|
|
@ -75,6 +86,7 @@ def ausschreibung_liste(request):
|
|||
'status_choices': Ausschreibung.STATUS_CHOICES,
|
||||
'mitarbeiter': Mitarbeiter.objects.all(),
|
||||
'archiviert': archiviert,
|
||||
'q': q,
|
||||
'current_status': status_filter or '',
|
||||
'current_bid_manager': bid_manager_filter or '',
|
||||
'breadcrumbs': [{'label': 'Ausschreibungen', 'url': None}],
|
||||
|
|
@ -88,14 +100,28 @@ def ausschreibung_liste(request):
|
|||
def ausschreibung_neu(request):
|
||||
from .forms import AusschreibungForm
|
||||
|
||||
historisch = request.GET.get('historisch') == '1'
|
||||
historisch = (request.GET.get('historisch') == '1'
|
||||
or request.POST.get('historisch_erfassen') == '1')
|
||||
if request.method == 'POST':
|
||||
form = AusschreibungForm(request.POST)
|
||||
form = AusschreibungForm(request.POST, historisch=historisch)
|
||||
if form.is_valid():
|
||||
a = form.save()
|
||||
with transaction.atomic():
|
||||
a = form.save()
|
||||
if historisch:
|
||||
from vergabe_teilnahme.apps.nachbetrachtung.models import Nachbetrachtung
|
||||
|
||||
ergebnis = form.cleaned_data["ergebnis"]
|
||||
Nachbetrachtung.objects.create(ausschreibung=a, ergebnis=ergebnis)
|
||||
result_status = {
|
||||
"gewonnen": 10, "verloren": 11,
|
||||
"aufgehoben": 12, "zurueckgezogen": 13,
|
||||
}
|
||||
if ergebnis in result_status:
|
||||
a.status = result_status[ergebnis]
|
||||
a.save(update_fields=["status"])
|
||||
return redirect('ausschreibungen:detail', pk=a.pk)
|
||||
else:
|
||||
form = AusschreibungForm()
|
||||
form = AusschreibungForm(historisch=historisch)
|
||||
|
||||
return render(request, 'ausschreibungen/form.html', {
|
||||
'form': form,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue