Unterstützung für Lose
This commit is contained in:
parent
e4eb5bc368
commit
f6af101933
8 changed files with 105 additions and 1 deletions
|
|
@ -7,7 +7,7 @@ class AusschreibungForm(forms.ModelForm):
|
|||
class Meta:
|
||||
model = Ausschreibung
|
||||
fields = [
|
||||
'titel', 'ausschreiber', 'vergabeplattform', 'vergabenummer', 'vergabeart', 'rechtsgrundlage',
|
||||
'titel', 'ausschreiber', 'vergabeplattform', 'vergabenummer', 'vergabeart', 'rechtsgrundlage', 'rechtsgrundlage_details',
|
||||
'fundstelle_url', 'bid_manager', 'leistungsbeschreibung',
|
||||
'branche', 'schlagwoerter', 'geschaetztes_volumen',
|
||||
'veroeffentlichungsdatum', 'bieterfragen_bis', 'abgabe_bis', 'bindefrist', 'bindefrist_tage',
|
||||
|
|
@ -21,6 +21,7 @@ class AusschreibungForm(forms.ModelForm):
|
|||
'vergabenummer': forms.TextInput(attrs={'class': 'form-input'}),
|
||||
'vergabeart': forms.Select(attrs={'class': 'form-input'}),
|
||||
'rechtsgrundlage': forms.Select(attrs={'class': 'form-input'}),
|
||||
'rechtsgrundlage_details': forms.Textarea(attrs={'class': 'form-input', 'rows': 2, 'placeholder': 'z.B. Verfahrensart, Schwellenwert, Besonderheiten…'}),
|
||||
'fundstelle_url': forms.URLInput(attrs={'class': 'form-input'}),
|
||||
'bid_manager': forms.Select(attrs={'class': 'form-input'}),
|
||||
'leistungsbeschreibung': forms.Textarea(attrs={'class': 'form-input', 'rows': 4}),
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 6.0.5 on 2026-05-13 22:57
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ausschreibungen', '0005_bindefrist_tage'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='ausschreibung',
|
||||
name='rechtsgrundlage_details',
|
||||
field=models.TextField(blank=True),
|
||||
),
|
||||
]
|
||||
|
|
@ -49,6 +49,7 @@ class Ausschreibung(FlexibleModel):
|
|||
vergabenummer = models.CharField(max_length=100, blank=True)
|
||||
vergabeart = models.CharField(max_length=30, choices=VERGABEART_CHOICES, blank=True)
|
||||
rechtsgrundlage = models.CharField(max_length=20, choices=RECHTSGRUNDLAGE_CHOICES, blank=True)
|
||||
rechtsgrundlage_details = models.TextField(blank=True)
|
||||
status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, default=1)
|
||||
teilnahmeentscheidung = models.CharField(
|
||||
max_length=20, choices=TEILNAHME_CHOICES, default='offen'
|
||||
|
|
|
|||
|
|
@ -108,13 +108,25 @@ def ausschreibung_neu(request):
|
|||
|
||||
|
||||
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.lose.models import Los
|
||||
|
||||
a = get_object_or_404(Ausschreibung, pk=pk)
|
||||
lose = Los.objects.filter(ausschreibung=a).annotate(
|
||||
aufgaben_total=Count('aufgaben', distinct=True),
|
||||
aufgaben_erledigt=Count(
|
||||
'aufgaben',
|
||||
filter=Q(aufgaben__status__in=['erledigt', 'verworfen']),
|
||||
distinct=True,
|
||||
),
|
||||
).order_by('losnummer')
|
||||
ctx = {
|
||||
'ausschreibung': a,
|
||||
'ausschreibung_id': pk,
|
||||
'lose': lose,
|
||||
'phases': build_phase_nav(a),
|
||||
'warnungen': get_deadline_warnings(a),
|
||||
'aufgaben_score': aufgaben_score(Aufgabe.objects.filter(ausschreibung=a)),
|
||||
|
|
|
|||
|
|
@ -54,6 +54,12 @@ def los_neu(request, ausschreibung_id):
|
|||
return redirect('ausschreibungen:lose:liste', ausschreibung_id=ausschreibung_id)
|
||||
else:
|
||||
form = LosForm(ausschreibung=ausschreibung)
|
||||
|
||||
if _is_htmx(request):
|
||||
return render(request, 'lose/partials/los_form_inline.html', {
|
||||
'form': form,
|
||||
'ausschreibung': ausschreibung,
|
||||
})
|
||||
return render(request, 'lose/form.html', {
|
||||
'form': form,
|
||||
'ausschreibung': ausschreibung,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue