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

Unify AK list and submission overview

Use tabbed-view for ak list, too
Reduce code duplication between submission overview and ak list
Cleanup filtering in view
Display message when (filtered) AK list is empty
Remove submission button from dashboard when event is inactive
Closes #70
parent d0bb8a35
Branches
No related tags found
No related merge requests found
......@@ -40,7 +40,7 @@
</a>
{% endif %}
{% endif %}
{% if 'AKSubmission'|check_app_installed %}
{% if 'AKSubmission'|check_app_installed and event.active %}
<a class="dashboard-box btn btn-primary"
href="{% url 'submit:submission_overview' event_slug=event.slug %}">
<div class="col-sm-12 col-md-3 col-lg-2 dashboard-button">
......
{% extends 'AKSubmission/submission_base.html' %}
{% load i18n %}
{% load fontawesome_5 %}
{% load tags_AKSubmission %}
{% block title %}{% trans "AKs" %}: {{ event.name }} - {% trans "AKs" %}{% endblock %}
{% block imports %}
<style>
/* Prevent wrapping of buttons in AK table */
.table td:nth-child(5) {
white-space: nowrap;
}
</style>
{% endblock %}
{% block breadcrumbs %}
{% include "AKSubmission/submission_breadcrumbs.html" %}
<li class="breadcrumb-item"><a
href="{% url 'submit:submission_overview' event_slug=event.slug %}">{% trans "AK Submission" %}</a></li>
<li class="breadcrumb-item active">{% trans "AK List" %}</li>
{% endblock %}
{% block content %}
<h1>{{ event.name }}: {% trans "AK List" %}</h1>
{% if categories.count > 0 %}
<b>{% trans 'Categories' %}:</b>
{% category_list categories event.slug %}
{% endif %}
<br><br>
{% if tracks.count > 0 %}
<b>{% trans 'Tracks' %}:</b>
{% track_list tracks event.slug %}
{% endif %}
<br><br>
{% if filter_condition_string != "" %}
<h2 class="text-secondary">{{ filter_condition_string }}</h2>
{% endif %}
{% include "AKSubmission/ak_list_table.html" %}
{% endblock %}
<div class="float-right">
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link" href="{% url 'submit:ak_list' event_slug=event.slug %}">{% trans "All AKs" %}</a>
</li>
{% if event.aktrack_set.count > 0 %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true"
aria-expanded="false">{% trans "Tracks" %}</a>
<div class="dropdown-menu" style="">
{% for track in event.aktrack_set.all %}
<a class="dropdown-item"
href="{% url 'submit:ak_list_by_track' event_slug=event.slug track_pk=track.pk %}">
{{ track }}</a>
{% endfor %}
</div>
</li>
{% endif %}
</ul>
</div>
<h2>{{ table_title }}</h2>
<noscript>
{% include "AKSubmission/ak_table.html" %}
</noscript>
<ul class="nav nav-tabs" style="margin-bottom:15px">
{% for category, _ in categories_with_aks %}
<li class="nav-item">
<a class="nav-link {% if category.name == active_category %}active{% endif %}" data-toggle="tab"
href="#category_{{ category.pk }}">{{ category.name }}</a>
</li>
{% endfor %}
</ul>
<div id="akListTabbed" class="tab-content">
{% for category, AKs in categories_with_aks %}
<div class="tab-pane fade {% if category.name == active_category %}show active{% endif %}" id="category_{{ category.pk }}">
<p><b>{{ category.name }}:</b> {{ category.description }}</p>
{% include "AKSubmission/ak_table.html" %}
</div>
{% endfor %}
</div>
{% extends 'AKSubmission/submission_base.html' %}
{% load i18n %}
{% load fontawesome_5 %}
{% load tags_AKSubmission %}
{% block title %}{% trans "AKs" %}: {{ event.name }} - {% trans "AKs" %}{% endblock %}
{% block imports %}
<style>
/* Prevent wrapping of buttons in AK table */
.table td:nth-child(5) {
white-space: nowrap;
}
</style>
{% endblock %}
{% block breadcrumbs %}
{% include "AKSubmission/submission_breadcrumbs.html" %}
<li class="breadcrumb-item"><a
href="{% url 'submit:submission_overview' event_slug=event.slug %}">{% trans "AK Submission" %}</a></li>
<li class="breadcrumb-item active">{% trans "AK List" %}</li>
{% endblock %}
{% block content %}
<h1>{% trans "AKs" %}: {{ event.name }}</h1>
{% include "AKSubmission/ak_list.html" %}
{% endblock %}
......@@ -58,6 +58,10 @@
<tr>
<td colspan="5" class="small">{{ ak.description }}</td>
</tr>
{% empty %}
<tr>
<td colspan="5" class="small">{% trans "There are no AKs in this category yet" %}</td>
</tr>
{% endfor %}
</tbody>
</table>
......@@ -63,28 +63,5 @@
</div>
{% endif %}
<h2>{% trans "Current AKs" %}</h2>
<noscript>
{% include "AKSubmission/ak_list_table.html" %}
</noscript>
<ul class="nav nav-tabs" style="margin-bottom:15px">
{% for category, _ in categories_with_aks %}
<li class="nav-item">
<a class="nav-link {% if forloop.first %}active{% endif %}" data-toggle="tab"
href="#category_{{ category.pk }}">{{ category.name }}</a>
</li>
{% endfor %}
</ul>
<div id="akListTabbed" class="tab-content">
{% for category, AKs in categories_with_aks %}
<div class="tab-pane fade {% if forloop.first %}show active{% endif %}" id="category_{{ category.pk }}">
<p><b>{{ category.name }}:</b> {{ category.description }}</p>
{% include "AKSubmission/ak_list_table.html" %}
</div>
{% endfor %}
</div>
{% include "AKSubmission/ak_list.html" %}
{% endblock %}
......@@ -16,7 +16,7 @@ urlpatterns = [
path('ak/<int:pk>/add_slot/', views.AKSlotAddView.as_view(), name='akslot_add'),
path('akslot/<int:pk>/edit/', views.AKSlotEditView.as_view(), name='akslot_edit'),
path('akslot/<int:pk>/delete/', views.AKSlotDeleteView.as_view(), name='akslot_delete'),
path('aks/', views.AKListView.as_view(), name='ak_list'),
path('aks/', views.AKOverviewView.as_view(), name='ak_list'),
path('aks/category/<int:category_pk>/', views.AKListByCategoryView.as_view(), name='ak_list_by_category'),
path('aks/tag/<int:tag_pk>/', views.AKListByTagView.as_view(), name='ak_list_by_tag'),
path('aks/track/<int:track_pk>/', views.AKListByTrackView.as_view(), name='ak_list_by_track'),
......
......@@ -13,10 +13,20 @@ from AKModel.views import FilterByEventSlugMixin
from AKSubmission.forms import AKWishForm, AKOwnerForm, AKEditForm, AKSubmissionForm, AKDurationForm
class SubmissionOverviewView(FilterByEventSlugMixin, ListView):
class AKOverviewView(FilterByEventSlugMixin, ListView):
model = AKCategory
context_object_name = "categories"
template_name = "AKSubmission/submission_overview.html"
template_name = "AKSubmission/ak_overview.html"
wishes_as_category = False
def filter_aks(self, context, category):
return category.ak_set.all()
def get_active_category_name(self, context):
return context["categories_with_aks"][0][0].name
def get_table_title(self, context):
return _("All AKs")
def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(object_list=object_list, **kwargs)
......@@ -27,17 +37,35 @@ class SubmissionOverviewView(FilterByEventSlugMixin, ListView):
for category in context["categories"]:
aks_for_category = []
for ak in category.ak_set.all():
if settings.WISHES_AS_CATEGORY and ak.wish:
for ak in self.filter_aks(context, category):
if self.wishes_as_category and ak.wish:
ak_wishes.append(ak)
else:
aks_for_category.append(ak)
categories_with_aks.append((category, aks_for_category))
if settings.WISHES_AS_CATEGORY:
if self.wishes_as_category:
categories_with_aks.append(
({"name": _("Wishes"), "pk": "wish", "description": _("AKs one would like to have")}, ak_wishes))
context["categories_with_aks"] = categories_with_aks
context["active_category"] = self.get_active_category_name(context)
context['table_title'] = self.get_table_title(context)
return context
class SubmissionOverviewView(AKOverviewView):
model = AKCategory
context_object_name = "categories"
template_name = "AKSubmission/submission_overview.html"
wishes_as_category = settings.WISHES_AS_CATEGORY
def get_table_title(self, context):
return _("Currently planned AKs")
def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(object_list=object_list, **kwargs)
# Get list of existing owners for event (for AK submission start)
context["existingOwners"] = AKOwner.objects.filter(event=self.event)
......@@ -45,6 +73,39 @@ class SubmissionOverviewView(FilterByEventSlugMixin, ListView):
return context
class AKListByCategoryView(AKOverviewView):
def dispatch(self, request, *args, **kwargs):
self.category = get_object_or_404(AKCategory, pk=kwargs['category_pk'])
return super().dispatch(request, *args, **kwargs)
def get_active_category_name(self, context):
return self.category.name
class AKListByTagView(AKOverviewView):
def dispatch(self, request, *args, **kwargs):
self.tag = get_object_or_404(AKTag, pk=kwargs['tag_pk'])
return super().dispatch(request, *args, **kwargs)
def filter_aks(self, context, category):
return self.tag.ak_set.filter(event=self.event, category=category)
def get_table_title(self, context):
return f"{_('AKs with Tag')} = {self.tag.name}"
class AKListByTrackView(AKOverviewView):
def dispatch(self, request, *args, **kwargs):
self.track = get_object_or_404(AKTrack, pk=kwargs['track_pk'])
return super().dispatch(request, *args, **kwargs)
def filter_aks(self, context, category):
return category.ak_set.filter(track=self.track)
def get_table_title(self, context):
return f"{_('AKs with Track')} = {self.track.name}"
class AKDetailView(EventSlugMixin, DetailView):
model = AK
context_object_name = "ak"
......@@ -60,56 +121,16 @@ class AKHistoryView(EventSlugMixin, DetailView):
class AKListView(FilterByEventSlugMixin, ListView):
model = AK
context_object_name = "AKs"
template_name = "AKSubmission/ak_list.html"
filter_condition_string = ""
template_name = "AKSubmission/ak_overview.html"
table_title = ""
def get_context_data(self, *, object_list=None, **kwargs):
context = super().get_context_data(object_list=object_list, **kwargs)
context['categories'] = AKCategory.objects.filter(event=self.event)
context['tracks'] = AKTrack.objects.filter(event=self.event)
context['filter_condition_string'] = self.filter_condition_string
return context
class AKListByCategoryView(AKListView):
category = None
def get_queryset(self):
# Find category based on event slug
try:
self.category = AKCategory.objects.get(pk=self.kwargs['category_pk'])
self.filter_condition_string = f"{_('Category')} = {self.category.name}"
except AKCategory.DoesNotExist:
raise Http404
return super().get_queryset().filter(category=self.category)
class AKListByTagView(AKListView):
tag = None
def get_queryset(self):
# Find tag based on event slug
try:
self.tag = AKTag.objects.get(pk=self.kwargs['tag_pk'])
self.filter_condition_string = f"{_('Tag')} = {self.tag.name}"
except AKTag.DoesNotExist:
raise Http404
return super().get_queryset().filter(tags=self.tag)
class AKListByTrackView(AKListView):
track = None
def get_queryset(self):
# Find track based on event slug
try:
self.track = AKTrack.objects.get(pk=self.kwargs['track_pk'])
self.filter_condition_string = f"{_('Track')} = {self.track.name}"
except AKTrack.DoesNotExist:
raise Http404
return super().get_queryset().filter(track=self.track)
class EventInactiveRedirectMixin:
def get_error_message(self):
return _("Event inactive. Cannot create or update.")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment