From 45709819d40ebf15a37742ab3963fe96ebd9b6f5 Mon Sep 17 00:00:00 2001 From: erichhasl Date: Sun, 8 Jul 2018 19:07:11 +0200 Subject: [PATCH] make email optional and add angestellte --- web_dev/sas_web/meingoethopia/admin.py | 57 ++++++++++++++++++++++++- web_dev/sas_web/meingoethopia/models.py | 42 +++++++++++++++++- 2 files changed, 96 insertions(+), 3 deletions(-) diff --git a/web_dev/sas_web/meingoethopia/admin.py b/web_dev/sas_web/meingoethopia/admin.py index bafaa45..a94c277 100644 --- a/web_dev/sas_web/meingoethopia/admin.py +++ b/web_dev/sas_web/meingoethopia/admin.py @@ -1,9 +1,52 @@ from django.contrib import admin -from .models import Betrieb, Partei, PresidentCandidate, Question +from .models import Betrieb, Partei, PresidentCandidate, Question, Angestellter from startpage.models import Banned from django.contrib.admin import helpers from django.shortcuts import render from django.template.defaulttags import register +from django.db import models +from django import forms + + +class ZugeteiltFilter(admin.SimpleListFilter): + title = 'Zugeteilt' + parameter_name = 'zugeteilt' + default_value = ('Alle', None) + + def lookups(self, request, model_admin): + return ( + ('Alle', 'Alle'), + ('True', 'Zugeteilt'), + ('False', 'Nicht zugeteilt'), + ) + + def queryset(self, request, queryset): + if self.value() == 'True': + print("filter auf true") + return queryset.filter(betriebe__gt=0) + elif self.value() == 'False': + print("filter auf false") + return queryset.filter(betriebe__exact=None) + elif self.value() is None: + if self.default_value[1] is None: + return queryset + else: + return [x for x in queryset if x.zugeteilt() == self.default_value[1]] + elif self.value() == 'All': + return queryset + + def choices(self, cl): + for lookup, title in self.lookup_choices: + yield { + 'selected': + self.value() == lookup or + (self.value() is None and lookup == self.default_value[0]), + 'query_string': cl.get_query_string({ + self.parameter_name: + lookup, + }, []), + 'display': title + } @register.filter @@ -46,11 +89,15 @@ create_overview.short_description = "Übersicht erstellen" # Register your models here. class BetriebAdmin(admin.ModelAdmin): list_display = ('name', 'manager', 'aufsicht', 'raum', - 'arbeitnehmerzahl_kurz', 'confirmed', + 'arbeitnehmerzahl_kurz', 'punkt', 'approved') list_filter = ('confirmed', 'approved', 'raum') search_fields = ('name', 'manager', 'raum', 'aufsicht') + formfield_overrides = { + models.ManyToManyField: {'widget': forms.CheckboxSelectMultiple}, + } actions = [ban_ip, create_overview] + filter_horizontal = ('angestellte',) class ParteiAdmin(admin.ModelAdmin): @@ -71,7 +118,13 @@ class QuestionAdmin(admin.ModelAdmin): list_filter = ('answered',) actions = [ban_ip] + +class AngestellterAdmin(admin.ModelAdmin): + list_display = ('name', 'klasse', 'is_teacher', 'show_betriebe', 'zugeteilt') + list_filter = (ZugeteiltFilter,) + 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) diff --git a/web_dev/sas_web/meingoethopia/models.py b/web_dev/sas_web/meingoethopia/models.py index 5e2afd0..27b2bbe 100644 --- a/web_dev/sas_web/meingoethopia/models.py +++ b/web_dev/sas_web/meingoethopia/models.py @@ -1,11 +1,36 @@ from django.db import models +class Angestellter(models.Model): + name = models.CharField('Name', max_length=100) + klasse = models.CharField('Klasse', max_length=10) + is_teacher = models.BooleanField('Ist Lehrer?', default=False) + + def __str__(self): + return "{} ({})".format(self.name, self.klasse) + + def show_betriebe(self): + return ",".join([str(b) for b in self.betriebe.all()]) + show_betriebe.short_description = "Betriebe" + + def zugeteilt(self): + return self.betriebe.all().count() > 0 + zugeteilt.boolean = True + + def ist_klein(self): + return self.klasse[0] in ['5', '6', '7'] + ist_klein.boolean = True + + class Meta: + verbose_name = 'Angestellter' + verbose_name_plural = 'Angestellte' + + # 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') + email = models.EmailField('Kontakt Email', blank=True) arbeitnehmerzahl = models.IntegerField('Anzahl Arbeitnehmer', default=0, help_text='Gesamtzahl aller angestellten ' @@ -21,11 +46,26 @@ class Betrieb(models.Model): ip_address = models.CharField('IP Adresse', max_length=50, blank=True) confirmed = models.BooleanField('Bestätigt', default=False) approved = models.BooleanField('Zugelassen', default=False) + angestellte = models.ManyToManyField(Angestellter, + verbose_name='Angestellte', + blank=True, + related_name='betriebe') def arbeitnehmerzahl_kurz(self): return self.arbeitnehmerzahl arbeitnehmerzahl_kurz.short_description = 'Stellen' + def punkt(self): + kleine_angestellte = [a for a in self.angestellte.all() if a.ist_klein()] + max_angestellte = self.angestellte.all().count() + if len(kleine_angestellte) == 0: + return 0 + elif len(kleine_angestellte) < (max_angestellte / 2): + return 0.5 + else: + return 1 + punkt.short_description = 'Punkt' + def __str__(self): return str(self.name)