From a6b467a93f2acf9b7f394d30999c6b9aa10c98e0 Mon Sep 17 00:00:00 2001 From: erichhasl Date: Thu, 17 May 2018 19:05:49 +0200 Subject: [PATCH] add fields to the betrieb model and add an overview action --- web_dev/sas_web/meingoethopia/admin.py | 39 +++++++++++++++++-- web_dev/sas_web/meingoethopia/models.py | 15 +++++++ .../meingoethopia/betriebe_overview.html | 36 +++++++++++++++++ web_dev/sas_web/sas_web/urls.py | 4 ++ .../startpage/templates/startpage/index.html | 18 +-------- 5 files changed, 93 insertions(+), 19 deletions(-) create mode 100644 web_dev/sas_web/meingoethopia/templates/meingoethopia/betriebe_overview.html diff --git a/web_dev/sas_web/meingoethopia/admin.py b/web_dev/sas_web/meingoethopia/admin.py index 96bc9c0..2d5e9b6 100644 --- a/web_dev/sas_web/meingoethopia/admin.py +++ b/web_dev/sas_web/meingoethopia/admin.py @@ -1,6 +1,14 @@ from django.contrib import admin from .models import Betrieb, Partei, PresidentCandidate, Question from startpage.models import Banned +from django.contrib.admin import helpers +from django.shortcuts import render +from django.template.defaulttags import register + + +@register.filter +def get_item(dictionary, key): + return dictionary.get(key) def ban_ip(modeladmin, request, queryset): @@ -12,11 +20,36 @@ def ban_ip(modeladmin, request, queryset): ban_ip.short_description = "Urheber ausgewählter Eintrage verbannen" +def create_overview(modeladmin, request, queryset): + if request.POST.get('back'): + pass + else: + raummap = {} + for b in queryset: + if b.raum in raummap: + raummap[b.raum]["anzahl"] += 1 + raummap[b.raum]["belegung"] += b.raumforderung + else: + raummap[b.raum] = {"anzahl": 1, "belegung": b.raumforderung} + context = {'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME, + 'betriebe': queryset, + 'arbeitnehmer_gesamt': sum([b.arbeitnehmerzahl for b in + queryset]), + 'raummap': raummap, + 'title': "Betriebsübersicht"} + return render(request, 'meingoethopia/betriebe_overview.html', context) + +create_overview.short_description = "Übersicht erstellen" + + # Register your models here. class BetriebAdmin(admin.ModelAdmin): - list_display = ('name', 'manager', 'confirmed', 'approved') - list_filter = ('confirmed', 'approved') - actions = [ban_ip] + list_display = ('name', 'manager', 'aufsicht', 'raum', + 'arbeitnehmerzahl_kurz', 'confirmed', + 'approved') + list_filter = ('confirmed', 'approved', 'raum') + search_fields = ('name', 'manager', 'raum', 'aufsicht') + actions = [ban_ip, create_overview] class ParteiAdmin(admin.ModelAdmin): diff --git a/web_dev/sas_web/meingoethopia/models.py b/web_dev/sas_web/meingoethopia/models.py index 990217e..5e2afd0 100644 --- a/web_dev/sas_web/meingoethopia/models.py +++ b/web_dev/sas_web/meingoethopia/models.py @@ -6,11 +6,26 @@ class Betrieb(models.Model): name = models.CharField('Name', max_length=100) manager = models.CharField('Betriebsleiter', max_length=200) email = models.EmailField('Kontakt Email') + arbeitnehmerzahl = models.IntegerField('Anzahl Arbeitnehmer', + default=0, + help_text='Gesamtzahl aller angestellten ' + 'Arbeitnehmer/-innen inklusive Betriebsleiter/-innen') + arbeitnehmerzahl.short_description = 'Stellen' + raumforderung = models.FloatField('Raumanforderung', default=0, + help_text='In Zahlen ausgedrückter ' + 'Raumwunsch (halber Raum = 0,5)') + raum = models.IntegerField('Raum', default=102) + aufsicht = models.CharField('Aufsicht', max_length=100, default='keine') + kredit = models.IntegerField('Kreditwunsch', default=0) business_idea = models.TextField('Idee') ip_address = models.CharField('IP Adresse', max_length=50, blank=True) confirmed = models.BooleanField('Bestätigt', default=False) approved = models.BooleanField('Zugelassen', default=False) + def arbeitnehmerzahl_kurz(self): + return self.arbeitnehmerzahl + arbeitnehmerzahl_kurz.short_description = 'Stellen' + def __str__(self): return str(self.name) diff --git a/web_dev/sas_web/meingoethopia/templates/meingoethopia/betriebe_overview.html b/web_dev/sas_web/meingoethopia/templates/meingoethopia/betriebe_overview.html new file mode 100644 index 0000000..572d58f --- /dev/null +++ b/web_dev/sas_web/meingoethopia/templates/meingoethopia/betriebe_overview.html @@ -0,0 +1,36 @@ +{% extends "admin/base_site.html" %} + +{% block content %} + +

Arbeitnehmer

+ +

Insgesamt sind {{ arbeitnehmer_gesamt }} Schüler durch {{ betriebe.count }} Betriebe versorgt.

+ +

Räume

+ + + + + + + + {% for raum, data in raummap.items %} + + + + + + + {% endfor %} +
RaumnummerAnzahl an BetriebenTheoretische Belegung
{{ raum }}{{ data|get_item:"anzahl" }} + 1 %} color="red"{% endif %}> + {{ data|get_item:"belegung" }} + +
+ +
+ {% csrf_token %} + +
+ +{% endblock %} diff --git a/web_dev/sas_web/sas_web/urls.py b/web_dev/sas_web/sas_web/urls.py index e05ee5c..909a3fa 100644 --- a/web_dev/sas_web/sas_web/urls.py +++ b/web_dev/sas_web/sas_web/urls.py @@ -19,6 +19,10 @@ from django.conf import settings from .views import error_400, error_403, error_404, error_500 +admin.site.site_header = "Goethopia" +admin.site.site_title = "Goethopia" +admin.site.index_title = "Verwaltung" + urlpatterns = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += [ diff --git a/web_dev/sas_web/startpage/templates/startpage/index.html b/web_dev/sas_web/startpage/templates/startpage/index.html index 065f50b..d3faa19 100644 --- a/web_dev/sas_web/startpage/templates/startpage/index.html +++ b/web_dev/sas_web/startpage/templates/startpage/index.html @@ -9,22 +9,8 @@

Wichtiges

-

- Bitte gründet noch Betriebe: Formulare hängen im SMV-Schaukasten unter dem - Vertretungsplan. Ihr könnt auch schon - hier euren Betrieb anmelden. -
-
- Momentan beschließen die Ausschüsse über die Personalfrage, ihr werdet persönlich benachrichtigt werden, falls ihr einen Beamtenposten erhalten haben solltet. - - -

-

Ziele

- +

Nach den Pfingstferien könnt ihr euch in die Listen der Betriebe eintragen, um + euch dort als Arbeitnehmer/-innen zu bewerben.

Das Wahlergebnis

Die Bürger Goethopias haben gewählt. David Schwarz ist der neue Präsident und die Liberalen Sozialdemokraten werden die stärkste Partei im Parlament: