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, }