| @@ -1,6 +1,14 @@ | |||||
| from django.contrib import admin | from django.contrib import admin | ||||
| from .models import Betrieb, Partei, PresidentCandidate, Question | from .models import Betrieb, Partei, PresidentCandidate, Question | ||||
| from startpage.models import Banned | 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): | 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" | 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. | # Register your models here. | ||||
| class BetriebAdmin(admin.ModelAdmin): | 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): | class ParteiAdmin(admin.ModelAdmin): | ||||
| @@ -6,11 +6,26 @@ 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') | ||||
| 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') | business_idea = models.TextField('Idee') | ||||
| 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) | ||||
| def arbeitnehmerzahl_kurz(self): | |||||
| return self.arbeitnehmerzahl | |||||
| arbeitnehmerzahl_kurz.short_description = 'Stellen' | |||||
| def __str__(self): | def __str__(self): | ||||
| return str(self.name) | return str(self.name) | ||||
| @@ -0,0 +1,36 @@ | |||||
| {% extends "admin/base_site.html" %} | |||||
| {% block content %} | |||||
| <h2>Arbeitnehmer</h2> | |||||
| <p>Insgesamt sind {{ arbeitnehmer_gesamt }} Schüler durch {{ betriebe.count }} Betriebe versorgt.</p> | |||||
| <h2>Räume</h2> | |||||
| <table> | |||||
| <tr> | |||||
| <th>Raumnummer</th> | |||||
| <th>Anzahl an Betrieben</th> | |||||
| <th>Theoretische Belegung</th> | |||||
| </tr> | |||||
| {% for raum, data in raummap.items %} | |||||
| <tr> | |||||
| <td>{{ raum }}</td> | |||||
| <td>{{ data|get_item:"anzahl" }}</td> | |||||
| <td> | |||||
| <font {% if data|get_item:"belegung" > 1 %} color="red"{% endif %}> | |||||
| {{ data|get_item:"belegung" }} | |||||
| </font> | |||||
| </td> | |||||
| </tr> | |||||
| {% endfor %} | |||||
| </table> | |||||
| <form action="" method="post"> | |||||
| {% csrf_token %} | |||||
| <input type="submit" value="Zurück"> | |||||
| </form> | |||||
| {% endblock %} | |||||
| @@ -19,6 +19,10 @@ from django.conf import settings | |||||
| from .views import error_400, error_403, error_404, error_500 | 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 = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) | ||||
| urlpatterns += [ | urlpatterns += [ | ||||
| @@ -9,22 +9,8 @@ | |||||
| <!--<ul class="dates_ul">--> | <!--<ul class="dates_ul">--> | ||||
| <!--</ul>--> | <!--</ul>--> | ||||
| <h1 class="red" id="termine">Wichtiges</h1> | <h1 class="red" id="termine">Wichtiges</h1> | ||||
| <p> | |||||
| <b>Bitte gründet noch Betriebe: Formulare hängen im SMV-Schaukasten unter dem | |||||
| Vertretungsplan. Ihr könnt auch schon | |||||
| <a href="{% url "meingoethopia:index" %}">hier</a> euren Betrieb anmelden.</b> | |||||
| <br> | |||||
| <br> | |||||
| Momentan beschließen die Ausschüsse über die Personalfrage, ihr werdet persönlich benachrichtigt werden, falls ihr einen Beamtenposten erhalten haben solltet. | |||||
| </p> | |||||
| <h1 class="red" id="ziele">Ziele</h1> | |||||
| <ul> | |||||
| <li>Raumplanung entwerfen</li> | |||||
| <li>Elektronik Umgang damit Organisieren: Ort / Zeit</li> | |||||
| <li>Liste der Polizisten und Beamten aushängen</li> | |||||
| </ul> | |||||
| <p>Nach den Pfingstferien könnt ihr euch in die Listen der Betriebe eintragen, um | |||||
| euch dort als Arbeitnehmer/-innen zu bewerben.</p> | |||||
| <h1 class="red" id="wahlergebnis">Das Wahlergebnis</h1> | <h1 class="red" id="wahlergebnis">Das Wahlergebnis</h1> | ||||
| Die Bürger Goethopias haben gewählt. <b>David Schwarz</b> ist der neue Präsident und die <b>Liberalen Sozialdemokraten</b> werden die stärkste Partei im Parlament: | Die Bürger Goethopias haben gewählt. <b>David Schwarz</b> ist der neue Präsident und die <b>Liberalen Sozialdemokraten</b> werden die stärkste Partei im Parlament: | ||||
| <br> | <br> | ||||