From 08ff6b8aa8f7c65f30f558ee11e2879d558d9f2d Mon Sep 17 00:00:00 2001
From: Tom Teichler <tom.teichler@teckids.org>
Date: Thu, 22 Aug 2019 21:47:42 +0200
Subject: [PATCH] Add view for all lessons on a day. Advances #19.

---
 biscuit/apps/chronos/menus.py                  |  5 +++++
 biscuit/apps/chronos/tables.py                 | 13 +++++++++++++
 .../chronos/templates/chronos/lessons.html     | 14 ++++++++++++++
 biscuit/apps/chronos/urls.py                   |  1 +
 biscuit/apps/chronos/views.py                  | 18 ++++++++++++++++++
 5 files changed, 51 insertions(+)
 create mode 100644 biscuit/apps/chronos/tables.py
 create mode 100644 biscuit/apps/chronos/templates/chronos/lessons.html

diff --git a/biscuit/apps/chronos/menus.py b/biscuit/apps/chronos/menus.py
index 2d81f31e..a3ced231 100644
--- a/biscuit/apps/chronos/menus.py
+++ b/biscuit/apps/chronos/menus.py
@@ -11,6 +11,11 @@ MENUS = {
                     'name': _('Timetable'),
                     'url': 'timetable',
                     'validators': ['menu_generator.validators.is_authenticated', 'menu_generator.validators.is_superuser']
+                },
+                {
+                    'name': _('Lessons'),
+                    'url': 'lessons',
+                    'validators': ['menu_generator.validators.is_authenticated', 'menu_generator.validators.is_superuser']
                 }
             ]
         }
diff --git a/biscuit/apps/chronos/tables.py b/biscuit/apps/chronos/tables.py
new file mode 100644
index 00000000..f19deaea
--- /dev/null
+++ b/biscuit/apps/chronos/tables.py
@@ -0,0 +1,13 @@
+from django.utils.translation import ugettext_lazy as _
+import django_tables2 as tables
+from django_tables2.utils import A
+
+
+class LessonsTable(tables.Table):
+    class Meta:
+        attrs = {'class': 'table table-striped table-bordered table-hover table-responsive-xl'}
+
+    subject = tables.LinkColumn('substitution_by_id', args=[A('id')])
+    teachers = tables.LinkColumn('substitution_by_id', args=[A('id')])
+    periods = tables.LinkColumn('substitution_by_id', args=[A('id')])
+    groups = tables.LinkColumn('substitution_by_id', args=[A('id')])
diff --git a/biscuit/apps/chronos/templates/chronos/lessons.html b/biscuit/apps/chronos/templates/chronos/lessons.html
new file mode 100644
index 00000000..07316ccb
--- /dev/null
+++ b/biscuit/apps/chronos/templates/chronos/lessons.html
@@ -0,0 +1,14 @@
+{% extends "core/base.html" %}
+{% load bootstrap4 i18n %}
+{% load render_table from django_tables2 %}
+
+{% block page_title %}{% blocktrans %}Lessons{% endblocktrans %}{% endblock %}
+
+{% block content %}
+ <h2>
+  {% blocktrans %}List of all Lessons{% endblocktrans %}
+ </h2>
+
+ {% render_table lessons_table %}
+
+{% endblock %}
diff --git a/biscuit/apps/chronos/urls.py b/biscuit/apps/chronos/urls.py
index fb05d07e..f1eb9a17 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.lessons, name='lessons'),
 ]
diff --git a/biscuit/apps/chronos/views.py b/biscuit/apps/chronos/views.py
index 9659dd63..7d876204 100644
--- a/biscuit/apps/chronos/views.py
+++ b/biscuit/apps/chronos/views.py
@@ -1,4 +1,5 @@
 from collections import OrderedDict
+from datetime import datetime
 
 from django.contrib.auth.decorators import login_required
 from django.http import HttpRequest, HttpResponse
@@ -11,6 +12,7 @@ from biscuit.core.models import Group, Person
 
 from .models import LessonPeriod, TimePeriod, Room
 from .util import current_week
+from .tables import LessonsTable
 
 
 @login_required
@@ -78,3 +80,19 @@ def timetable(request: HttpRequest) -> HttpResponse:
     context['current_week'] = current_week()
 
     return render(request, 'chronos/tt_week.html', context)
+
+@login_required
+@admin_required
+def lessons(request: HttpRequest) -> HttpResponse:
+    context = {}
+
+    today = datetime.today()
+
+    lessons = Lesson.objects.filter(date_start=today)
+
+    # Build table
+    lessons_table = LessonsTable(lessons)
+    RequestConfig(request).configure(lessons_table)
+    context['lessons_table'] = lessons_table
+
+    return render(request, 'chronos/lessons.html', context)
-- 
GitLab