vergabe-teilnahme/vergabe_teilnahme/apps/ausschreibungen/services.py

49 lines
1.6 KiB
Python

from datetime import date
def entscheidungsregel_auswertung(ausschreibung):
from vergabe_teilnahme.apps.bibliothek.models import Entscheidungsregel
regeln = Entscheidungsregel.objects.filter(aktiv=True).order_by('-gewichtung')
return [
{
'regel': regel,
**_wende_regel_an(regel, ausschreibung),
}
for regel in regeln
]
def _wende_regel_an(regel, ausschreibung):
kat = regel.kategorie
if kat == 'ausschlusskriterium' and hasattr(ausschreibung, 'anforderungen'):
hat_ausschluss = ausschreibung.anforderungen.filter(
ausschlusskriterium=True, erfuellungsstatus='nicht_erfuellbar'
).exists()
if hat_ausschluss:
return {
'empfehlung': 'nicht_teilnehmen',
'begruendung': 'Nicht erfüllbares Ausschlusskriterium vorhanden.',
'warnung': True,
}
if kat == 'frist' and ausschreibung.abgabe_bis:
abgabe_date = (
ausschreibung.abgabe_bis.date()
if hasattr(ausschreibung.abgabe_bis, 'date')
else ausschreibung.abgabe_bis
)
delta = (abgabe_date - date.today()).days
if regel.schwellenwert and delta < int(regel.schwellenwert):
return {
'empfehlung': 'nicht_teilnehmen',
'begruendung': f'Restlaufzeit {delta} Tage liegt unter Schwellenwert {int(regel.schwellenwert)} Tage.',
'warnung': True,
}
return {
'empfehlung': 'pruefen',
'begruendung': regel.begruendung or '',
'warnung': False,
}