make email optional and add angestellte

This commit is contained in:
erichhasl
2018-07-08 19:07:11 +02:00
parent 50ffb663f1
commit 45709819d4
2 changed files with 96 additions and 3 deletions
+55 -2
View File
@@ -1,9 +1,52 @@
from django.contrib import admin 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 startpage.models import Banned
from django.contrib.admin import helpers from django.contrib.admin import helpers
from django.shortcuts import render from django.shortcuts import render
from django.template.defaulttags import register 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 @register.filter
@@ -46,11 +89,15 @@ create_overview.short_description = "Übersicht erstellen"
# Register your models here. # Register your models here.
class BetriebAdmin(admin.ModelAdmin): class BetriebAdmin(admin.ModelAdmin):
list_display = ('name', 'manager', 'aufsicht', 'raum', list_display = ('name', 'manager', 'aufsicht', 'raum',
'arbeitnehmerzahl_kurz', 'confirmed', 'arbeitnehmerzahl_kurz', 'punkt',
'approved') 'approved')
list_filter = ('confirmed', 'approved', 'raum') list_filter = ('confirmed', 'approved', 'raum')
search_fields = ('name', 'manager', 'raum', 'aufsicht') search_fields = ('name', 'manager', 'raum', 'aufsicht')
formfield_overrides = {
models.ManyToManyField: {'widget': forms.CheckboxSelectMultiple},
}
actions = [ban_ip, create_overview] actions = [ban_ip, create_overview]
filter_horizontal = ('angestellte',)
class ParteiAdmin(admin.ModelAdmin): class ParteiAdmin(admin.ModelAdmin):
@@ -71,7 +118,13 @@ class QuestionAdmin(admin.ModelAdmin):
list_filter = ('answered',) list_filter = ('answered',)
actions = [ban_ip] 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(Betrieb, BetriebAdmin)
admin.site.register(Partei, ParteiAdmin) admin.site.register(Partei, ParteiAdmin)
admin.site.register(PresidentCandidate, PresidentAdmin) admin.site.register(PresidentCandidate, PresidentAdmin)
admin.site.register(Question, QuestionAdmin) admin.site.register(Question, QuestionAdmin)
admin.site.register(Angestellter, AngestellterAdmin)
+41 -1
View File
@@ -1,11 +1,36 @@
from django.db import models 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. # Create your models here.
class Betrieb(models.Model): class Betrieb(models.Model):
name = models.CharField('Name', max_length=100) name = models.CharField('Name', max_length=100)
manager = models.CharField('Betriebsleiter', max_length=200) manager = models.CharField('Betriebsleiter', max_length=200)
email = models.EmailField('Kontakt Email') email = models.EmailField('Kontakt Email', blank=True)
arbeitnehmerzahl = models.IntegerField('Anzahl Arbeitnehmer', arbeitnehmerzahl = models.IntegerField('Anzahl Arbeitnehmer',
default=0, default=0,
help_text='Gesamtzahl aller angestellten ' help_text='Gesamtzahl aller angestellten '
@@ -21,11 +46,26 @@ class Betrieb(models.Model):
ip_address = models.CharField('IP Adresse', max_length=50, blank=True) ip_address = models.CharField('IP Adresse', max_length=50, blank=True)
confirmed = models.BooleanField('Bestätigt', default=False) confirmed = models.BooleanField('Bestätigt', default=False)
approved = models.BooleanField('Zugelassen', default=False) approved = models.BooleanField('Zugelassen', default=False)
angestellte = models.ManyToManyField(Angestellter,
verbose_name='Angestellte',
blank=True,
related_name='betriebe')
def arbeitnehmerzahl_kurz(self): def arbeitnehmerzahl_kurz(self):
return self.arbeitnehmerzahl return self.arbeitnehmerzahl
arbeitnehmerzahl_kurz.short_description = 'Stellen' 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): def __str__(self):
return str(self.name) return str(self.name)