members: seminar report mode selection

pull/73/head
Christian Merten 1 year ago
parent 15ab8744b8
commit 8c4d97b5d1
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -762,13 +762,18 @@ class MemberNoteListAdmin(admin.ModelAdmin):
summary.short_description = _('Generate PDF summary')
class GenerateSeminarReportForm(forms.Form):
modes = (('full', _('Full report')),
('basic', _('Costs and participants only')))
mode = forms.ChoiceField(choices=modes, label=_('Mode'))
class FreizeitAdmin(FilteredMemberFieldMixin, CommonAdminMixin, nested_admin.NestedModelAdmin):
#inlines = [MemberOnListInline, LJPOnListInline, StatementOnListInline]
form = FreizeitAdminForm
list_display = ['__str__', 'date']
search_fields = ('name',)
ordering = ('-date',)
actions = ['crisis_intervention_list', 'notes_list', 'seminar_report', 'sjr_application']
view_on_site = False
#formfield_overrides = {
# ManyToManyField: {'widget': forms.CheckboxSelectMultiple},
@ -800,18 +805,14 @@ class FreizeitAdmin(FilteredMemberFieldMixin, CommonAdminMixin, nested_admin.Nes
_("You are not allowed to view all members on excursion %(name)s.") % {'name': memberlist.name})
return HttpResponseRedirect(reverse('admin:%s_%s_changelist' % (self.opts.app_label, self.opts.model_name)))
def crisis_intervention_list(self, request, queryset):
# this ensures legacy compatibilty
memberlist = queryset[0]
def crisis_intervention_list(self, request, memberlist):
if not self.may_view_excursion(request, memberlist):
return self.not_allowed_view(request, memberlist)
context = dict(memberlist=memberlist, settings=settings)
return render_tex(memberlist.name + "_Krisenliste", 'members/crisis_intervention_list.tex', context)
crisis_intervention_list.short_description = _('Generate crisis intervention list')
def notes_list(self, request, queryset):
# this ensures legacy compatibilty
memberlist = queryset[0]
def notes_list(self, request, memberlist):
if not self.may_view_excursion(request, memberlist):
return self.not_allowed_view(request, memberlist)
people, skills = memberlist.skill_summary
@ -819,19 +820,34 @@ class FreizeitAdmin(FilteredMemberFieldMixin, CommonAdminMixin, nested_admin.Nes
return render_tex(memberlist.name + "_Notizen", 'members/notes_list.tex', context)
notes_list.short_description = _('Generate overview')
def seminar_report(self, request, queryset):
# this ensures legacy compatibilty
memberlist = queryset[0]
def render_seminar_report_options(self, request, memberlist, form):
context = dict(self.admin_site.each_context(request),
title=_('Generate seminar report'),
opts=self.opts,
memberlist=memberlist,
form=form,
object=memberlist)
return render(request, 'admin/generate_seminar_report.html', context=context)
def seminar_report(self, request, memberlist):
if not self.may_view_excursion(request, memberlist):
return self.not_allowed_view(request, memberlist)
context = dict(memberlist=memberlist, settings=settings)
title = memberlist.ljpproposal.title if hasattr(memberlist, 'ljpproposal') else memberlist.name
return render_tex(title + "_Seminarbericht", 'members/seminar_report.tex', context)
if "apply" in request.POST:
form = GenerateSeminarReportForm(request.POST)
if not form.is_valid():
messages.error(request, _('Please select a mode.'))
return self.render_seminar_report_options(request, memberlist, form)
mode = form.cleaned_data['mode']
if mode == 'full' and not hasattr(memberlist, 'ljpproposal'):
messages.error(request, _('Full mode is only available, if the seminar report section is filled out.'))
return self.render_seminar_report_options(request, memberlist, form)
context = dict(memberlist=memberlist, settings=settings, mode=mode)
title = memberlist.ljpproposal.title if hasattr(memberlist, 'ljpproposal') else memberlist.name
return render_tex(title + '_Seminarbericht', 'members/seminar_report.tex', context)
return self.render_seminar_report_options(request, memberlist, GenerateSeminarReportForm())
seminar_report.short_description = _('Generate seminar report')
def sjr_application(self, request, queryset):
# this ensures legacy compatibilty
memberlist = queryset[0]
def sjr_application(self, request, memberlist):
if not self.may_view_excursion(request, memberlist):
return self.not_allowed_view(request, memberlist)
context = memberlist.sjr_application_fields()
@ -864,13 +880,13 @@ class FreizeitAdmin(FilteredMemberFieldMixin, CommonAdminMixin, nested_admin.Nes
def action_view(self, request, object_id):
if "sjr_application" in request.POST:
return self.sjr_application(request, [Freizeit.objects.get(pk=object_id)])
return self.sjr_application(request, Freizeit.objects.get(pk=object_id))
if "seminar_report" in request.POST:
return self.seminar_report(request, [Freizeit.objects.get(pk=object_id)])
return self.seminar_report(request, Freizeit.objects.get(pk=object_id))
if "notes_list" in request.POST:
return self.notes_list(request, [Freizeit.objects.get(pk=object_id)])
return self.notes_list(request, Freizeit.objects.get(pk=object_id))
if "crisis_intervention_list" in request.POST:
return self.crisis_intervention_list(request, [Freizeit.objects.get(pk=object_id)])
return self.crisis_intervention_list(request, Freizeit.objects.get(pk=object_id))
return HttpResponseRedirect(reverse('admin:%s_%s_change' % (self.opts.app_label, self.opts.model_name),
args=(object_id,)))

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-11-24 01:14+0100\n"
"POT-Creation-Date: 2024-11-24 02:47+0100\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"
@ -212,26 +212,50 @@ msgstr ""
msgid "Generate PDF summary"
msgstr "Übersicht erstellen"
#: members/admin.py:800
#: members/admin.py:766
msgid "Full report"
msgstr "Vollständiger Seminarbericht"
#: members/admin.py:767
msgid "Costs and participants only"
msgstr "Nur Kosten und Teilnehmende"
#: members/admin.py:768
msgid "Mode"
msgstr "Modus"
#: members/admin.py:805
#, python-format
msgid "You are not allowed to view all members on excursion %(name)s."
msgstr ""
"Du hast nicht die nötigen Rechte um alle Teilnehmer:innen der Ausfahrt "
"%(name)s anzusehen."
#: members/admin.py:810
#: members/admin.py:813
msgid "Generate crisis intervention list"
msgstr "Kriseninterventionsliste erstellen"
#: members/admin.py:820
#: members/admin.py:821
msgid "Generate overview"
msgstr "Hinweise für Jugendleiter erstellen"
#: members/admin.py:830
#: members/admin.py:825 members/admin.py:848
#: members/templates/admin/generate_seminar_report.html:21
msgid "Generate seminar report"
msgstr "Seminarbericht erstellen"
#: members/admin.py:844
#: members/admin.py:838
msgid "Please select a mode."
msgstr "Bitte wähle einen Modus aus."
#: members/admin.py:842
msgid ""
"Full mode is only available, if the seminar report section is filled out."
msgstr ""
"Der vollständiger Modus ist nur verfügbar, wenn der Seminarbericht "
"ausgefüllt ist. "
#: members/admin.py:860
msgid "Generate SJR application"
msgstr "SJR Antrag erstellen"
@ -807,6 +831,7 @@ msgstr "Fortbildung"
msgid "Trainings"
msgstr "Fortbildungen"
#: members/templates/admin/generate_seminar_report.html:17
#: members/templates/admin/invite_as_user.html:17
#: members/templates/admin/invite_for_group.html:17
#: members/templates/admin/invite_selected_as_user.html:17
@ -814,6 +839,50 @@ msgstr "Fortbildungen"
msgid "Home"
msgstr "Start"
#: members/templates/admin/generate_seminar_report.html:27
msgid ""
"Here you can generate a seminar report suitable for the LJP. A report\n"
"always contains a head page with the basic information on the seminar."
msgstr ""
"Hier kannst du einen Seminarbericht für den Landesjugendplan erstellen. "
"Ein Bericht enthält immer einen Kopf mit den Stammdaten des Seminars."
#: members/templates/admin/generate_seminar_report.html:32
msgid ""
"Full report: Include learning goals and a detailed, tabularized time "
"schedule. This requires\n"
"the seminar report section to be filled out."
msgstr ""
"Vollständiger Bericht: Stelle Lernziele und einen detaillierte, "
"tabellierten Zeitplan dar. Dies benötigt, dass der Seminarbericht "
"in der Ausfahrt ausgefüllt ist."
#: members/templates/admin/generate_seminar_report.html:36
msgid ""
"Costs and participants only: Only show a list of participants and costs. In "
"this case you\n"
"have to add learning goals and a time schedule manually."
msgstr ""
"Nur Kosten und Teilnehmende: Zeige nur eine Liste von Teilnehmenden und "
"Kosten an. In diesem Fall musst du Lernziele und einen Zeitplan manuell "
"hinzufügen."
#: members/templates/admin/generate_seminar_report.html:42
msgid "Please choose one of the listed modes."
msgstr "Bitte wähle einen der obigen Modi."
#: members/templates/admin/generate_seminar_report.html:53
msgid "Generate"
msgstr "Erstellen"
#: members/templates/admin/generate_seminar_report.html:54
#: members/templates/admin/invite_as_user.html:37
#: members/templates/admin/invite_for_group.html:52
#: members/templates/admin/invite_selected_as_user.html:49
#: members/templates/admin/invite_selected_for_group.html:53
msgid "Cancel"
msgstr "Abbrechen"
#: members/templates/admin/invite_as_user.html:27
#, python-format
msgid ""
@ -834,13 +903,6 @@ msgstr ""
msgid "Invite"
msgstr "Einladen"
#: members/templates/admin/invite_as_user.html:37
#: members/templates/admin/invite_for_group.html:52
#: members/templates/admin/invite_selected_as_user.html:49
#: members/templates/admin/invite_selected_for_group.html:53
msgid "Cancel"
msgstr "Abbrechen"
#: members/templates/admin/invite_for_group.html:21
msgid "Invite to group"
msgstr "Zu Gruppe einladen"

@ -0,0 +1,57 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_urls static %}
{% block extrahead %}
{{ block.super }}
{{ media }}
<script src="{% static 'admin/js/cancel.js' %}" async></script>
<script type="text/javascript" src="{% static "admin/js/vendor/jquery/jquery.js" %}"></script>
<script type="text/javascript" src="{% static "admin/js/jquery.init.js" %}"></script>
{% endblock %}
{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} invite-waiter
{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
&rsaquo; <a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>
&rsaquo; <a href="{% url opts|admin_urlname:'change' object.pk|admin_urlquote %}">{{ object|truncatewords:"18" }}</a>
&rsaquo; {% translate 'Generate seminar report' %}
</div>
{% endblock %}
{% block content %}
<p>
{% blocktrans %}Here you can generate a seminar report suitable for the LJP. A report
always contains a head page with the basic information on the seminar.{% endblocktrans %}
</p>
<ul>
<li>
{% blocktrans %}Full report: Include learning goals and a detailed, tabularized time schedule. This requires
the seminar report section to be filled out.{% endblocktrans %}
</li>
<li>
{% blocktrans %}Costs and participants only: Only show a list of participants and costs. In this case you
have to add learning goals and a time schedule manually.{% endblocktrans %}
</li>
</ul>
<br>
<p>{% blocktrans %}Please choose one of the listed modes.{% endblocktrans %}</p>
<form action="" method="post">
{% csrf_token %}
<p>
{{form}}
</p>
<br>
<input type="hidden" name="action" value="seminar_report">
<input type="hidden" name="seminar_report">
<input class="default" style="color: $default-link-color" type="submit" name="apply"
value="{% translate 'Generate' %}">
<a href="#" class="button cancel-link">{% translate "Cancel" %}</a>
</form>
{% endblock %}

@ -79,6 +79,7 @@
\end{tabular}
\end{table}
{% if mode == 'full' %}
{% if memberlist.ljpproposal %}
\section{Alpintechnische Ziele}
@ -115,17 +116,21 @@
\end{tabularx}
\end{table}
{% endif %}
{% endif %}
\section{Teilnehmer:innenliste}
\begin{table}[H]
\begin{tabularx}{1\linewidth}{@{\extracolsep{\fill}}lLl|l|l|l}
\begin{tabularx}{1\linewidth}{@{\extracolsep{\fill}}lLl|c|c|c}
\hline
\textbf{Name} & \textbf{Anschrift} & \textbf{Geburtsdatum} & \textbf{m} & \textbf{w} & \textbf{d} \\ \hline
%\midrule
{% for m in memberlist.membersonlist.all %}
{{ m.member.name|esc_all }} & {{ m.member.address|esc_all }} & {{ m.member.birth_date_str|esc_all }} & & & \\
{{ m.member.name|esc_all }} & {{ m.member.address|esc_all }} & {{ m.member.birth_date_str|esc_all }}
& {% if m.member.gender == 0 %} x {% endif %}
& {% if m.member.gender == 1 %} x {% endif %}
& {% if m.member.gender == 2 %} x {% endif %} \\
{% endfor %}
%\bottomrule
\end{tabularx}

Loading…
Cancel
Save