Schule als Staat Projekt Web, Dokumente, etc.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

165 lignes
5.9KB

  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. stunden = models.FloatField('Deputatsstunden', default=25,
  23. help_text='Verfügbare Deputatsstunde (Dreiviertel Stunden) von Dienstag bis Freitag')
  24. def __str__(self):
  25. return self.name
  26. def stunden_geleistet(self):
  27. return sum([n.teilstunden for n in self.betriebsaufsicht_set.all()])
  28. def show_stunden(self):
  29. return "{}/{}".format(self.stunden_geleistet(), self.stunden)
  30. show_stunden.short_description = "Deputatsstunden"
  31. class Meta:
  32. verbose_name = 'Aufsicht'
  33. verbose_name_plural = 'Aufsichten'
  34. # Create your models here.
  35. class Betrieb(models.Model):
  36. name = models.CharField('Name', max_length=100)
  37. manager = models.CharField('Betriebsleiter', max_length=200)
  38. email = models.EmailField('Kontakt Email', blank=True)
  39. arbeitnehmerzahl = models.IntegerField('Anzahl Arbeitnehmer',
  40. default=0, help_text='Gesamtzahl aller angestellten '
  41. 'Arbeitnehmer/-innen inklusive Betriebsleiter/-innen')
  42. arbeitnehmerzahl.short_description = 'Stellen'
  43. raumforderung = models.FloatField('Raumanforderung', default=0,
  44. help_text='In Zahlen ausgedrückter '
  45. 'Raumwunsch (halber Raum = 0,5)')
  46. raum = models.IntegerField('Raum', default=102)
  47. aufsicht = models.CharField('Aufsicht', max_length=100, default='keine')
  48. kredit = models.IntegerField('Kreditwunsch', default=0)
  49. business_idea = models.TextField('Idee')
  50. ip_address = models.CharField('IP Adresse', max_length=50, blank=True)
  51. confirmed = models.BooleanField('Bestätigt', default=False)
  52. approved = models.BooleanField('Zugelassen', default=False)
  53. angestellte = models.ManyToManyField(Angestellter,
  54. verbose_name='Angestellte',
  55. blank=True,
  56. related_name='betriebe')
  57. def arbeitnehmerzahl_kurz(self):
  58. return self.arbeitnehmerzahl
  59. arbeitnehmerzahl_kurz.short_description = 'Stellen'
  60. def punkt(self):
  61. kleine_angestellte = [a for a in self.angestellte.all() if a.ist_klein()]
  62. max_angestellte = self.angestellte.all().count()
  63. if len(kleine_angestellte) == 0:
  64. return 0
  65. elif len(kleine_angestellte) < (max_angestellte / 2):
  66. return 0.5
  67. else:
  68. return 1
  69. punkt.short_description = 'Punkt'
  70. def arbeiter_effektiv(self):
  71. return "{}/{}".format(self.angestellte.all().count(),
  72. self.arbeitnehmerzahl)
  73. arbeiter_effektiv.short_description = 'Stellen'
  74. def beaufsichtigt(self):
  75. betriebe = Betrieb.objects.filter(raum=self.raum)
  76. stunden = sum([sum([n.teilstunden for n in
  77. b.betriebsaufsicht_set.all()]) for b in betriebe])
  78. return stunden >= 32 * self.punkt()
  79. beaufsichtigt.boolean = True
  80. beaufsichtigt.short_description = 'Beaufsichtigt'
  81. def __str__(self):
  82. return str(self.name)
  83. class Meta:
  84. verbose_name = 'Betrieb'
  85. verbose_name_plural = 'Betriebe'
  86. class Betriebsaufsicht(models.Model):
  87. aufsicht = models.ForeignKey(Aufsicht)
  88. betrieb = models.ForeignKey(Betrieb)
  89. teilstunden = models.FloatField('Geleistete Deputatsstunden', default=16)
  90. def __str__(self):
  91. return self.aufsicht.name
  92. class Partei(models.Model):
  93. name = models.CharField('Name', max_length=100)
  94. abbreviation = models.CharField('Abkürzung', max_length=5)
  95. chef = models.CharField('Parteivorsitzende', max_length=200)
  96. email = models.EmailField('Kontakt Email')
  97. description = models.TextField('Beschreibung (Ziele etc.)')
  98. ip_address = models.CharField('IP Adresse', max_length=50, blank=True)
  99. confirmed = models.BooleanField('Bestätigt', default=False)
  100. approved = models.BooleanField('Zugelassen', default=False)
  101. def __str__(self):
  102. return str(self.name)
  103. class Meta:
  104. verbose_name = 'Partei'
  105. verbose_name_plural = 'Parteien'
  106. class PresidentCandidate(models.Model):
  107. name = models.CharField('Name', max_length=100)
  108. email = models.EmailField('Kontakt Email')
  109. motivation = models.TextField('Motivation')
  110. ip_address = models.CharField('IP Adresse', max_length=50, blank=True)
  111. confirmed = models.BooleanField('Bestätigt', default=False)
  112. approved = models.BooleanField('Zugelassen', default=False)
  113. def __str__(self):
  114. return str(self.name)
  115. class Meta:
  116. verbose_name = 'Präsidentschaftskandidat'
  117. verbose_name_plural = 'Präsidentschaftskandidaten'
  118. class Question(models.Model):
  119. subject = models.CharField('Betreff', max_length=100)
  120. email = models.EmailField('Kontakt Email')
  121. content = models.TextField('Inhalt')
  122. ip_address = models.CharField('IP Adresse', max_length=50, blank=True)
  123. answered = models.BooleanField('Beantwortet', default=False)
  124. def __str__(self):
  125. return str(self.subject)
  126. class Meta:
  127. verbose_name = 'Frage'
  128. verbose_name_plural = 'Fragen'