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

Implement simple AK to slide export

Create template for slides
Add view
Link view from status page
Update translations
parent 12efa24e
No related branches found
No related tags found
No related merge requests found
......@@ -16,7 +16,7 @@ from AKModel.availability.forms import AvailabilitiesFormMixin
from AKModel.availability.models import Availability
from AKModel.models import Event, AKOwner, AKCategory, AKTrack, AKTag, AKRequirement, AK, AKSlot, Room, AKOrgaMessage, \
ConstraintViolation
from AKModel.views import EventStatusView, AKCSVExportView, AKWikiExportView, AKMessageDeleteView
from AKModel.views import EventStatusView, AKCSVExportView, AKWikiExportView, AKMessageDeleteView, export_slides
@admin.register(Event)
......@@ -33,6 +33,7 @@ class EventAdmin(admin.ModelAdmin):
path('<slug:slug>/status/', self.admin_site.admin_view(EventStatusView.as_view()), name="event_status"),
path('<slug:event_slug>/ak-csv-export/', self.admin_site.admin_view(AKCSVExportView.as_view()), name="ak_csv_export"),
path('<slug:event_slug>/ak-wiki-export/', self.admin_site.admin_view(AKWikiExportView.as_view()), name="ak_wiki_export"),
path('<slug:event_slug>/ak-slide-export/', export_slides, name="ak_slide_export"),
path('<slug:slug>/delete-orga-messages/', self.admin_site.admin_view(AKMessageDeleteView.as_view()),
name="ak_delete_orga_messages"),
]
......
......@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-11-03 20:41+0000\n"
"POT-Creation-Date: 2021-01-30 13:57+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,28 +11,32 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: AKModel/admin.py:41 AKModel/admin.py:42
#: AKModel/admin.py:44 AKModel/admin.py:45
#: AKModel/templates/admin/AKModel/status.html:7
#: AKModel/templates/admin/ak_index.html:15
msgid "Status"
msgstr "Status"
#: AKModel/admin.py:120
#: AKModel/admin.py:123
msgid "Wish"
msgstr "AK-Wunsch"
#: AKModel/admin.py:126
#: AKModel/admin.py:129
msgid "Is wish"
msgstr "Ist ein Wunsch"
#: AKModel/admin.py:127
#: AKModel/admin.py:130
msgid "Is not a wish"
msgstr "Ist kein Wunsch"
#: AKModel/admin.py:154
#: AKModel/admin.py:157
msgid "Export to wiki syntax"
msgstr "In Wiki-Syntax exportieren"
#: AKModel/admin.py:253
msgid "AK Details"
msgstr "AK-Details"
#: AKModel/availability/forms.py:20 AKModel/availability/models.py:239
msgid "Availability"
msgstr "Verfügbarkeit"
......@@ -60,13 +64,13 @@ msgstr "Bitte Verfügbarkeiten eintragen!"
#: AKModel/availability/models.py:38 AKModel/models.py:47 AKModel/models.py:76
#: AKModel/models.py:128 AKModel/models.py:147 AKModel/models.py:179
#: AKModel/models.py:233 AKModel/models.py:292 AKModel/models.py:324
#: AKModel/models.py:410
#: AKModel/models.py:431
msgid "Event"
msgstr "Event"
#: AKModel/availability/models.py:39 AKModel/models.py:77 AKModel/models.py:129
#: AKModel/models.py:148 AKModel/models.py:180 AKModel/models.py:234
#: AKModel/models.py:293 AKModel/models.py:325 AKModel/models.py:411
#: AKModel/models.py:293 AKModel/models.py:325 AKModel/models.py:432
msgid "Associated event"
msgstr "Zugehöriges Event"
......@@ -79,7 +83,7 @@ msgid "Person whose availability this is"
msgstr "Person deren Verfügbarkeit hier abgebildet wird"
#: AKModel/availability/models.py:56 AKModel/models.py:296
#: AKModel/models.py:315 AKModel/models.py:419
#: AKModel/models.py:315 AKModel/models.py:440
msgid "Room"
msgstr "Raum"
......@@ -88,7 +92,7 @@ msgid "Room whose availability this is"
msgstr "Raum dessen Verfügbarkeit hier abgebildet wird"
#: AKModel/availability/models.py:65 AKModel/models.py:239
#: AKModel/models.py:314 AKModel/models.py:366
#: AKModel/models.py:314 AKModel/models.py:387
msgid "AK"
msgstr "AK"
......@@ -97,7 +101,7 @@ msgid "AK whose availability this is"
msgstr "Verfügbarkeiten"
#: AKModel/availability/models.py:74 AKModel/models.py:132
#: AKModel/models.py:425
#: AKModel/models.py:446
msgid "AK Category"
msgstr "AK-Kategorie"
......@@ -261,7 +265,7 @@ msgstr "Internet Link"
msgid "Link to Homepage"
msgstr "Link zu Homepage oder Webseite"
#: AKModel/models.py:80 AKModel/models.py:418
#: AKModel/models.py:80 AKModel/models.py:439
msgid "AK Owner"
msgstr "AK-Leitung"
......@@ -321,7 +325,7 @@ msgstr "AK-Tags"
msgid "Name of the Requirement"
msgstr "Name der Anforderung"
#: AKModel/models.py:183 AKModel/models.py:422
#: AKModel/models.py:183 AKModel/models.py:443
msgid "AK Requirement"
msgstr "AK-Anforderung"
......@@ -405,7 +409,7 @@ msgstr "AK präsentieren"
msgid "Present results of this AK"
msgstr "Die Ergebnisse dieses AKs vorstellen"
#: AKModel/models.py:218 AKModel/templates/admin/AKModel/status.html:83
#: AKModel/models.py:218 AKModel/templates/admin/AKModel/status.html:85
msgid "Requirements"
msgstr "Anforderungen"
......@@ -458,9 +462,9 @@ msgstr "Interessenszähler"
msgid "People who have indicated interest online"
msgstr "Anzahl Personen, die online Interesse bekundet haben"
#: AKModel/models.py:240 AKModel/models.py:413
#: AKModel/models.py:240 AKModel/models.py:434
#: AKModel/templates/admin/AKModel/status.html:49
#: AKModel/templates/admin/AKModel/status.html:56
#: AKModel/templates/admin/AKModel/status.html:56 AKModel/views.py:194
msgid "AKs"
msgstr "AKs"
......@@ -536,163 +540,168 @@ msgstr "Letzte Aktualisierung"
msgid "AK Slot"
msgstr "AK-Slot"
#: AKModel/models.py:331 AKModel/models.py:415
#: AKModel/models.py:331 AKModel/models.py:436
msgid "AK Slots"
msgstr "AK-Slot"
#: AKModel/models.py:345
#: AKModel/models.py:353 AKModel/models.py:362
msgid "Not scheduled yet"
msgstr "Noch nicht geplant"
#: AKModel/models.py:367
#: AKModel/models.py:388
#, fuzzy
#| msgid "Track the AK belongs to"
msgid "AK this message belongs to"
msgstr "Track zu dem der AK gehört"
#: AKModel/models.py:368
#: AKModel/models.py:389
msgid "Message text"
msgstr "Nachrichtentext"
#: AKModel/models.py:369
#: AKModel/models.py:390
msgid "Message to the organizers. This is not publicly visible."
msgstr ""
"Nachricht an die Organisator*innen. Diese ist nicht öffentlich sichtbar."
#: AKModel/models.py:373
#: AKModel/models.py:394
msgid "AK Orga Message"
msgstr "AK-Organachricht"
#: AKModel/models.py:374
#: AKModel/models.py:395
msgid "AK Orga Messages"
msgstr "AK-Organachrichten"
#: AKModel/models.py:383
#: AKModel/models.py:404
msgid "Constraint Violation"
msgstr "Constraintverletzung"
#: AKModel/models.py:384
#: AKModel/models.py:405
msgid "Constraint Violations"
msgstr "Constraintverletzungen"
#: AKModel/models.py:388
#: AKModel/models.py:409
msgid "Owner has two parallel slots"
msgstr "Leitung hat zwei Slots parallel"
#: AKModel/models.py:389
#: AKModel/models.py:410
msgid "AK Slot was scheduled outside the AK's availabilities"
msgstr "AK Slot wurde außerhalb der Verfügbarkeit des AKs platziert"
#: AKModel/models.py:390
#: AKModel/models.py:411
msgid "Room has two AK slots scheduled at the same time"
msgstr "Raum hat AK Slots gleichzeitig"
#: AKModel/models.py:391
#: AKModel/models.py:412
msgid "Room does not satisfy the requirement of the scheduled AK"
msgstr "Room erfüllt die Anforderungen des platzierten AKs nicht"
#: AKModel/models.py:392
#: AKModel/models.py:413
msgid "AK Slot is scheduled at the same time as an AK listed as a conflict"
msgstr "AK Slot wurde wurde zur gleichen Zeit wie ein Konflikt des AKs platziert"
msgstr ""
"AK Slot wurde wurde zur gleichen Zeit wie ein Konflikt des AKs platziert"
#: AKModel/models.py:393
#: AKModel/models.py:414
msgid "AK Slot is scheduled before an AK listed as a prerequisite"
msgstr "AK Slot wurde vor einem als Voraussetzung gelisteten AK platziert"
#: AKModel/models.py:395
msgid "AK Slot for AK with intention to submit a resolution is scheduled after "
#: AKModel/models.py:416
msgid ""
"AK Slot for AK with intention to submit a resolution is scheduled after "
"resolution deadline"
msgstr "AK Slot eines AKs mit Resoabsicht wurde nach der Resodeadline platziert"
msgstr ""
"AK Slot eines AKs mit Resoabsicht wurde nach der Resodeadline platziert"
#: AKModel/models.py:396
#: AKModel/models.py:417
msgid "AK Slot in a category is outside that categories availabilities"
msgstr "AK Slot wurde außerhalb der Verfügbarkeiten seiner Kategorie"
#: AKModel/models.py:397
#: AKModel/models.py:418
msgid "Two AK Slots for the same AK scheduled at the same time"
msgstr "Zwei AK Slots eines AKs wurden zur selben Zeit platziert"
#: AKModel/models.py:398
#: AKModel/models.py:419
msgid "AK Slot is scheduled in a room with less space than interest"
msgstr "AK Slot wurde in einem Raum mit weniger Plätzen als am AK Interessierten platziert"
msgstr ""
"AK Slot wurde in einem Raum mit weniger Plätzen als am AK Interessierten "
"platziert"
#: AKModel/models.py:399
#: AKModel/models.py:420
msgid "AK Slot is scheduled outside the event's availabilities"
msgstr "AK Slot wurde außerhalb der Verfügbarkeit des Events platziert"
#: AKModel/models.py:402
#: AKModel/models.py:423
msgid "Warning"
msgstr "Warnung"
#: AKModel/models.py:403
#: AKModel/models.py:424
msgid "Violation"
msgstr "Verletzung"
#: AKModel/models.py:405
#: AKModel/models.py:426
msgid "Type"
msgstr "Art"
#: AKModel/models.py:406
#: AKModel/models.py:427
msgid "Type of violation, i.e. what kind of constraint was violated"
msgstr "Art der Verletzung, gibt an welche Art Constraint verletzt wurde"
#: AKModel/models.py:407
#: AKModel/models.py:428
msgid "Level"
msgstr "Level"
#: AKModel/models.py:408
#: AKModel/models.py:429
msgid "Severity level of the violation"
msgstr "Schweregrad der Verletzung"
#: AKModel/models.py:414
#: AKModel/models.py:435
msgid "AK(s) belonging to this constraint"
msgstr "AK(s), die zu diesem Constraint gehören"
#: AKModel/models.py:416
#: AKModel/models.py:437
msgid "AK Slot(s) belonging to this constraint"
msgstr "AK Slot(s), die zu diesem Constraint gehören"
#: AKModel/models.py:418
#: AKModel/models.py:439
msgid "AK Owner belonging to this constraint"
msgstr "AK Leitung(en), die zu diesem Constraint gehören"
#: AKModel/models.py:420
#: AKModel/models.py:441
msgid "Room belonging to this constraint"
msgstr "Raum, der zu diesem Constraint gehört"
#: AKModel/models.py:423
#: AKModel/models.py:444
msgid "AK Requirement belonging to this constraint"
msgstr "AK Anforderung, die zu diesem Constraint gehört"
#: AKModel/models.py:425
#: AKModel/models.py:446
msgid "AK Category belonging to this constraint"
msgstr "AK Kategorie, di zu diesem Constraint gehört"
#: AKModel/models.py:427
#: AKModel/models.py:448
msgid "Comment"
msgstr "Kommentar"
#: AKModel/models.py:427
#: AKModel/models.py:448
msgid "Comment or further details for this violation"
msgstr "Kommentar oder weitere Details zu dieser Vereletzung"
#: AKModel/models.py:430
#: AKModel/models.py:451
msgid "Timestamp"
msgstr "Timestamp"
#: AKModel/models.py:430
#: AKModel/models.py:451
msgid "Time of creation"
msgstr "Zeitpunkt der ERstellung"
#: AKModel/models.py:431
#: AKModel/models.py:452
msgid "Manually Resolved"
msgstr "Manuell behoben"
#: AKModel/models.py:432
#: AKModel/models.py:453
msgid "Mark this violation manually as resolved"
msgstr "Markiere diese Verletzung manuell als behoben"
#: AKModel/models.py:454
#: AKModel/models.py:475
msgid "Details"
msgstr "Details"
......@@ -790,19 +799,23 @@ msgstr "AKs als CSV exportieren"
msgid "Export AKs for Wiki"
msgstr "AKs im Wiki-Format exportieren"
#: AKModel/templates/admin/AKModel/status.html:85
#: AKModel/templates/admin/AKModel/status.html:82
msgid "Export AK Slides"
msgstr "AK-Folien exportieren"
#: AKModel/templates/admin/AKModel/status.html:87
msgid "No requirements yet"
msgstr "Bisher keine Anforderungen"
#: AKModel/templates/admin/AKModel/status.html:98
#: AKModel/templates/admin/AKModel/status.html:100
msgid "Add Requirement"
msgstr "Anforderungen hinzufügen"
#: AKModel/templates/admin/AKModel/status.html:101
#: AKModel/templates/admin/AKModel/status.html:103
msgid "Messages"
msgstr "Nachrichten"
#: AKModel/templates/admin/AKModel/status.html:103
#: AKModel/templates/admin/AKModel/status.html:105
msgid "Delete all messages"
msgstr "Alle Nachrichten löschen"
......@@ -810,22 +823,26 @@ msgstr "Alle Nachrichten löschen"
msgid "Active Events"
msgstr "Aktive Events"
#: AKModel/views.py:130
#: AKModel/views.py:133
msgid "Event Status"
msgstr "Eventstatus"
#: AKModel/views.py:144
#: AKModel/views.py:147
msgid "AK CSV Export"
msgstr "AK-CSV-Export"
#: AKModel/views.py:158
#: AKModel/views.py:161
msgid "AK Wiki Export"
msgstr "AK-Wiki-Export"
#: AKModel/views.py:178
#: AKModel/views.py:181
msgid "AK Orga Messages successfully deleted"
msgstr "AK-Organachrichten erfolgreich gelöscht"
#: AKModel/views.py:195
msgid "Wishes"
msgstr "Wünsche"
#~ msgid "Confirm"
#~ msgstr "Bestätigen"
......
\documentclass{beamer}
\usetheme{metropolis}
% \usetheme[numbering=fraction, progressbar=foot]{metropolis} TODO Activate when total number of frames bug is resolved
\usepackage[utf8]{inputenc}
\usepackage{fontawesome5}
\title{ {{- title -}} }
\subtitle{ {{- subtitle -}} }
\date{\today}
\begin{document}
\begin{frame}
\maketitle
\end{frame}
{%for category in categories %}
\section{ {{- category.name | latex_escape_utf8 -}} }
{% for ak in category.ak_set.all() %}
{% if not ak.wish %}
%\setbeamertemplate{frame footer}{}
\begin{frame}[shrink=15]
\frametitle{ {{- ak.name | latex_escape_utf8 -}} }
\vspace{1em}
\faUser~ {{ ak.owners_list | latex_escape_utf8 }}
\faClock~ {{ak.durations_list}}
{% if ak.reso %}
\faScroll
{% endif %}
{{ ak.description | latex_escape_utf8 }}
\end{frame}
{% endif %}
{% endfor %}
{% endfor %}
\section{ {{- wish_category_title -}} }
{% for ak in wishes %}
%\setbeamertemplate{frame footer}{}
\begin{frame}[shrink=15]
\frametitle{ {{- ak.name | latex_escape_utf8 -}} }
\vspace{1em}
\faFilter~ {{ ak.category.name | latex_escape_utf8 }}
{{ ak.description | latex_escape_utf8 }}
\end{frame}
{% endfor %}
\end{document}
......@@ -78,6 +78,8 @@
href="{% url 'admin:ak_csv_export' event_slug=event.slug %}">{% trans "Export AKs as CSV" %}</a>
<a class="btn btn-success"
href="{% url 'admin:ak_wiki_export' event_slug=event.slug %}">{% trans "Export AKs for Wiki" %}</a>
<a class="btn btn-success"
href="{% url 'admin:ak_slide_export' event_slug=event.slug %}">{% trans "Export AK Slides" %}</a>
{% endif %}
<h3 class="block-header">{% trans "Requirements" %}</h3>
......
from django.contrib import admin, messages
from django.contrib.admin.views.decorators import staff_member_required
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404
from django.urls import reverse_lazy
......@@ -6,6 +7,8 @@ from django.utils.translation import gettext_lazy as _
from django.views.generic import TemplateView, DetailView, ListView, DeleteView
from rest_framework import viewsets, permissions, mixins
from django_tex.shortcuts import render_to_pdf
from AKModel.models import Event, AK, AKSlot, Room, AKTrack, AKCategory, AKOwner, AKOrgaMessage
from AKModel.serializers import AKSerializer, AKSlotSerializer, RoomSerializer, AKTrackSerializer, AKCategorySerializer, \
......@@ -177,3 +180,20 @@ class AKMessageDeleteView(AdminViewMixin, DeleteView):
self.get_orga_messages_for_event(self.get_object()).delete()
messages.add_message(self.request, messages.SUCCESS, _("AK Orga Messages successfully deleted"))
return HttpResponseRedirect(reverse_lazy('admin:event_status', kwargs={'slug': self.get_object().slug}))
@staff_member_required
def export_slides(request, event_slug):
template_name = 'AKModel/export/slides.tex'
event = get_object_or_404(Event, slug=event_slug)
context = {
'title': event.name,
'categories': event.akcategory_set.all(),
'subtitle': _("AKs"),
'wish_category_title': _("Wishes"),
"wishes": [ak for ak in event.ak_set.order_by('category') if ak.wish]
}
return render_to_pdf(request, template_name, context, filename='slides.pdf')
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment