from datetime import date from django.db import models from vergabe_teilnahme.apps.core.models import FlexibleModel class Leistungsblatt(FlexibleModel): produktfunktion = models.CharField(max_length=300) beschreibung = models.TextField(blank=True) leistungsumfang = models.TextField(blank=True) grenzen_ausschluesse = models.TextField(blank=True) technische_voraussetzungen = models.TextField(blank=True) typische_nachweise = models.TextField(blank=True) version = models.CharField(max_length=20, default='1.0') eigentuemer = models.ForeignKey( 'accounts.Mitarbeiter', on_delete=models.SET_NULL, null=True, blank=True ) class Meta: verbose_name = 'Leistungsblatt' verbose_name_plural = 'Leistungsblätter' ordering = ['produktfunktion'] def __str__(self): return self.produktfunktion class Nachweis(FlexibleModel): FREIGABE_CHOICES = [ ('intern_freigegeben', 'Intern freigegeben'), ('extern_freigegeben', 'Extern freigegeben'), ('eingeschraenkt', 'Eingeschränkt'), ('nicht_freigegeben', 'Nicht freigegeben'), ] VERTRAULICHKEIT_CHOICES = [ ('intern', 'Intern'), ('streng_vertraulich', 'Streng vertraulich'), ('oeffentlich', 'Öffentlich'), ] titel = models.CharField(max_length=300) kurzbeschreibung = models.TextField(blank=True) dokumenttyp = models.CharField(max_length=100, blank=True) kategorie = models.CharField(max_length=100, blank=True) datei = models.FileField(upload_to='nachweise/%Y/', null=True, blank=True) version = models.CharField(max_length=20, default='1.0') status = models.CharField(max_length=20, default='aktiv') gueltig_ab = models.DateField(null=True, blank=True) gueltig_bis = models.DateField(null=True, blank=True) eigentuemer = models.ForeignKey( 'accounts.Mitarbeiter', on_delete=models.SET_NULL, null=True, blank=True, related_name='eigene_nachweise' ) freigabestatus = models.CharField( max_length=30, choices=FREIGABE_CHOICES, default='intern_freigegeben' ) letzte_pruefung = models.DateField(null=True, blank=True) zugehoerige_standards = models.TextField(blank=True) vertraulichkeit = models.CharField( max_length=20, choices=VERTRAULICHKEIT_CHOICES, default='intern' ) sprache = models.CharField(max_length=5, default='de') fuer_oeffentliche = models.BooleanField(default=True) fuer_privatwirtschaftliche = models.BooleanField(default=True) class Meta: verbose_name = 'Nachweis' verbose_name_plural = 'Nachweise' ordering = ['titel'] def __str__(self): return self.titel @property def ist_abgelaufen(self): if not self.gueltig_bis: return False return self.gueltig_bis < date.today() class Referenz(FlexibleModel): FREIGABE_CHOICES = [ ('freigegeben', 'Freigegeben'), ('eingeschraenkt', 'Eingeschränkt'), ('nicht_freigegeben', 'Nicht freigegeben'), ] referenztitel = models.CharField(max_length=400) kunde = models.CharField(max_length=300) branche = models.CharField(max_length=200, blank=True) oeffentlich_oder_privat = models.CharField(max_length=20, blank=True) leistungsbeschreibung = models.TextField(blank=True) eingesetzte_produkte = models.TextField(blank=True) projektzeitraum = models.CharField(max_length=100, blank=True) vertragsvolumen = models.DecimalField(max_digits=14, decimal_places=2, null=True, blank=True) ansprechpartner_referenzkunde = models.CharField(max_length=200, blank=True) freigabestatus_verwendung = models.CharField( max_length=30, choices=FREIGABE_CHOICES, default='freigegeben' ) vertraulichkeit = models.CharField(max_length=20, default='intern') whitepaper = models.FileField(upload_to='referenzen/', null=True, blank=True) kurzfassung = models.TextField(blank=True) langfassung = models.TextField(blank=True) verwendbar_fuer_ausschreibungen = models.BooleanField(default=True) einschraenkungen_verwendung = models.TextField(blank=True) leistungsblaetter = models.ManyToManyField(Leistungsblatt, blank=True) class Meta: verbose_name = 'Referenz' verbose_name_plural = 'Referenzen' ordering = ['referenztitel'] def __str__(self): return self.referenztitel class Entscheidungsregel(FlexibleModel): KATEGORIE_CHOICES = [ ('ausschlusskriterium', 'Ausschlusskriterium'), ('frist', 'Fristlage'), ('referenz', 'Referenzanforderung'), ('wirtschaftlichkeit', 'Wirtschaftlichkeit'), ('ressourcen', 'Ressourcenverfügbarkeit'), ('sonstiges', 'Sonstiges'), ] EMPFEHLUNG_CHOICES = [ ('teilnehmen', 'Teilnehmen'), ('nicht_teilnehmen', 'Nicht teilnehmen'), ('pruefen', 'Prüfen'), ] regelname = models.CharField(max_length=300) beschreibung = models.TextField(blank=True) kategorie = models.CharField(max_length=30, choices=KATEGORIE_CHOICES) gewichtung = models.DecimalField(max_digits=5, decimal_places=2, default=1.0) bewertungslogik = models.TextField(blank=True) schwellenwert = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True) empfehlung = models.CharField(max_length=20, choices=EMPFEHLUNG_CHOICES) begruendung = models.TextField(blank=True) gueltig_von = models.DateField(null=True, blank=True) gueltig_bis = models.DateField(null=True, blank=True) aktiv = models.BooleanField(default=True) verantwortlicher = models.ForeignKey( 'accounts.Mitarbeiter', on_delete=models.SET_NULL, null=True, blank=True ) class Meta: verbose_name = 'Entscheidungsregel' verbose_name_plural = 'Entscheidungsregeln' ordering = ['regelname'] def __str__(self): return self.regelname