from datetime import date from django.db import models from vergabe_teilnahme.apps.core.models import FlexibleModel class Aufgabe(FlexibleModel): TYP_CHOICES = [ ('fachlich', 'Fachlich'), ('rechtlich', 'Rechtlich'), ('kaufmaennisch', 'Kaufmännisch'), ('technisch', 'Technisch'), ('subunternehmer', 'Subunternehmer'), ('dokument', 'Dokument'), ('preis', 'Preis'), ] STATUS_CHOICES = [ ('offen', 'Offen'), ('in_bearbeitung', 'In Bearbeitung'), ('wartend_intern', 'Wartend (intern)'), ('wartend_sub', 'Wartend (Subunternehmer)'), ('wartend_ausschreiber', 'Wartend (Ausschreiber)'), ('erledigt', 'Erledigt'), ('verworfen', 'Verworfen'), ('ueberfaellig', 'Überfällig'), ] PRIORITAET_CHOICES = [(1, 'Hoch'), (2, 'Mittel'), (3, 'Niedrig')] ausschreibung = models.ForeignKey( 'ausschreibungen.Ausschreibung', on_delete=models.CASCADE, related_name='aufgaben' ) los = models.ForeignKey( 'lose.Los', on_delete=models.SET_NULL, null=True, blank=True, related_name='aufgaben' ) anforderung = models.ForeignKey( 'lose.Anforderung', on_delete=models.SET_NULL, null=True, blank=True, related_name='aufgaben' ) bieterfrage = models.ForeignKey( 'Bieterfrage', on_delete=models.SET_NULL, null=True, blank=True, related_name='aufgaben' ) dokument = models.ForeignKey( 'dokumente.Dokument', on_delete=models.SET_NULL, null=True, blank=True, related_name='aufgaben' ) titel = models.CharField(max_length=400) beschreibung = models.TextField(blank=True) typ = models.CharField(max_length=20, choices=TYP_CHOICES, default='fachlich') status = models.CharField(max_length=25, choices=STATUS_CHOICES, default='offen') prioritaet = models.PositiveSmallIntegerField(choices=PRIORITAET_CHOICES, default=2) frist = models.DateField(null=True, blank=True) verantwortlicher = models.ForeignKey( 'accounts.Mitarbeiter', on_delete=models.SET_NULL, null=True, blank=True ) ergebnis = models.TextField(blank=True) class Meta: ordering = ['prioritaet', 'frist'] verbose_name = 'Aufgabe' verbose_name_plural = 'Aufgaben' def __str__(self): return self.titel @property def ist_ueberfaellig(self): if not self.frist: return False return self.frist < date.today() and self.status not in ['erledigt', 'verworfen'] class Bieterfrage(FlexibleModel): STATUS_CHOICES = [ ('entwurf', 'Entwurf'), ('abgestimmt', 'Abgestimmt'), ('eingereicht', 'Eingereicht'), ('beantwortet', 'Beantwortet'), ('eingearbeitet', 'Eingearbeitet'), ] PRIORITAET_CHOICES = [(1, 'Hoch'), (2, 'Mittel'), (3, 'Niedrig')] ausschreibung = models.ForeignKey( 'ausschreibungen.Ausschreibung', on_delete=models.CASCADE, related_name='bieterfragen' ) anforderung = models.ForeignKey( 'lose.Anforderung', on_delete=models.SET_NULL, null=True, blank=True, related_name='bieterfragen' ) dokument = models.ForeignKey( 'dokumente.Dokument', on_delete=models.SET_NULL, null=True, blank=True, related_name='bieterfragen' ) fragentext = models.TextField() begruendung = models.TextField(blank=True) status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='entwurf') prioritaet = models.PositiveSmallIntegerField(choices=PRIORITAET_CHOICES, default=2) einreichungsdatum = models.DateField(null=True, blank=True) antwort = models.TextField(blank=True) auswirkung_angebot = models.TextField(blank=True) eingearbeitet = models.BooleanField(default=False) verfasser = models.ForeignKey( 'accounts.Mitarbeiter', on_delete=models.SET_NULL, null=True, blank=True ) class Meta: ordering = ['prioritaet', 'status'] verbose_name = 'Bieterfrage' verbose_name_plural = 'Bieterfragen' def __str__(self): return self.fragentext[:80]