generated from coulomb/repo-seed
50 lines
1.6 KiB
Python
50 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,
|
|
}
|