generated from coulomb/repo-seed
We are building, workplan now registered with statehub
This commit is contained in:
49
vergabe_teilnahme/apps/ausschreibungen/services.py
Normal file
49
vergabe_teilnahme/apps/ausschreibungen/services.py
Normal file
@@ -0,0 +1,49 @@
|
||||
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,
|
||||
}
|
||||
Reference in New Issue
Block a user