Schule als Staat Projekt Web, Dokumente, etc.
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

180 řádky
6.4KB

  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. business_idea = models.TextField('Idee')
  51. ip_address = models.CharField('IP Adresse', max_length=50, blank=True)
  52. confirmed = models.BooleanField('Bestätigt', default=False)
  53. approved = models.BooleanField('Zugelassen', default=False)
  54. angestellte = models.ManyToManyField(Angestellter,
  55. verbose_name='Angestellte',
  56. blank=True,
  57. related_name='betriebe')
  58. def arbeitnehmerzahl_kurz(self):
  59. return self.arbeitnehmerzahl
  60. arbeitnehmerzahl_kurz.short_description = 'Stellen'
  61. def punkt(self):
  62. kleine_angestellte = [a for a in self.angestellte.all() if a.ist_klein()]
  63. max_angestellte = self.angestellte.all().count()
  64. if len(kleine_angestellte) == 0:
  65. return 0
  66. elif len(kleine_angestellte) < (max_angestellte / 2):
  67. return 0.5
  68. else:
  69. return 1
  70. punkt.short_description = 'Punkt'
  71. def arbeiter_effektiv(self):
  72. return "{}/{}".format(self.angestellte.all().count(),
  73. self.arbeitnehmerzahl)
  74. arbeiter_effektiv.short_description = 'Stellen'
  75. def beaufsichtigt(self):
  76. betriebe = Betrieb.objects.filter(raum=self.raum)
  77. stunden = sum([sum([n.teilstunden for n in
  78. b.betriebsaufsicht_set.all()]) for b in betriebe])
  79. return stunden >= 32 * self.punkt()
  80. beaufsichtigt.boolean = True
  81. beaufsichtigt.short_description = 'Beaufsichtigt'
  82. def show_aufsichten(self):
  83. aufsichten = ["{} ({})".format(a.aufsicht.kuerzel,
  84. truncate_if_zero(a.teilstunden)) for a in
  85. self.betriebsaufsicht_set.all()]
  86. return ", ".join(aufsichten)
  87. show_aufsichten.short_description = "Aufsicht"
  88. def __str__(self):
  89. return str(self.name)
  90. class Meta:
  91. verbose_name = 'Betrieb'
  92. verbose_name_plural = 'Betriebe'
  93. class Betriebsaufsicht(models.Model):
  94. aufsicht = models.ForeignKey(Aufsicht)
  95. betrieb = models.ForeignKey(Betrieb)
  96. teilstunden = models.FloatField('Geleistete Deputatsstunden', default=16)
  97. def __str__(self):
  98. return self.aufsicht.name
  99. class Partei(models.Model):
  100. name = models.CharField('Name', max_length=100)
  101. abbreviation = models.CharField('Abkürzung', max_length=5)
  102. chef = models.CharField('Parteivorsitzende', max_length=200)
  103. email = models.EmailField('Kontakt Email')
  104. description = models.TextField('Beschreibung (Ziele etc.)')
  105. ip_address = models.CharField('IP Adresse', max_length=50, blank=True)
  106. confirmed = models.BooleanField('Bestätigt', default=False)
  107. approved = models.BooleanField('Zugelassen', default=False)
  108. def __str__(self):
  109. return str(self.name)
  110. class Meta:
  111. verbose_name = 'Partei'
  112. verbose_name_plural = 'Parteien'
  113. class PresidentCandidate(models.Model):
  114. name = models.CharField('Name', max_length=100)
  115. email = models.EmailField('Kontakt Email')
  116. motivation = models.TextField('Motivation')
  117. ip_address = models.CharField('IP Adresse', max_length=50, blank=True)
  118. confirmed = models.BooleanField('Bestätigt', default=False)
  119. approved = models.BooleanField('Zugelassen', default=False)
  120. def __str__(self):
  121. return str(self.name)
  122. class Meta:
  123. verbose_name = 'Präsidentschaftskandidat'
  124. verbose_name_plural = 'Präsidentschaftskandidaten'
  125. class Question(models.Model):
  126. subject = models.CharField('Betreff', max_length=100)
  127. email = models.EmailField('Kontakt Email')
  128. content = models.TextField('Inhalt')
  129. ip_address = models.CharField('IP Adresse', max_length=50, blank=True)
  130. answered = models.BooleanField('Beantwortet', default=False)
  131. def __str__(self):
  132. return str(self.subject)
  133. class Meta:
  134. verbose_name = 'Frage'
  135. verbose_name_plural = 'Fragen'
  136. def truncate_if_zero(x):
  137. if int(x) == x:
  138. return round(x)
  139. else:
  140. return x