Schule als Staat Projekt Web, Dokumente, etc.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

165 line
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'