diff --git a/AKModel/admin.py b/AKModel/admin.py index 9427710f3894d17dcc22163efcd003886f771dc7..16fe017f6a083ce54d658b30842d9ef0558fb497 100644 --- a/AKModel/admin.py +++ b/AKModel/admin.py @@ -1,8 +1,8 @@ +from django import forms from django.apps import apps from django.contrib import admin from django.contrib.admin import SimpleListFilter from django.db.models import Count, F -from django import forms from django.shortcuts import render, redirect from django.urls import path, reverse_lazy from django.utils import timezone @@ -16,9 +16,11 @@ 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, AKRequirementOverview, \ +from AKModel.views import EventStatusView, AKCSVExportView, AKWikiExportView, AKMessageDeleteView, \ + AKRequirementOverview, \ NewEventWizardStartView, NewEventWizardSettingsView, NewEventWizardPrepareImportView, NewEventWizardFinishView, \ NewEventWizardImportView, NewEventWizardActivateView +from AKModel.views import export_slides @admin.register(Event) @@ -56,6 +58,7 @@ class EventAdmin(admin.ModelAdmin): path('<slug:event_slug>/requirements/', self.admin_site.admin_view(AKRequirementOverview.as_view()), name="event_requirement_overview"), 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"), ] diff --git a/AKModel/locale/de_DE/LC_MESSAGES/django.po b/AKModel/locale/de_DE/LC_MESSAGES/django.po index 0f5209a90da627faff8fb5580cca31585a64b972..ae97708347d363a5f8d2c4e1e5f1c9d19025324e 100644 --- a/AKModel/locale/de_DE/LC_MESSAGES/django.po +++ b/AKModel/locale/de_DE/LC_MESSAGES/django.po @@ -485,7 +485,7 @@ msgstr "Anzahl Personen, die online Interesse bekundet haben" #: AKModel/models.py:240 AKModel/models.py:440 #: 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" @@ -898,6 +898,10 @@ msgstr "AKs als CSV exportieren" msgid "Export AKs for Wiki" msgstr "AKs im Wiki-Format exportieren" +#: 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" @@ -938,6 +942,10 @@ msgstr "AK-Wiki-Export" msgid "AK Orga Messages successfully deleted" msgstr "AK-Organachrichten erfolgreich gelöscht" +#: AKModel/views.py:195 +msgid "Wishes" +msgstr "Wünsche" + #: AKModel/views.py:207 msgid "Settings" msgstr "Einstellungen" diff --git a/AKModel/templates/AKModel/export/slides.tex b/AKModel/templates/AKModel/export/slides.tex new file mode 100644 index 0000000000000000000000000000000000000000..31f8bdcdb85efd5c9a247106e9de460f636e2f83 --- /dev/null +++ b/AKModel/templates/AKModel/export/slides.tex @@ -0,0 +1,72 @@ +\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} diff --git a/AKModel/templates/admin/AKModel/status.html b/AKModel/templates/admin/AKModel/status.html index ee84a94ac5aeb0d9d7de0c08db3811bb84d64809..dd269c83db03f118bb5f2c72447e437d8c856042 100644 --- a/AKModel/templates/admin/AKModel/status.html +++ b/AKModel/templates/admin/AKModel/status.html @@ -80,6 +80,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> diff --git a/AKModel/views.py b/AKModel/views.py index cc78a0c5a2bece33be49d4c495746722b112ed49..aeeb7b5cca2fc4d5e7c9f84a3645f330a8d52888 100644 --- a/AKModel/views.py +++ b/AKModel/views.py @@ -1,10 +1,13 @@ 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, redirect from django.urls import reverse_lazy from django.utils.translation import gettext_lazy as _ from django.views.generic import TemplateView, DetailView, ListView, DeleteView, CreateView, FormView, UpdateView from rest_framework import viewsets, permissions, mixins +from django_tex.shortcuts import render_to_pdf + from AKModel.forms import NewEventWizardStartForm, NewEventWizardSettingsForm, NewEventWizardPrepareImportForm, \ NewEventWizardImportForm, NewEventWizardActivateForm @@ -242,8 +245,6 @@ class NewEventWizardPrepareImportView(WizardViewMixin, EventSlugMixin, FormView) template_name = "admin/AKModel/event_wizard/created_prepare_import.html" wizard_step = 3 - - def form_valid(self, form): # Selected a valid event to import from? Use this to go to next step of wizard return redirect("admin:new_event_wizard_import", event_slug=self.event.slug, import_slug=form.cleaned_data["import_event"].slug) @@ -287,3 +288,20 @@ class NewEventWizardFinishView(WizardViewMixin, DetailView): model = Event template_name = "admin/AKModel/event_wizard/finish.html" wizard_step = 6 + + +@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')