from django.db import models class Angestellter(models.Model): name = models.CharField('Name', max_length=100) klasse = models.CharField('Klasse', max_length=10) is_teacher = models.BooleanField('Ist Lehrer?', default=False) def __str__(self): return "{} ({})".format(self.name, self.klasse) def show_betriebe(self): return ", ".join([str(b) for b in self.betriebe.all()]) show_betriebe.short_description = "Betriebe" def zugeteilt(self): return self.betriebe.all().count() > 0 zugeteilt.boolean = True def ist_klein(self): return self.klasse[0] in ['I', '5', '6', '7'] ist_klein.boolean = True class Meta: verbose_name = 'Angestellter' verbose_name_plural = 'Angestellte' class Aufsicht(models.Model): name = models.CharField('Name', max_length=100) stunden = models.FloatField('Deputatsstunden', default=25, help_text='Verfügbare Deputatsstunde (Dreiviertel Stunden) von Dienstag bis Freitag') def __str__(self): return self.name def stunden_geleistet(self): return sum([n.teilstunden for n in self.betriebsaufsicht_set.all()]) def show_stunden(self): return "{}/{}".format(self.stunden_geleistet(), self.stunden) show_stunden.short_description = "Deputatsstunden" class Meta: verbose_name = 'Aufsicht' verbose_name_plural = 'Aufsichten' # Create your models here. class Betrieb(models.Model): name = models.CharField('Name', max_length=100) manager = models.CharField('Betriebsleiter', max_length=200) email = models.EmailField('Kontakt Email', blank=True) arbeitnehmerzahl = models.IntegerField('Anzahl Arbeitnehmer', default=0, help_text='Gesamtzahl aller angestellten ' 'Arbeitnehmer/-innen inklusive Betriebsleiter/-innen') arbeitnehmerzahl.short_description = 'Stellen' raumforderung = models.FloatField('Raumanforderung', default=0, help_text='In Zahlen ausgedrückter ' 'Raumwunsch (halber Raum = 0,5)') raum = models.IntegerField('Raum', default=102) aufsicht = models.CharField('Aufsicht', max_length=100, default='keine') kredit = models.IntegerField('Kreditwunsch', default=0) business_idea = models.TextField('Idee') ip_address = models.CharField('IP Adresse', max_length=50, blank=True) confirmed = models.BooleanField('Bestätigt', default=False) approved = models.BooleanField('Zugelassen', default=False) angestellte = models.ManyToManyField(Angestellter, verbose_name='Angestellte', blank=True, related_name='betriebe') def arbeitnehmerzahl_kurz(self): return self.arbeitnehmerzahl arbeitnehmerzahl_kurz.short_description = 'Stellen' def punkt(self): kleine_angestellte = [a for a in self.angestellte.all() if a.ist_klein()] max_angestellte = self.angestellte.all().count() if len(kleine_angestellte) == 0: return 0 elif len(kleine_angestellte) < (max_angestellte / 2): return 0.5 else: return 1 punkt.short_description = 'Punkt' def arbeiter_effektiv(self): return "{}/{}".format(self.angestellte.all().count(), self.arbeitnehmerzahl) arbeiter_effektiv.short_description = 'Stellen' def beaufsichtigt(self): betriebe = Betrieb.objects.filter(raum=self.raum) stunden = sum([sum([n.teilstunden for n in b.betriebsaufsicht_set.all()]) for b in betriebe]) return stunden >= 32 * self.punkt() beaufsichtigt.boolean = True beaufsichtigt.short_description = 'Beaufsichtigt' def __str__(self): return str(self.name) class Meta: verbose_name = 'Betrieb' verbose_name_plural = 'Betriebe' class Betriebsaufsicht(models.Model): aufsicht = models.ForeignKey(Aufsicht) betrieb = models.ForeignKey(Betrieb) teilstunden = models.FloatField('Geleistete Deputatsstunden', default=16) def __str__(self): return self.aufsicht.name class Partei(models.Model): name = models.CharField('Name', max_length=100) abbreviation = models.CharField('Abkürzung', max_length=5) chef = models.CharField('Parteivorsitzende', max_length=200) email = models.EmailField('Kontakt Email') description = models.TextField('Beschreibung (Ziele etc.)') ip_address = models.CharField('IP Adresse', max_length=50, blank=True) confirmed = models.BooleanField('Bestätigt', default=False) approved = models.BooleanField('Zugelassen', default=False) def __str__(self): return str(self.name) class Meta: verbose_name = 'Partei' verbose_name_plural = 'Parteien' class PresidentCandidate(models.Model): name = models.CharField('Name', max_length=100) email = models.EmailField('Kontakt Email') motivation = models.TextField('Motivation') ip_address = models.CharField('IP Adresse', max_length=50, blank=True) confirmed = models.BooleanField('Bestätigt', default=False) approved = models.BooleanField('Zugelassen', default=False) def __str__(self): return str(self.name) class Meta: verbose_name = 'Präsidentschaftskandidat' verbose_name_plural = 'Präsidentschaftskandidaten' class Question(models.Model): subject = models.CharField('Betreff', max_length=100) email = models.EmailField('Kontakt Email') content = models.TextField('Inhalt') ip_address = models.CharField('IP Adresse', max_length=50, blank=True) answered = models.BooleanField('Beantwortet', default=False) def __str__(self): return str(self.subject) class Meta: verbose_name = 'Frage' verbose_name_plural = 'Fragen'