From e5980467cd61c8b1ccd5815911bb9eb43289eb88 Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Sat, 31 Aug 2019 18:04:21 +0200
Subject: [PATCH] Add lesson list view. Advances #11, #12.

---
 biscuit/apps/chronos/menus.py                 |  5 +++
 .../templates/chronos/lessons_list.html       | 42 +++++++++++++++++++
 biscuit/apps/chronos/urls.py                  |  1 +
 biscuit/apps/chronos/views.py                 |  6 +--
 4 files changed, 51 insertions(+), 3 deletions(-)
 create mode 100644 biscuit/apps/chronos/templates/chronos/lessons_list.html

diff --git a/biscuit/apps/chronos/menus.py b/biscuit/apps/chronos/menus.py
index 4ac8cff5..49c9fb5d 100644
--- a/biscuit/apps/chronos/menus.py
+++ b/biscuit/apps/chronos/menus.py
@@ -12,6 +12,11 @@ MENUS = {
                     'name': _('Timetable'),
                     'url': 'timetable',
                     'validators': ['menu_generator.validators.is_authenticated']
+                },
+                {
+                    'name': _('List of lessons'),
+                    'url': 'lessons_list',
+                    'validators': ['menu_generator.validators.is_authenticated']
                 }
             ]
         }
diff --git a/biscuit/apps/chronos/templates/chronos/lessons_list.html b/biscuit/apps/chronos/templates/chronos/lessons_list.html
new file mode 100644
index 00000000..b51a9c51
--- /dev/null
+++ b/biscuit/apps/chronos/templates/chronos/lessons_list.html
@@ -0,0 +1,42 @@
+{# -*- engine:django -*- #}
+{% extends "core/base.html" %}
+{% load bootstrap4 font_awesome i18n week_helpers %}
+
+{% block page_title %}
+ {% blocktrans %}List of lessons{% endblocktrans %},
+ {{ week|week_start }} - {{ week|week_end }}
+{% endblock %}
+
+{% block content %}
+ <form method="get">
+  {% csrf_token %}
+  <ul id="timetable_select_form">
+   {{ select_form.as_ul }}
+  </ul>
+  <input type="submit" value="Select" /> 
+ </form>
+
+ {% for weekday, lesson_periods_day in lesson_periods %}
+  <h3>{{ weekday }}</h3>
+  <table class="table table-striped table-bordered table-hover table-responsive-xl">
+   <thead>
+    <tr>
+     <th>{% blocktrans %}Period{% endblocktrans %}</th>
+     <th>{% blocktrans %}Groups{% endblocktans %}</th>
+     <th>{% blocktrans %}Subject{% endblocktrans %}</th>
+     <th>{% blocktrans %}Teachers{% endblocktrans %}</th>
+    </tr>
+   </thead>
+   <tbody>
+    {% for period in lesson_periods_day %}
+     <tr>
+      <td>{{ period.period.period }}</td>
+      <td>{{ period.lesson.subject.name }}</td>
+      <td>{{ period.lesson.groups|join:', ' }}</td>
+      <td>{{ period.lesson.teachers|join:', ' }}</td>
+     </tr>
+    {% endfor %}
+   </tbody>
+  </table>
+ {% endfor %}
+{% endblock %}
diff --git a/biscuit/apps/chronos/urls.py b/biscuit/apps/chronos/urls.py
index fb05d07e..0f2b804c 100644
--- a/biscuit/apps/chronos/urls.py
+++ b/biscuit/apps/chronos/urls.py
@@ -5,4 +5,5 @@ from . import views
 
 urlpatterns = [
     path('timetable', views.timetable, name='timetable'),
+    path('lessons', views.timetable, {'template': 'lessons_list'}, name='lessons_list'),
 ]
diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py
index 0e6d69da..acbf0d34 100644
--- a/biscuit/apps/chronos/views.py
+++ b/biscuit/apps/chronos/views.py
@@ -16,7 +16,7 @@ from .util import current_week
 
 
 @login_required
-def timetable(request: HttpRequest) -> HttpResponse:
+def timetable(request: HttpRequest, template: str = 'tt_week') -> HttpResponse:
     context = {}
 
     lesson_periods = LessonPeriod.objects.all()
@@ -32,7 +32,7 @@ def timetable(request: HttpRequest) -> HttpResponse:
         if 'room' in request.GET and request.GET['room']:
             lesson_periods = lesson_periods.filter(
                 room__pk=int(request.GET['room']))
-    else:
+    elif template == 'tt_week':
         # Redirect to a selected view if no filter provided
         if request.user.person:
             if request.user.person.primary_group:
@@ -77,4 +77,4 @@ def timetable(request: HttpRequest) -> HttpResponse:
     context['current_week'] = current_week()
     context['select_form'] = select_form
 
-    return render(request, 'chronos/tt_week.html', context)
+    return render(request, 'chronos/%s.html' % template, context)
-- 
GitLab