Schule als Staat Projekt Web, Dokumente, etc.
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

206 lines
7.3KB

  1. from django.db import models
  2. class Angestellter(models.Model):
  3. name = models.CharField('Name', max_length=100)
  4. klasse = models.CharField('Klasse', max_length=10)
  5. is_teacher = models.BooleanField('Ist Lehrer?', default=False)
  6. def __str__(self):
  7. return "{} ({})".format(self.name, self.klasse)
  8. def show_betriebe(self):
  9. return ", ".join([str(b) for b in self.betriebe.all()])
  10. show_betriebe.short_description = "Betriebe"
  11. def zugeteilt(self):
  12. return self.betriebe.all().count() > 0
  13. zugeteilt.boolean = True
  14. def ist_klein(self):
  15. return self.klasse[0] in ['I', '5', '6', '7']
  16. ist_klein.boolean = True
  17. class Meta:
  18. verbose_name = 'Angestellter'
  19. verbose_name_plural = 'Angestellte'
  20. class Aufsicht(models.Model):
  21. name = models.CharField('Name', max_length=100)
  22. kuerzel = models.CharField('Kürzel', max_length=4, default="")
  23. stunden = models.FloatField('Deputatsstunden', default=25,
  24. help_text='Verfügbare Deputatsstunde (Dreiviertel Stunden) von Dienstag bis Freitag')
  25. def __str__(self):
  26. return self.name
  27. def stunden_geleistet(self):
  28. return sum([n.teilstunden for n in self.betriebsaufsicht_set.all()])
  29. def show_stunden(self):
  30. return "{}/{}".format(self.stunden_geleistet(), self.stunden)
  31. show_stunden.short_description = "Deputatsstunden"
  32. class Meta:
  33. verbose_name = 'Aufsicht'
  34. verbose_name_plural = 'Aufsichten'
  35. # Create your models here.
  36. class Betrieb(models.Model):
  37. name = models.CharField('Name', max_length=100)
  38. manager = models.CharField('Betriebsleiter', max_length=200)
  39. email = models.EmailField('Kontakt Email', blank=True)
  40. arbeitnehmerzahl = models.IntegerField('Anzahl Arbeitnehmer',
  41. default=0, help_text='Gesamtzahl aller angestellten '
  42. 'Arbeitnehmer/-innen inklusive Betriebsleiter/-innen')
  43. arbeitnehmerzahl.short_description = 'Stellen'
  44. raumforderung = models.FloatField('Raumanforderung', default=0,
  45. help_text='In Zahlen ausgedrückter '
  46. 'Raumwunsch (halber Raum = 0,5)')
  47. raum = models.IntegerField('Raum', default=102)
  48. aufsicht = models.CharField('Aufsicht', max_length=100, default='keine')
  49. kredit = models.IntegerField('Kreditwunsch', default=0)
  50. kredit_ausgezahlt = models.BooleanField('Kredit ausgezahlt', default=False)
  51. kredit_bezahlt = models.BooleanField('Kredit zurückgezahlt', default=False)
  52. business_idea = models.TextField('Idee')
  53. ip_address = models.CharField('IP Adresse', max_length=50, blank=True)
  54. confirmed = models.BooleanField('Bestätigt', default=False)
  55. approved = models.BooleanField('Zugelassen', default=False)
  56. angestellte = models.ManyToManyField(Angestellter,
  57. verbose_name='Angestellte',
  58. blank=True,
  59. related_name='betriebe')
  60. def arbeitnehmerzahl_kurz(self):
  61. return self.arbeitnehmerzahl
  62. arbeitnehmerzahl_kurz.short_description = 'Stellen'
  63. def punkt(self):
  64. kleine_angestellte = [a for a in self.angestellte.all() if a.ist_klein()]
  65. max_angestellte = self.angestellte.all().count()
  66. if len(kleine_angestellte) == 0:
  67. return 0
  68. elif len(kleine_angestellte) < (max_angestellte / 2):
  69. return 0.5
  70. else:
  71. return 1
  72. punkt.short_description = 'Punkt'
  73. def arbeiter_effektiv(self):
  74. return "{}/{}".format(self.angestellte.all().count(),
  75. self.arbeitnehmerzahl)
  76. arbeiter_effektiv.short_description = 'Stellen'
  77. def beaufsichtigt(self):
  78. betriebe = Betrieb.objects.filter(raum=self.raum)
  79. stunden = sum([sum([n.teilstunden for n in
  80. b.betriebsaufsicht_set.all()]) for b in betriebe])
  81. return stunden >= 32 * self.punkt()
  82. beaufsichtigt.boolean = True
  83. beaufsichtigt.short_description = 'Beaufsichtigt'
  84. def show_aufsichten(self):
  85. aufsichten = ["{} ({})".format(a.aufsicht.kuerzel,
  86. truncate_if_zero(a.teilstunden)) for a in
  87. self.betriebsaufsicht_set.all()]
  88. return ", ".join(aufsichten)
  89. show_aufsichten.short_description = "Aufsicht"
  90. def __str__(self):
  91. return str(self.name)
  92. class Meta:
  93. verbose_name = 'Betrieb'
  94. verbose_name_plural = 'Betriebe'
  95. class Betriebsaufsicht(models.Model):
  96. aufsicht = models.ForeignKey(Aufsicht)
  97. betrieb = models.ForeignKey(Betrieb)
  98. teilstunden = models.FloatField('Geleistete Deputatsstunden', default=16)
  99. def __str__(self):
  100. return self.aufsicht.name
  101. class Betriebsabrechnung(models.Model):
  102. betrieb = models.ForeignKey(Betrieb)
  103. datum = models.DateField('Datum')
  104. umsatz = models.IntegerField('Umsatz')
  105. lohnkosten = models.IntegerField('Lohnkosten')
  106. ausgaben = models.IntegerField('Ausgaben')
  107. gewinn = models.IntegerField('Gewinn')
  108. steuer = models.IntegerField('Steuer')
  109. erledigt = models.BooleanField('Erledigt')
  110. def __str__(self):
  111. return self.betrieb.name + " " + str(self.datum)
  112. class Betriebskredit(models.Model):
  113. betrieb = models.ForeignKey(Betrieb)
  114. betrag = models.IntegerField('Betrag')
  115. erklaerung = models.TextField('Erläuterung', max_length=200)
  116. erledigt = models.BooleanField('Zurückgezahlt')
  117. def __str__(self):
  118. return self.betrieb.name + " " + str(self.datum)
  119. class Partei(models.Model):
  120. name = models.CharField('Name', max_length=100)
  121. abbreviation = models.CharField('Abkürzung', max_length=5)
  122. chef = models.CharField('Parteivorsitzende', max_length=200)
  123. email = models.EmailField('Kontakt Email')
  124. description = models.TextField('Beschreibung (Ziele etc.)')
  125. ip_address = models.CharField('IP Adresse', max_length=50, blank=True)
  126. confirmed = models.BooleanField('Bestätigt', default=False)
  127. approved = models.BooleanField('Zugelassen', default=False)
  128. def __str__(self):
  129. return str(self.name)
  130. class Meta:
  131. verbose_name = 'Partei'
  132. verbose_name_plural = 'Parteien'
  133. class PresidentCandidate(models.Model):
  134. name = models.CharField('Name', max_length=100)
  135. email = models.EmailField('Kontakt Email')
  136. motivation = models.TextField('Motivation')
  137. ip_address = models.CharField('IP Adresse', max_length=50, blank=True)
  138. confirmed = models.BooleanField('Bestätigt', default=False)
  139. approved = models.BooleanField('Zugelassen', default=False)
  140. def __str__(self):
  141. return str(self.name)
  142. class Meta:
  143. verbose_name = 'Präsidentschaftskandidat'
  144. verbose_name_plural = 'Präsidentschaftskandidaten'
  145. class Question(models.Model):
  146. subject = models.CharField('Betreff', max_length=100)
  147. email = models.EmailField('Kontakt Email')
  148. content = models.TextField('Inhalt')
  149. ip_address = models.CharField('IP Adresse', max_length=50, blank=True)
  150. answered = models.BooleanField('Beantwortet', default=False)
  151. def __str__(self):
  152. return str(self.subject)
  153. class Meta:
  154. verbose_name = 'Frage'
  155. verbose_name_plural = 'Fragen'
  156. def truncate_if_zero(x):
  157. if int(x) == x:
  158. return round(x)
  159. else:
  160. return x