From 0afd8cb3f970479b75a0595abd78959f716cb878 Mon Sep 17 00:00:00 2001 From: erichhasl Date: Fri, 13 Jul 2018 20:03:26 +0200 Subject: [PATCH] add aufsicht calc --- web_dev/sas_web/meingoethopia/admin.py | 17 +++++++++-- web_dev/sas_web/meingoethopia/models.py | 40 +++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/web_dev/sas_web/meingoethopia/admin.py b/web_dev/sas_web/meingoethopia/admin.py index 093601f..a1aa5a9 100644 --- a/web_dev/sas_web/meingoethopia/admin.py +++ b/web_dev/sas_web/meingoethopia/admin.py @@ -1,5 +1,6 @@ from django.contrib import admin -from .models import Betrieb, Partei, PresidentCandidate, Question, Angestellter +from .models import Betrieb, Partei, PresidentCandidate, Question, Angestellter,\ + Aufsicht, Betriebsaufsicht from startpage.models import Banned from django.contrib.admin import helpers from django.shortcuts import render @@ -84,11 +85,16 @@ def create_overview(modeladmin, request, queryset): create_overview.short_description = "Übersicht erstellen" +class AufsichtInline(admin.TabularInline): + model = Betriebsaufsicht + extra = 0 + + # Register your models here. class BetriebAdmin(admin.ModelAdmin): list_display = ('name', 'manager', 'aufsicht', 'raum', 'arbeiter_effektiv', 'punkt', - 'approved') + 'approved', 'beaufsichtigt') list_filter = ('confirmed', 'approved', 'raum') search_fields = ('name', 'manager', 'raum', 'aufsicht') formfield_overrides = { @@ -96,6 +102,7 @@ class BetriebAdmin(admin.ModelAdmin): } actions = [ban_ip, create_overview] filter_horizontal = ('angestellte',) + inlines = [AufsichtInline] class ParteiAdmin(admin.ModelAdmin): @@ -122,8 +129,14 @@ class AngestellterAdmin(admin.ModelAdmin): list_filter = (ZugeteiltFilter,) search_fields = ('name', 'klasse') + +class AufsichtAdmin(admin.ModelAdmin): + list_display = ('name', 'show_stunden') + search_fields = ('name',) + admin.site.register(Betrieb, BetriebAdmin) admin.site.register(Partei, ParteiAdmin) admin.site.register(PresidentCandidate, PresidentAdmin) admin.site.register(Question, QuestionAdmin) admin.site.register(Angestellter, AngestellterAdmin) +admin.site.register(Aufsicht, AufsichtAdmin) diff --git a/web_dev/sas_web/meingoethopia/models.py b/web_dev/sas_web/meingoethopia/models.py index a793c4a..b57d18e 100644 --- a/web_dev/sas_web/meingoethopia/models.py +++ b/web_dev/sas_web/meingoethopia/models.py @@ -26,14 +26,33 @@ class Angestellter(models.Model): verbose_name_plural = 'Angestellte' +class Aufsicht(models.Model): + name = models.CharField('Name', max_length=100) + stunden = models.IntegerField('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 ' + default=0, help_text='Gesamtzahl aller angestellten ' 'Arbeitnehmer/-innen inklusive Betriebsleiter/-innen') arbeitnehmerzahl.short_description = 'Stellen' raumforderung = models.FloatField('Raumanforderung', default=0, @@ -71,6 +90,14 @@ class Betrieb(models.Model): 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) @@ -79,6 +106,15 @@ class Betrieb(models.Model): verbose_name_plural = 'Betriebe' +class Betriebsaufsicht(models.Model): + aufsicht = models.ForeignKey(Aufsicht) + betrieb = models.ForeignKey(Betrieb) + teilstunden = models.IntegerField('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)