Skip to content
Snippets Groups Projects
Commit 1fe0d7e3 authored by Nadja Geisler's avatar Nadja Geisler :sunny:
Browse files

Merge branch 'feature-interest-view' into 'main'

Introduce admin view to enter interest and ad-hoc comments for AKs

Closes #147

See merge request !129
parents cb658933 93e1216d
No related branches found
No related tags found
1 merge request!129Introduce admin view to enter interest and ad-hoc comments for AKs
Pipeline #96349 passed
......@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-08-17 17:35+0200\n"
"POT-Creation-Date: 2022-08-17 22:41+0200\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"
......@@ -459,7 +459,7 @@ msgstr "AK präsentieren"
msgid "Present results of this AK"
msgstr "Die Ergebnisse dieses AKs vorstellen"
#: .\AKModel\models.py:262 .\AKModel\templates\admin\AKModel\status.html:95
#: .\AKModel\models.py:262 .\AKModel\templates\admin\AKModel\status.html:97
msgid "Requirements"
msgstr "Anforderungen"
......@@ -878,7 +878,7 @@ msgid "No AKs with this requirement"
msgstr "Kein AK mit dieser Anforderung"
#: .\AKModel\templates\admin\AKModel\requirements_overview.html:45
#: .\AKModel\templates\admin\AKModel\status.html:111
#: .\AKModel\templates\admin\AKModel\status.html:113
msgid "Add Requirement"
msgstr "Anforderung hinzufügen"
......@@ -923,39 +923,43 @@ msgstr "Scheduling"
msgid "AKs requiring special attention"
msgstr ""
#: .\AKModel\templates\admin\AKModel\status.html:84
#: .\AKModel\templates\admin\AKModel\status.html:83
msgid "Enter Interest"
msgstr "Interesse erfassen"
#: .\AKModel\templates\admin\AKModel\status.html:86
msgid "Manage ak tracks"
msgstr "AK-Tracks verwalten"
#: .\AKModel\templates\admin\AKModel\status.html:86
#: .\AKModel\templates\admin\AKModel\status.html:88
msgid "Export AKs as CSV"
msgstr "AKs als CSV exportieren"
#: .\AKModel\templates\admin\AKModel\status.html:88
#: .\AKModel\templates\admin\AKModel\status.html:90
msgid "Export AKs for Wiki"
msgstr "AKs im Wiki-Format exportieren"
#: .\AKModel\templates\admin\AKModel\status.html:90
#: .\AKModel\templates\admin\AKModel\status.html:92
msgid "Export AK Slides"
msgstr "AK-Folien exportieren"
#: .\AKModel\templates\admin\AKModel\status.html:92
#: .\AKModel\templates\admin\AKModel\status.html:94
msgid "Export AK Slides (Presentation AKs only)"
msgstr "AK-Folien exportieren (Nur zu präsentierende AKs)"
#: .\AKModel\templates\admin\AKModel\status.html:97
#: .\AKModel\templates\admin\AKModel\status.html:99
msgid "No requirements yet"
msgstr "Bisher keine Anforderungen"
#: .\AKModel\templates\admin\AKModel\status.html:110
#: .\AKModel\templates\admin\AKModel\status.html:112
msgid "Show AKs for requirements"
msgstr "Zu Anforderungen gehörige AKs anzeigen"
#: .\AKModel\templates\admin\AKModel\status.html:114
#: .\AKModel\templates\admin\AKModel\status.html:116
msgid "Messages"
msgstr "Nachrichten"
#: .\AKModel\templates\admin\AKModel\status.html:116
#: .\AKModel\templates\admin\AKModel\status.html:118
msgid "Delete all messages"
msgstr "Alle Nachrichten löschen"
......
......@@ -79,6 +79,8 @@
href="{% url 'admin:constraint-violations' slug=event.slug %}">{% trans "Constraint Violations" %} <span class="badge badge-secondary">{{ event.constraintviolation_set.count }}</span></a>
<a class="btn btn-success"
href="{% url 'admin:special-attention' slug=event.slug %}">{% trans "AKs requiring special attention" %}</a>
<a class="btn btn-success"
href="{% url 'admin:enter-interest' event_slug=event.slug pk=event.ak_set.all.first.pk %}">{% trans "Enter Interest" %}</a>
{% endif %}
<a class="btn btn-success"
href="{% url 'admin:tracks_manage' event_slug=event.slug %}">{% trans "Manage ak tracks" %}</a>
......
from django import forms
from AKModel.models import AK
class AKInterestForm(forms.ModelForm):
required_css_class = 'required'
class Meta:
model = AK
fields = ['interest',
'notes',
]
......@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-10-29 13:36+0000\n"
"POT-Creation-Date: 2022-08-17 22:41+0200\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,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: AKScheduling/models.py:80
#: .\AKScheduling\models.py:80
#, python-format
msgid ""
"Not enough space for AK interest (Interest: %(interest)d, Capacity: "
......@@ -26,7 +26,7 @@ msgstr ""
"Nicht genug Platz für AK-Interesse (Interesse: %(interest)d, Kapazität: "
"%(capacity)d)"
#: AKScheduling/models.py:92
#: .\AKScheduling\models.py:92
#, python-format
msgid ""
"Space is too close to AK interest (Interest: %(interest)d, Capacity: "
......@@ -35,116 +35,148 @@ msgstr ""
"Verfügbarer Platz zu dicht an Interesse (Interesse: %(interest)d, Kapazität: "
"%(capacity)d)"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:11
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:11
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:10
msgid "Scheduling for"
msgstr "Scheduling für"
#: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:11
msgid "Constraint Violations for"
msgstr ""
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:74
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:128
#: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:78
#: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:133
msgid "No violations"
msgstr "Keine Verletzungen"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:81
#: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:85
msgid "Cannot load current violations from server"
msgstr "Kann die aktuellen Verletzungen nicht vom Server laden"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:106
#: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:110
msgid "Violation(s)"
msgstr "Verletzung(en)"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:109
#: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:113
msgid "Auto reload?"
msgstr "Automatisch neu laden?"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:113
#: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:117
msgid "Reload now"
msgstr "Jetzt neu laden"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:118
#: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:123
msgid "Violation"
msgstr "Verletzung"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:119
#: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:124
msgid "Problem"
msgstr "Problem"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:120
#: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:125
msgid "Details"
msgstr "Details"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:121
#: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:126
msgid "Since"
msgstr "Seit"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:134
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:243
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:208
#: AKScheduling/templates/admin/AKScheduling/unscheduled.html:34
#: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:139
#: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:243
#: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:208
#: .\AKScheduling\templates\admin\AKScheduling\special_attention.html:43
#: .\AKScheduling\templates\admin\AKScheduling\unscheduled.html:34
msgid "Event Status"
msgstr "Event-Status"
#: AKScheduling/templates/admin/AKScheduling/constraint_violations.html:136
#: .\AKScheduling\templates\admin\AKScheduling\constraint_violations.html:141
msgid "Scheduling"
msgstr "Scheduling"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:129
#: .\AKScheduling\templates\admin\AKScheduling\interest.html:33
msgid "Submit"
msgstr "Abschicken"
#: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:11
#: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:10
msgid "Scheduling for"
msgstr "Scheduling für"
#: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:129
msgid "Name of new ak track"
msgstr "Name des neuen AK-Tracks"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:145
#: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:145
msgid "Could not create ak track"
msgstr "Konnte neuen AK-Track nicht anlegen"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:171
#: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:171
msgid "Could not update ak track name"
msgstr "Konnte Namen des AK-Tracks nicht ändern"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:177
#: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:177
msgid "Do you really want to delete this ak track?"
msgstr "Soll dieser AK-Track wirklich gelöscht werden?"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:191
#: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:191
msgid "Could not delete ak track"
msgstr "AK-Track konnte nicht gelöscht werden"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:203
#: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:203
msgid "Manage AK Tracks"
msgstr "AK-Tracks verwalten"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:204
#: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:204
msgid "Add ak track"
msgstr "AK-Track hinzufügen"
#: AKScheduling/templates/admin/AKScheduling/manage_tracks.html:209
#: .\AKScheduling\templates\admin\AKScheduling\manage_tracks.html:209
msgid "AKs without track"
msgstr "AKs ohne Track"
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:91
#: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:91
msgid "Day (Horizontal)"
msgstr "Tag (horizontal)"
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:98
#: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:98
msgid "Day (Vertical)"
msgstr "Tag (vertikal)"
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:109
#: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:109
msgid "Event (Horizontal)"
msgstr "Event (horizontal)"
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:118
#: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:118
msgid "Event (Vertical)"
msgstr "Event (vertikal)"
#: AKScheduling/templates/admin/AKScheduling/scheduling.html:146
#: .\AKScheduling\templates\admin\AKScheduling\scheduling.html:146
msgid "Room"
msgstr "Raum"
#: AKScheduling/templates/admin/AKScheduling/unscheduled.html:7
#: .\AKScheduling\templates\admin\AKScheduling\special_attention.html:14
msgid "AKs with public notes"
msgstr "AKs mit öffentlichen Kommentaren"
#: .\AKScheduling\templates\admin\AKScheduling\special_attention.html:21
msgid "AKs without availabilities"
msgstr "AKs ohne Verfügbarkeiten"
#: .\AKScheduling\templates\admin\AKScheduling\special_attention.html:28
msgid "AK wishes with slots"
msgstr "AK-Wünsche mit Slots"
#: .\AKScheduling\templates\admin\AKScheduling\special_attention.html:35
msgid "AKs without slots"
msgstr "AKs ohne Slots"
#: .\AKScheduling\templates\admin\AKScheduling\unscheduled.html:7
msgid "Unscheduled AK Slots"
msgstr "Noch nicht geschedulte AK-Slots"
#: AKScheduling/templates/admin/AKScheduling/unscheduled.html:11
#: .\AKScheduling\templates\admin\AKScheduling\unscheduled.html:11
msgid "Count"
msgstr "Anzahl"
#: .\AKScheduling\views.py:103
msgid "Interest updated"
msgstr "Interesse aktualisiert"
#: .\AKScheduling\views.py:141
msgid "Wishes"
msgstr "Wünsche"
{% extends "admin/base_site.html" %}
{% load bootstrap4 %}
{% load i18n %}
{% load l10n %}
{% load tz %}
{% load static %}
{% load fontawesome_5 %}
{% block title %}{{ title }}{% endblock %}
{% block content %}
<div class="text-center text-md-center">
<h5>
{% if previous_ak %}
<a href="{% url "admin:enter-interest" event.slug previous_ak.pk %}" class="pull-left">&lt;-{{ previous_ak.name }}</a> |
{% endif %}
{% if next_ak %}
<a href="{% url "admin:enter-interest" event.slug next_ak.pk %}">{{ next_ak.name }} -&gt;</a>
{% endif %}
</h5>
</div>
<h4>{{ ak.name }}</h4>
<h5>{{ ak.short_name }}</h5>
<div class="mb-3">
<form method="POST" class="post-form">{% csrf_token %}
{% bootstrap_form form %}
{% buttons %}
<button type="submit" class="save btn btn-primary float-right">
{% fa5_icon "check" 'fas' %} {% trans "Submit" %}
</button>
{% endbuttons %}
</form>
</div>
{% for category, aks in categories_with_aks %}
<h5 class="mt-4">{{ category.name }}</h5>
{% for link_ak in aks %}
<a href="{% url "admin:enter-interest" event.slug link_ak.pk %}">{{ link_ak.name }}</a> &middot;
{% endfor %}
{% endfor %}
{% endblock %}
from django.urls import path
from AKScheduling.views import SchedulingAdminView, UnscheduledSlotsAdminView, TrackAdminView, \
ConstraintViolationsAdminView, SpecialAttentionAKsAdminView
ConstraintViolationsAdminView, SpecialAttentionAKsAdminView, InterestEnteringAdminView
def get_admin_urls_scheduling(admin_site):
......@@ -16,4 +16,6 @@ def get_admin_urls_scheduling(admin_site):
name="special-attention"),
path('<slug:event_slug>/tracks/', admin_site.admin_view(TrackAdminView.as_view()),
name="tracks_manage"),
path('<slug:event_slug>/enter-interest/<int:pk>', admin_site.admin_view(InterestEnteringAdminView.as_view()),
name="enter-interest"),
]
from django.contrib.messages.views import SuccessMessageMixin
from django.utils.translation import gettext_lazy as _
from django.views.generic import ListView, DetailView
from django.views.generic import ListView, DetailView, UpdateView
from AKModel.models import AKSlot, AKTrack, Event, AK
from AKModel.views import AdminViewMixin, FilterByEventSlugMixin
from AKModel.models import AKSlot, AKTrack, Event, AK, AKCategory
from AKModel.views import AdminViewMixin, FilterByEventSlugMixin, EventSlugMixin
from AKScheduling.forms import AKInterestForm
class UnscheduledSlotsAdminView(AdminViewMixin, FilterByEventSlugMixin, ListView):
......@@ -91,3 +93,53 @@ class SpecialAttentionAKsAdminView(AdminViewMixin, DetailView):
context["aks_without_availabilities"] = aks_without_availabilities
return context
class InterestEnteringAdminView(SuccessMessageMixin, AdminViewMixin, EventSlugMixin, UpdateView):
template_name = "admin/AKScheduling/interest.html"
model = AK
context_object_name = "ak"
form_class = AKInterestForm
success_message = _("Interest updated")
def get_success_url(self):
return self.request.path
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = f"{_('Enter interest')}"
# Sort AKs into different lists (by their category)
ak_wishes = []
categories_with_aks = []
context["previous_ak"] = None
context["next_ak"] = None
last_ak = None
next_is_next = False
for other_ak in context['ak'].category.ak_set.all():
if other_ak.wish:
continue
if next_is_next:
context['next_ak'] = other_ak
next_is_next = False
elif other_ak.pk == context['ak'].pk :
context['previous_ak'] = last_ak
next_is_next = True
last_ak = other_ak
for category in context['event'].akcategory_set.all():
aks_for_category = []
for ak in category.ak_set.all():
if ak.wish:
ak_wishes.append(ak)
else:
aks_for_category.append(ak)
categories_with_aks.append((category, aks_for_category))
categories_with_aks.append(
(AKCategory(name=_("Wishes"), pk=0, description="-"), ak_wishes))
context["categories_with_aks"] = categories_with_aks
return context
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment