Skip to content
Snippets Groups Projects
Commit 1d87b8db authored by Benjamin Hättasch's avatar Benjamin Hättasch
Browse files

Introduce and use simple event status page (admin)

Attach status view to event model admin
Link from admin start page
Customize admin interface headers
Update translations
parent aca81a1f
No related branches found
No related tags found
No related merge requests found
......@@ -2,22 +2,37 @@ from django.contrib import admin
from django.contrib.admin import SimpleListFilter
from django.db.models import Count, F
from django.shortcuts import render
from django.urls import path, reverse_lazy
from django.utils import timezone
from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _
from simple_history.admin import SimpleHistoryAdmin
from AKModel.availability.models import Availability
from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKTag, AKRequirement, AK, AKSlot, Room
from AKModel.views import EventStatusView
@admin.register(Event)
class EventAdmin(admin.ModelAdmin):
model = Event
list_display = ['name', 'place', 'start', 'end', 'active']
list_display = ['name', 'status_url', 'place', 'start', 'end', 'active']
list_filter = ['active']
list_editable = ['active']
ordering = ['-start']
def get_urls(self):
urls = super().get_urls()
my_urls = [
path('<slug:slug>/status/', self.admin_site.admin_view(EventStatusView.as_view()), name="event_status")
]
return my_urls + urls
def status_url(self, obj):
return format_html("<a href='{url}'>{text}</a>",
url=reverse_lazy('admin:event_status', kwargs={'slug': obj.slug}), text=_("Status"))
status_url.short_description = text=_("Status")
def get_form(self, request, obj=None, change=False, **kwargs):
# Use timezone of event
if obj is not None and obj.timezone:
......
......@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-14 22:48+0000\n"
"POT-Creation-Date: 2020-05-18 09:42+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -11,19 +11,24 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: AKModel/admin.py:97
#: AKModel/admin.py:33 AKModel/admin.py:34
#: AKModel/templates/admin/AKModel/status.html:6
msgid "Status"
msgstr "Status"
#: AKModel/admin.py:112
msgid "Wish"
msgstr "AK-Wunsch"
#: AKModel/admin.py:103
#: AKModel/admin.py:118
msgid "Is wish"
msgstr "Ist ein Wunsch"
#: AKModel/admin.py:104
#: AKModel/admin.py:119
msgid "Is not a wish"
msgstr "Ist kein Wunsch"
#: AKModel/admin.py:131
#: AKModel/admin.py:146
msgid "Export to wiki syntax"
msgstr "In Wiki-Syntax exportieren"
......@@ -33,7 +38,9 @@ msgstr "Verfügbarkeit"
#: AKModel/availability/forms.py:22
msgid "Please click and drag to mark the availability during the event."
msgstr "Bitte klicken und ziehen um die Verfügbarkeiten während des Events zu markieren."
msgstr ""
"Bitte klicken und ziehen um die Verfügbarkeiten während des Events zu "
"markieren."
#: AKModel/availability/forms.py:86
msgid "The submitted availability does not comply with the required format."
......@@ -410,7 +417,8 @@ msgstr "Interessenszähler"
msgid "People who have indicated interest online"
msgstr "Anzahl Personen, die online Interesse bekundet haben"
#: AKModel/models.py:232
#: AKModel/models.py:232 AKModel/templates/admin/AKModel/status.html:46
#: AKModel/templates/admin/AKModel/status.html:53
msgid "AKs"
msgstr "AKs"
......@@ -442,7 +450,7 @@ msgstr "Eigenschaften"
msgid "AK requirements fulfilled by the room"
msgstr "AK Anforderungen, die dieser Raum erfüllt"
#: AKModel/models.py:272
#: AKModel/models.py:272 AKModel/templates/admin/AKModel/status.html:30
msgid "Rooms"
msgstr "Räume"
......@@ -486,6 +494,70 @@ msgstr "AK Slot"
msgid "Not scheduled yet"
msgstr "Noch nicht geplant"
#: AKModel/site.py:10
msgid "Administration"
msgstr "Verwaltung"
#: AKModel/templates/AKModel/user.html:31
msgid "Hello"
msgstr "Hallo"
#: AKModel/templates/AKModel/user.html:34
msgid "Go to backend"
msgstr "Verwaltungsseite öffnen"
#: AKModel/templates/AKModel/user.html:37
msgid "Please wait for an administrator to confirm your account"
msgstr "Bitte warten, bis ein Administrator den Account bestätigt hat"
#: AKModel/templates/AKModel/user.html:40
msgid "Logout"
msgstr "Ausloggen"
#: AKModel/templates/admin/AKModel/status.html:13
#, fuzzy
#| msgid "AK Categories"
msgid "Categories"
msgstr "AK Kategorien"
#: AKModel/templates/admin/AKModel/status.html:15
#, fuzzy
#| msgid "No categories yet"
msgid "No categroies yet"
msgstr "Bisher keine Kategorien"
#: AKModel/templates/admin/AKModel/status.html:28
msgid "Add category"
msgstr "Kategorie hinzufügen"
#: AKModel/templates/admin/AKModel/status.html:32
msgid "No rooms yet"
msgstr "Bisher keine Räume"
#: AKModel/templates/admin/AKModel/status.html:44
msgid "Add Room"
msgstr "Raum hinzufügen"
#: AKModel/templates/admin/AKModel/status.html:48
msgid "No AKs yet"
msgstr "Bisher keine AKs"
#: AKModel/templates/admin/AKModel/status.html:56
msgid "Slots"
msgstr "Slots"
#: AKModel/templates/admin/AKModel/status.html:59
msgid "Unscheduled Slots"
msgstr "Ungeplante Slots"
#: AKModel/templates/admin/ak_index.html:7
msgid "Active Events"
msgstr "Aktive Events"
#: AKModel/views.py:124
msgid "Event Status"
msgstr "Eventstatus"
#~ msgid "Notes to organizers"
#~ msgstr "Notizen an die Organisator*innen"
......
from django.contrib.admin import AdminSite
from django.utils.translation import gettext_lazy as _
from AKModel.models import Event
class AKAdminSite(AdminSite):
index_template = "admin/ak_index.html"
site_header = f"AKPlanning - {_('Administration')}"
index_title = _('Administration')
def get_urls(self):
from django.urls import path
......
{% extends "admin_base.html" %}
{% load i18n %}
{% load tz %}
{% block title %}{% trans "Status" %}: {{event}}{% endblock %}
{% block content %}
<h2><a href="{% url 'admin:AKModel_event_change' event.pk %}">{{event}}</a></h2>
{% timezone event.timezone %}
<h5>{{ event.start }} - {{ event.end }}</h5>
<h3 class="block-header">{% trans "Categories" %}</h3>
{% if event.akcategory_set.count == 0 %}
<p class="text-danger">{% trans "No categroies yet" %}</p>
{% else %}
<p>
{{ event.akcategory_set.count }}:
{% for category in event.akcategory_set.all %}
{% if forloop.counter0 > 0 %}
&middot;
{% endif %}
<a href="{% url 'admin:AKModel_akcategory_change' category.pk %}">{{ category }}</a>
({{ category.ak_set.count }})
{% endfor %}
</p>
{% endif %}
<a class="btn btn-success" href="{% url 'admin:AKModel_akcategory_add' %}">{% trans "Add category" %}</a>
<h3 class="block-header">{% trans "Rooms" %}</h3>
{% if event.room_set.count == 0 %}
<p class="text-danger">{% trans "No rooms yet" %}</p>
{% else %}
<p>
{{ event.room_set.count }}:
{% for room in event.room_set.all %}
{% if forloop.counter0 > 0 %}
&middot;
{% endif %}
<a href="{% url 'admin:AKModel_room_change' room.pk %}">{{ room }}</a>
{% endfor %}
</p>
{% endif %}
<a class="btn btn-success" href="{% url 'admin:AKModel_room_add' %}">{% trans "Add Room" %}</a>
<h3 class="block-header">{% trans "AKs" %}</h3>
{% if event.ak_set.count == 0 %}
<p class="text-danger">{% trans "No AKs yet" %}</p>
{% else %}
<table>
<tbody>
<tr>
<td>{% trans "AKs" %}</td><td>{{ event.ak_set.count }}</td>
</tr>
<tr>
<td>{% trans "Slots" %}</td><td>{{ event.akslot_set.count }}</td>
</tr>
<tr>
<td>{% trans "Unscheduled Slots" %}</td><td>{{ unscheduled_slots_count }}</td>
</tr>
</tbody>
</table>
{% endif %}
{% endtimezone %}
{% endblock %}
......@@ -9,7 +9,7 @@
<ul>
{% for event in active_events %}
<li>
{{ event }}
<a href="{% url 'admin:event_status' slug=event.slug %}">{{ event }}</a>
({{ event.start|timezone:event.timezone|date:"d.m.y"}} -
{{ event.end|timezone:event.timezone|date:"d.m.y"}})
</li>
......
from django.contrib import admin
from django.shortcuts import get_object_or_404
from django.views.generic import TemplateView
from django.urls import reverse_lazy
from django.utils.translation import gettext_lazy as _
from django.views.generic import TemplateView, DetailView
from rest_framework import viewsets, permissions, mixins
from AKModel.models import Event, AK, AKSlot, Room, AKTrack, AKCategory, AKOwner
......@@ -108,3 +111,16 @@ class AKSlotViewSet(EventSlugMixin, mixins.RetrieveModelMixin, mixins.ListModelM
class UserView(TemplateView):
template_name = "AKModel/user.html"
class EventStatusView(AdminViewMixin, DetailView):
template_name = "admin/AKModel/status.html"
model = Event
context_object_name = "event"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["site_url"] = reverse_lazy("dashboard:dashboard_event", kwargs={'slug': context["event"].slug})
context["title"] = _("Event Status")
context["unscheduled_slots_count"] = context["event"].akslot_set.filter(start=None).count
return context
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-12 22:53+0000\n"
"POT-Creation-Date: 2020-05-18 09:42+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -17,10 +17,10 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: AKPlanning/settings.py:129
#: AKPlanning/settings.py:130
msgid "German"
msgstr "Deutsch"
#: AKPlanning/settings.py:130
#: AKPlanning/settings.py:131
msgid "English"
msgstr "Englisch"
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-14 22:48+0000\n"
"POT-Creation-Date: 2020-05-18 09:42+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -38,7 +38,7 @@ msgstr ""
"Mindestens eine geplante Dauer (in Stunden) angeben. Wenn der AK mehrere "
"Slots haben soll, mehrere Zeilen verwenden"
#: AKSubmission/templates/AKSubmission/ak_detail.html:10
#: AKSubmission/templates/AKSubmission/ak_detail.html:11
#: AKSubmission/templates/AKSubmission/ak_edit.html:8
#: AKSubmission/templates/AKSubmission/ak_history.html:11
#: AKSubmission/templates/AKSubmission/ak_overview.html:8
......@@ -46,6 +46,7 @@ msgstr ""
#: AKSubmission/templates/AKSubmission/akowner_create_update.html:7
#: AKSubmission/templates/AKSubmission/akslot_add_update.html:7
#: AKSubmission/templates/AKSubmission/akslot_delete.html:7
#: AKSubmission/templates/AKSubmission/submission_not_configured.html:7
#: AKSubmission/templates/AKSubmission/submission_overview.html:7
#: AKSubmission/templates/AKSubmission/submission_overview.html:38
#: AKSubmission/templates/AKSubmission/submit_new.html:8
......@@ -53,19 +54,21 @@ msgstr ""
msgid "AKs"
msgstr "AKs"
#: AKSubmission/templates/AKSubmission/ak_detail.html:10
#: AKSubmission/templates/AKSubmission/ak_detail.html:11
#: AKSubmission/templates/AKSubmission/ak_history.html:11
#: AKSubmission/templates/AKSubmission/akslot_delete.html:31
msgid "AK"
msgstr "AK"
#: AKSubmission/templates/AKSubmission/ak_detail.html:15
#: AKSubmission/templates/AKSubmission/ak_detail.html:16
#: AKSubmission/templates/AKSubmission/ak_edit.html:13
#: AKSubmission/templates/AKSubmission/ak_history.html:16
#: AKSubmission/templates/AKSubmission/ak_overview.html:22
#: AKSubmission/templates/AKSubmission/akowner_create_update.html:12
#: AKSubmission/templates/AKSubmission/akslot_add_update.html:12
#: AKSubmission/templates/AKSubmission/akslot_delete.html:12
#: AKSubmission/templates/AKSubmission/submission_not_configured.html:7
#: AKSubmission/templates/AKSubmission/submission_not_configured.html:11
#: AKSubmission/templates/AKSubmission/submission_overview.html:7
#: AKSubmission/templates/AKSubmission/submission_overview.html:34
#: AKSubmission/templates/AKSubmission/submit_new.html:25
......@@ -73,110 +76,110 @@ msgstr "AK"
msgid "AK Submission"
msgstr "AK-Eintragung"
#: AKSubmission/templates/AKSubmission/ak_detail.html:30
#: AKSubmission/templates/AKSubmission/ak_detail.html:31
msgid "Interest"
msgstr "Interesse"
#: AKSubmission/templates/AKSubmission/ak_detail.html:33
#: AKSubmission/templates/AKSubmission/ak_detail.html:34
#, fuzzy
#| msgid "Interest"
msgid "Show Interest"
msgstr "Interesse"
#: AKSubmission/templates/AKSubmission/ak_detail.html:39
#: AKSubmission/templates/AKSubmission/ak_detail.html:40
#: AKSubmission/templates/AKSubmission/ak_table.html:48
msgid "Open external link"
msgstr "Externen Link öffnen"
#: AKSubmission/templates/AKSubmission/ak_detail.html:44
#: AKSubmission/templates/AKSubmission/ak_detail.html:45
#: AKSubmission/templates/AKSubmission/ak_history.html:19
#: AKSubmission/templates/AKSubmission/ak_history.html:31
msgid "History"
msgstr "Versionsgeschichte"
#: AKSubmission/templates/AKSubmission/ak_detail.html:47
#: AKSubmission/templates/AKSubmission/ak_detail.html:146
#: AKSubmission/templates/AKSubmission/ak_detail.html:48
#: AKSubmission/templates/AKSubmission/ak_detail.html:147
#: AKSubmission/templates/AKSubmission/ak_edit.html:16
#: AKSubmission/templates/AKSubmission/ak_table.html:53
msgid "Edit"
msgstr "Bearbeiten"
#: AKSubmission/templates/AKSubmission/ak_detail.html:52
#: AKSubmission/templates/AKSubmission/ak_detail.html:53
#: AKSubmission/templates/AKSubmission/ak_history.html:31
#: AKSubmission/templates/AKSubmission/ak_table.html:35
msgid "AK Wish"
msgstr "AK-Wunsch"
#: AKSubmission/templates/AKSubmission/ak_detail.html:56
#: AKSubmission/templates/AKSubmission/ak_detail.html:57
#: AKSubmission/templates/AKSubmission/ak_table.html:10
msgid "Who?"
msgstr "Wer?"
#: AKSubmission/templates/AKSubmission/ak_detail.html:62
#: AKSubmission/templates/AKSubmission/ak_detail.html:63
#: AKSubmission/templates/AKSubmission/ak_history.html:36
#: AKSubmission/templates/AKSubmission/ak_table.html:11
msgid "Category"
msgstr "Kategorie"
#: AKSubmission/templates/AKSubmission/ak_detail.html:68
#: AKSubmission/templates/AKSubmission/ak_detail.html:69
msgid "Present this AK"
msgstr "Diesen AK vorstellen"
#: AKSubmission/templates/AKSubmission/ak_detail.html:72
#: AKSubmission/templates/AKSubmission/ak_detail.html:73
#: AKSubmission/templates/AKSubmission/ak_table.html:12
msgid "Tags"
msgstr "Tags"
#: AKSubmission/templates/AKSubmission/ak_detail.html:78
#: AKSubmission/templates/AKSubmission/ak_detail.html:79
msgid "Reso?"
msgstr "Reso?"
#: AKSubmission/templates/AKSubmission/ak_detail.html:85
#: AKSubmission/templates/AKSubmission/ak_detail.html:86
msgid "Requirements"
msgstr "Anforderungen"
#: AKSubmission/templates/AKSubmission/ak_detail.html:98
#: AKSubmission/templates/AKSubmission/ak_detail.html:99
msgid "Conflicting AKs"
msgstr "AK Konflikte"
#: AKSubmission/templates/AKSubmission/ak_detail.html:106
#: AKSubmission/templates/AKSubmission/ak_detail.html:107
msgid "Prerequisite AKs"
msgstr "AK Voraussetzungen"
#: AKSubmission/templates/AKSubmission/ak_detail.html:114
#: AKSubmission/templates/AKSubmission/ak_detail.html:115
msgid "Notes"
msgstr "Notizen"
#: AKSubmission/templates/AKSubmission/ak_detail.html:131
#: AKSubmission/templates/AKSubmission/ak_detail.html:132
msgid "When?"
msgstr "Wann?"
#: AKSubmission/templates/AKSubmission/ak_detail.html:132
#: AKSubmission/templates/AKSubmission/ak_detail.html:133
#: AKSubmission/templates/AKSubmission/akslot_delete.html:35
msgid "Duration"
msgstr "Dauer"
#: AKSubmission/templates/AKSubmission/ak_detail.html:133
#: AKSubmission/templates/AKSubmission/ak_detail.html:134
msgid "Room"
msgstr "Raum"
#: AKSubmission/templates/AKSubmission/ak_detail.html:149
#: AKSubmission/templates/AKSubmission/ak_detail.html:150
msgid "Delete"
msgstr "Löschen"
#: AKSubmission/templates/AKSubmission/ak_detail.html:161
#: AKSubmission/templates/AKSubmission/ak_detail.html:162
msgid "Add another slot"
msgstr "Einen neuen AK-Slot hinzufügen"
#: AKSubmission/templates/AKSubmission/ak_detail.html:165
#: AKSubmission/templates/AKSubmission/ak_detail.html:166
msgid "Possible Times"
msgstr "Mögliche Zeiten"
#: AKSubmission/templates/AKSubmission/ak_detail.html:169
#: AKSubmission/templates/AKSubmission/ak_detail.html:170
msgid "Start"
msgstr "Start"
#: AKSubmission/templates/AKSubmission/ak_detail.html:170
#: AKSubmission/templates/AKSubmission/ak_detail.html:171
msgid "End"
msgstr "Ende"
......@@ -212,7 +215,7 @@ msgstr "Diesen AK vorstellen"
msgid "Reso"
msgstr "Reso"
#: AKSubmission/templates/AKSubmission/ak_list.html:6 AKSubmission/views.py:30
#: AKSubmission/templates/AKSubmission/ak_list.html:6 AKSubmission/views.py:34
msgid "All AKs"
msgstr "Alle AKs"
......@@ -277,6 +280,12 @@ msgstr "Bestätigen"
msgid "Write to organizers of this event for questions and comments"
msgstr "Fragen oder Kommentare? Schreib den Orgas dieses Events eine Mail"
#: AKSubmission/templates/AKSubmission/submission_not_configured.html:20
msgid ""
"System is not yet configured for AK submission and listing. Please try again "
"later."
msgstr "Das System ist bisher nicht für Eintragen und Anzeige von AKs konfiguriert. Bitte versuche es später wieder."
#: AKSubmission/templates/AKSubmission/submission_overview.html:42
msgid ""
"On this page you can see a list of current AKs, change them and add new ones."
......@@ -320,57 +329,57 @@ msgstr ""
msgid "Submit"
msgstr "Eintragen"
#: AKSubmission/views.py:50
#: AKSubmission/views.py:65
msgid "Wishes"
msgstr "Wünsche"
#: AKSubmission/views.py:50
#: AKSubmission/views.py:65
msgid "AKs one would like to have"
msgstr ""
"AKs die sich gewünscht wurden, aber bei denen noch nicht klar ist, wer sie "
"macht. Falls du dir das vorstellen kannst, trag dich einfach ein"
#: AKSubmission/views.py:66
#: AKSubmission/views.py:81
msgid "Currently planned AKs"
msgstr "Aktuell geplante AKs"
#: AKSubmission/views.py:141
#: AKSubmission/views.py:157
msgid "Event inactive. Cannot create or update."
msgstr "Event inaktiv. Hinzufügen/Bearbeiten nicht möglich."
#: AKSubmission/views.py:157
#: AKSubmission/views.py:173
msgid "AK successfully created"
msgstr "AK erfolgreich angelegt"
#: AKSubmission/views.py:215
#: AKSubmission/views.py:231
msgid "AK successfully updated"
msgstr "AK erfolgreich aktualisiert"
#: AKSubmission/views.py:293
#: AKSubmission/views.py:309
msgid "Person Info successfully updated"
msgstr "Personen-Info erfolgreich aktualisiert"
#: AKSubmission/views.py:313
#: AKSubmission/views.py:329
msgid "No user selected"
msgstr "Keine Person ausgewählt"
#: AKSubmission/views.py:339
#: AKSubmission/views.py:355
msgid "AK Slot successfully added"
msgstr "AK-Slot erfolgreich angelegt"
#: AKSubmission/views.py:353
#: AKSubmission/views.py:369
msgid "You cannot edit a slot that has already been scheduled"
msgstr "Bereits geplante AK-Slots können nicht mehr bearbeitet werden"
#: AKSubmission/views.py:363
#: AKSubmission/views.py:379
msgid "AK Slot successfully updated"
msgstr "AK-Slot erfolgreich aktualisiert"
#: AKSubmission/views.py:376
#: AKSubmission/views.py:392
msgid "You cannot delete a slot that has already been scheduled"
msgstr "Bereits geplante AK-Slots können nicht mehr gelöscht werden"
#: AKSubmission/views.py:386
#: AKSubmission/views.py:402
msgid "AK Slot successfully deleted"
msgstr "AK-Slot erfolgreich angelegt"
......
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-05-10 16:22+0000\n"
"POT-Creation-Date: 2020-05-18 09:42+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
......@@ -18,10 +18,10 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#: templates/base.html:76
#: templates/base.html:78
msgid "Impress"
msgstr "Impressum"
#: templates/base.html:79
#: templates/base.html:81
msgid "This software is open source"
msgstr "Diese Software ist Open Source"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment