From 5f6407a66b633b1577f8a2eae567d48023025b9c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Benjamin=20H=C3=A4ttasch?=
 <benjamin.haettasch@cs.tu-darmstadt.de>
Date: Fri, 18 Oct 2019 01:37:44 +0200
Subject: [PATCH] Add more views to submission component and improve existing
 one

Add dynamic title handling to base html
Add more information to submission overview
Move AK list to own file for use in other pages
Add detail view for AK
Add views with AK overview list as well as filtered lists (by type and tag)
Add corresponding German translations
---
 .../locale/de_DE/LC_MESSAGES/django.po        | 75 +++++++++++++++----
 .../templates/AKSubmission/ak_detail.html     | 71 ++++++++++++++++++
 .../templates/AKSubmission/ak_list.html       | 38 ++++++++++
 .../templates/AKSubmission/ak_list_table.html | 38 ++++++++++
 .../AKSubmission/submission_overview.html     | 23 +-----
 AKSubmission/urls.py                          |  4 +
 AKSubmission/views.py                         | 53 ++++++++++++-
 templates/base.html                           |  2 +-
 8 files changed, 266 insertions(+), 38 deletions(-)
 create mode 100644 AKSubmission/templates/AKSubmission/ak_detail.html
 create mode 100644 AKSubmission/templates/AKSubmission/ak_list.html
 create mode 100644 AKSubmission/templates/AKSubmission/ak_list_table.html

diff --git a/AKSubmission/locale/de_DE/LC_MESSAGES/django.po b/AKSubmission/locale/de_DE/LC_MESSAGES/django.po
index 1a7d279c..b89bab64 100644
--- a/AKSubmission/locale/de_DE/LC_MESSAGES/django.po
+++ b/AKSubmission/locale/de_DE/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-10-17 14:14+0000\n"
+"POT-Creation-Date: 2019-10-17 23:30+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"
@@ -17,27 +17,70 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: templates/AKSubmission/submission_overview.html:9
-#: templates/AKSubmission/submission_overview.html:13
+#: templates/AKSubmission/ak_detail.html:6
+#: templates/AKSubmission/ak_detail.html:11
+#: templates/AKSubmission/ak_detail.html:16
+#: templates/AKSubmission/ak_list.html:6 templates/AKSubmission/ak_list.html:11
+#: templates/AKSubmission/ak_list.html:16
+#: templates/AKSubmission/submission_overview.html:6
+#: templates/AKSubmission/submission_overview.html:11
+#: templates/AKSubmission/submission_overview.html:15
 msgid "AK Submission"
 msgstr "AK-Eintragung"
 
-#: templates/AKSubmission/submission_overview.html:18
-msgid "Submit"
-msgstr "Eintragen"
+#: templates/AKSubmission/ak_detail.html:28
+#: templates/AKSubmission/ak_list_table.html:6
+msgid "Who?"
+msgstr "Wer?"
 
-#: templates/AKSubmission/submission_overview.html:24
-msgid "Current AKs"
-msgstr "Aktuelle AKs"
+#: templates/AKSubmission/ak_detail.html:29
+#: templates/AKSubmission/ak_list_table.html:6
+msgid "Type"
+msgstr "Typ"
+
+#: templates/AKSubmission/ak_detail.html:31
+#: templates/AKSubmission/ak_list_table.html:6
+msgid "Tags"
+msgstr "Tags"
+
+#: templates/AKSubmission/ak_detail.html:39
+msgid "Reso?"
+msgstr "Reso?"
+
+#: templates/AKSubmission/ak_detail.html:55
+msgid "When?"
+msgstr "Wann?"
+
+#: templates/AKSubmission/ak_detail.html:56
+msgid "Duration"
+msgstr "Dauer"
+
+#: templates/AKSubmission/ak_detail.html:57
+msgid "Room"
+msgstr "Raum"
 
-#: templates/AKSubmission/submission_overview.html:27
+#: templates/AKSubmission/ak_list.html:12
+msgid "AKs"
+msgstr "AKs"
+
+#: templates/AKSubmission/ak_list_table.html:6
 msgid "Name"
 msgstr "Name"
 
-#: templates/AKSubmission/submission_overview.html:27
-msgid "Who?"
-msgstr "Wer?"
+#: templates/AKSubmission/ak_list_table.html:13
+#, fuzzy
+#| msgid "Current AKs"
+msgid "Present AK"
+msgstr "Aktuelle AKs"
 
-#: templates/AKSubmission/submission_overview.html:27
-msgid "Tags"
-msgstr "Tags"
+#: templates/AKSubmission/ak_list_table.html:15
+msgid "Reso"
+msgstr "Reso"
+
+#: templates/AKSubmission/submission_overview.html:20
+msgid "Submit"
+msgstr "Eintragen"
+
+#: templates/AKSubmission/submission_overview.html:26
+msgid "Current AKs"
+msgstr "Aktuelle AKs"
diff --git a/AKSubmission/templates/AKSubmission/ak_detail.html b/AKSubmission/templates/AKSubmission/ak_detail.html
new file mode 100644
index 00000000..3180e1fc
--- /dev/null
+++ b/AKSubmission/templates/AKSubmission/ak_detail.html
@@ -0,0 +1,71 @@
+{% extends 'base.html' %}
+
+{% load i18n %}
+{% load fontawesome %}
+
+{% block title %}{{ ak.event.slug }} - {% trans "AK Submission" %} - {{ ak.slug }}{% endblock %}
+
+{% block breadcrumbs %}
+    <li class="breadcrumb-item"><a href="#">AKPlanning</a></li>
+    <li class="breadcrumb-item"><a href="#">{{ ak.event.slug }}</a></li>
+    <li class="breadcrumb-item"><a href="{% url 'submit:submission_overview' event_slug=ak.event.slug %}">{% trans "AK Submission" %}</a></li>
+    <li class="breadcrumb-item active">{{ ak.name }}</li>
+{% endblock %}
+
+{% block content %}
+    <h1 style="margin-bottom: 30px;">{{ ak.event.name }}: {% trans "AK Submission" %}</h1>
+
+    <div class="float-right">
+        {% if ak.link != "" %}
+            <a href="{{ ak.link }}" class="btn btn-info">{%  fontawesome_icon 'external-link-alt' %}</a>
+        {% endif %}
+        <a href="#" class="btn btn-success">{%  fontawesome_icon 'pencil-alt' %}</a>
+    </div>
+
+    <h2>{{ ak.name }}</h2>
+
+    <table class="table table-borderless">
+        <tr><td>{% trans "Who?" %}</td><td>{{ ak.owners_list }}</td></tr>
+        <tr><td>{% trans "Type" %}</td><td><a href="{% url 'submit:ak_list_by_type' event_slug=ak.event.slug type_pk=ak.type.pk %}"><span class="badge badge-primary">{{ ak.type }}</span></a></td></tr>
+        <tr>
+            <td>{% trans "Tags" %}</td>
+            <td>
+                {% for tag in ak.tags.all %}
+                    <a href="{% url 'submit:ak_list_by_tag' event_slug=ak.event.slug tag_pk=tag.pk %}"><span class="badge badge-info">{{ tag }}</span></a>
+                {% endfor %}
+            </td>
+        </tr>
+        <tr>
+            <td>{% trans "Reso?" %}</td>
+            <td>
+                {% if  ak.reso %}
+                    {% fontawesome_icon "check" %}
+                {% else %}
+                    {% fontawesome_icon "times" %}
+                {% endif %}
+            </td>
+        </tr>
+    </table>
+
+    <p style="margin-top: 30px;margin-bottom: 30px;">{{ ak.description }}</p>
+
+    <table class="table">
+        <thead>
+            <tr>
+                <th>{% trans "When?" %}</th>
+                <th>{% trans "Duration" %}</th>
+                <th>{% trans "Room" %}</th>
+            </tr>
+        </thead>
+        <tbody>
+            {% for slot in ak.akslot_set.all %}
+                <tr>
+                    <td>{{ slot.start_simplified }}</td>
+                    <td>{{ slot.duration }}</td>
+                    <td>{{ slot.room }}</td>
+                </tr>
+            {% endfor %}
+        </tbody>
+    </table>
+
+{% endblock %}
diff --git a/AKSubmission/templates/AKSubmission/ak_list.html b/AKSubmission/templates/AKSubmission/ak_list.html
new file mode 100644
index 00000000..ac86f6d4
--- /dev/null
+++ b/AKSubmission/templates/AKSubmission/ak_list.html
@@ -0,0 +1,38 @@
+{% extends 'base.html' %}
+
+{% load i18n %}
+{% load fontawesome %}
+
+{% block title %}{{ event.slug }} - {% trans "AK Submission" %}{% endblock %}
+
+{% block breadcrumbs %}
+    <li class="breadcrumb-item"><a href="#">AKPlanning</a></li>
+    <li class="breadcrumb-item"><a href="#">{{ event.slug }}</a></li>
+    <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 "AKs" %}</li>
+{% endblock %}
+
+{% block content %}
+    <h1>{{ event.name }}: {% trans "AK Submission" %}</h1>
+
+    <b>Types:</b>
+    {% for type in types %}
+        <a href="{% url 'submit:ak_list_by_type' event_slug=event.slug type_pk=type.pk %}"><span class="badge badge-primary">{{ type }}</span></a>
+    {% endfor %}
+
+    <br><br>
+
+    <b>Tags:</b>
+    {% for tag in tags.all %}
+        <a href="{% url 'submit:ak_list_by_tag' event_slug=event.slug tag_pk=tag.pk %}"><span class="badge badge-primary">{{ tag }}</span></a>
+    {% endfor %}
+
+    <br><br>
+
+    {% if filter_condition_string != "" %}
+        <h2 class="text-secondary">{{ filter_condition_string }}</h2>
+    {% endif %}
+
+    {% include "AKSubmission/ak_list_table.html" %}
+
+{% endblock %}
diff --git a/AKSubmission/templates/AKSubmission/ak_list_table.html b/AKSubmission/templates/AKSubmission/ak_list_table.html
new file mode 100644
index 00000000..b56d69bd
--- /dev/null
+++ b/AKSubmission/templates/AKSubmission/ak_list_table.html
@@ -0,0 +1,38 @@
+{% load i18n %}
+{% load fontawesome %}
+
+<table id="akTable" class="table table-striped">
+  <thead>
+    <tr><th>{% trans "Name" %}</th><th>{% trans "Who?" %}</th><th>{% trans "Type" %}</th><th>{% trans "Tags" %}</th><th></th></tr>
+  </thead>
+  <tbody>
+    {% for ak in AKs %}
+        <tr>
+            <td>
+                <b>{{ ak.name }}</b>
+                <span class="badge badge-dark badge-pill" title="{% trans 'Present AK' %}">{% fontawesome_icon "bullhorn" %}</span>
+                {% if ak.reso %}
+                <span class="badge badge-dark badge-pill" title="{% trans 'Reso' %}">{% fontawesome_icon "scroll" %}</span>
+                {% endif %}
+            </td>
+            <td>{{ ak.owners_list }}</td>
+            <td><a href="{% url 'submit:ak_list_by_type' event_slug=event.slug type_pk=ak.type.pk %}"><span class="badge badge-primary">{{ ak.type }}</span></a></td>
+            <td>
+                {% for tag in ak.tags.all %}
+                    <a href="{% url 'submit:ak_list_by_tag' event_slug=event.slug tag_pk=tag.pk %}"><span class="badge badge-info">{{ tag }}</span></a>
+                {% endfor %}
+            </td>
+            <td class="text-right">
+                <a href="{% url 'submit:ak_detail' event_slug=ak.event.slug pk=ak.pk %}" class="btn btn-primary">{%  fontawesome_icon 'info' %}</a>
+                {% if ak.link != "" %}
+                    <a href="{{ ak.link }}" class="btn btn-info">{%  fontawesome_icon 'external-link-alt' %}</a>
+                {% endif %}
+                <a href="#" class="btn btn-success">{%  fontawesome_icon 'pencil-alt' %}</a>
+            </td>
+        </tr>
+        <tr>
+            <td colspan="5" class="small">{{ ak.description }}</td>
+        </tr>
+    {% endfor %}
+  </tbody>
+</table>
diff --git a/AKSubmission/templates/AKSubmission/submission_overview.html b/AKSubmission/templates/AKSubmission/submission_overview.html
index ca28640c..f9529bd2 100644
--- a/AKSubmission/templates/AKSubmission/submission_overview.html
+++ b/AKSubmission/templates/AKSubmission/submission_overview.html
@@ -3,6 +3,8 @@
 {% load i18n %}
 {% load fontawesome %}
 
+{% block title %}{{ event.slug }} - {% trans "AK Submission" %}{% endblock %}
+
 {% block breadcrumbs %}
     <li class="breadcrumb-item"><a href="#">AKPlanning</a></li>
     <li class="breadcrumb-item"><a href="#">{{ event.slug }}</a></li>
@@ -23,23 +25,6 @@
 
     <h2>{% trans "Current AKs" %}</h2>
 
-    <table class="table table-striped">
-        <tr><th>{% trans "Name" %}</th><th>{% trans "Who?" %}</th><th>{% trans "Tags" %}</th><th></th></tr>
-
-        {% for ak in AKs %}
-            <tr>
-                <td>{{ ak.name }}</td>
-                <td>{{ ak.owners_list }}</td>
-                <td>
-                    {% for tag in ak.tags.all %}
-                        <span class="badge badge-info">{{ tag }}</span>
-                    {% endfor %}
-                </td>
-                <td>
-                    <a href="#" class="btn btn-primary">{%  fontawesome_icon 'info' %}</a>
-                    <a href="#" class="btn btn-success">{%  fontawesome_icon 'edit' %}</a>
-                </td>
-            </tr>
-        {% endfor %}
-    </table>
+    {% include "AKSubmission/ak_list_table.html" %}
+
 {% endblock %}
diff --git a/AKSubmission/urls.py b/AKSubmission/urls.py
index 000bcc51..fc535223 100644
--- a/AKSubmission/urls.py
+++ b/AKSubmission/urls.py
@@ -9,6 +9,10 @@ urlpatterns = [
         '<slug:event_slug>/',
         include([
             path('submission/', views.SubmissionOverviewView.as_view(), name='submission_overview'),
+            path('submission/ak/<int:pk>', views.AKDetailView.as_view(), name='ak_detail'),
+            path('submission/aks/', views.AKListView.as_view(), name='ak_list'),
+            path('submission/aks/type/<int:type_pk>', views.AKListByTypeView.as_view(), name='ak_list_by_type'),
+            path('submission/aks/tag/<int:tag_pk>', views.AKListByTagView.as_view(), name='ak_list_by_tag'),
         ])
     ),
 ]
diff --git a/AKSubmission/views.py b/AKSubmission/views.py
index 634334d0..08cf8ae2 100644
--- a/AKSubmission/views.py
+++ b/AKSubmission/views.py
@@ -1,11 +1,60 @@
-from django.views.generic import ListView
+from django.http import Http404
+from django.views.generic import ListView, DetailView
 
-from AKModel.models import AK
+from AKModel.models import AK, AKType, AKTag
 from AKModel.views import FilterByEventSlugMixin
 
+from django.utils.translation import gettext_lazy as _
+
 
 class SubmissionOverviewView(FilterByEventSlugMixin, ListView):
     model = AK
     context_object_name = "AKs"
     template_name = "AKSubmission/submission_overview.html"
     ordering = ["type"]
+
+
+class AKDetailView(DetailView):
+    model = AK
+    context_object_name = "ak"
+    template_name = "AKSubmission/ak_detail.html"
+
+
+class AKListView(FilterByEventSlugMixin, ListView):
+    model = AK
+    context_object_name = "AKs"
+    template_name = "AKSubmission/ak_list.html"
+    filter_condition_string = ""
+
+    def get_context_data(self, *, object_list=None, **kwargs):
+        context = super().get_context_data(object_list=object_list, **kwargs)
+        context["types"] = AKType.objects.all()
+        context["tags"] = AKTag.objects.all()
+        context["filter_condition_string"] = self.filter_condition_string
+        return context
+
+
+class AKListByTypeView(AKListView):
+    type = None
+
+    def get_queryset(self):
+        # Find type based on event slug
+        try:
+            self.type = AKType.objects.get(pk=self.kwargs['type_pk'])
+            self.filter_condition_string = f"{_('Type')} = {self.type.name}"
+        except AKType.DoesNotExist:
+            raise Http404
+        return super().get_queryset().filter(type=self.type)
+
+
+class AKListByTagView(AKListView):
+    tag = None
+
+    def get_queryset(self):
+        # Find type 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)
diff --git a/templates/base.html b/templates/base.html
index 2fca2964..669bd806 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -6,7 +6,7 @@
 <html lang="en">
 <head>
     <meta charset="UTF-8">
-    <title>AKPlanning</title>
+    <title>{% block title %}AK Planning{% endblock %}</title>
 
     {# Load Bootstrap CSS and JavaScript as well as font awesome #}
     {% bootstrap_css %}
-- 
GitLab