ソースを参照

make email optional and add angestellte

master
erichhasl 7年前
コミット
45709819d4
2個のファイルの変更96行の追加3行の削除
  1. +55
    -2
      web_dev/sas_web/meingoethopia/admin.py
  2. +41
    -1
      web_dev/sas_web/meingoethopia/models.py

+ 55
- 2
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)

+ 41
- 1
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)



読み込み中…
キャンセル
保存