make email optional and add angestellte
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user