From 0a33cbb2060e792096e8a7665bc1b5cf41bc1e36 Mon Sep 17 00:00:00 2001
From: Dominik George <dominik.george@teckids.org>
Date: Wed, 4 Sep 2019 20:25:33 +0200
Subject: [PATCH] Revert change to 404 error if group not found in class
 register.

It accidentally removed the possibility to select a group manually.
---
 .../alsijil/templates/alsijil/group_week.html | 151 ++++++++++--------
 biscuit/apps/alsijil/views.py                 |  69 ++++----
 2 files changed, 118 insertions(+), 102 deletions(-)

diff --git a/biscuit/apps/alsijil/templates/alsijil/group_week.html b/biscuit/apps/alsijil/templates/alsijil/group_week.html
index 319911a3d..43e221409 100644
--- a/biscuit/apps/alsijil/templates/alsijil/group_week.html
+++ b/biscuit/apps/alsijil/templates/alsijil/group_week.html
@@ -17,79 +17,94 @@
     <input type="submit" value="Select" />
   </form>
 
-  <div class="row">
-    <div class="col-md-7">
-      <div class="card">
-        <div class="card-header bg-light text-dark">
-          {% blocktrans %}Week{% endblocktrans %}
-          {{ week }} ({{ week|week_start }} — {{ week|week_end }}),
-          {{ group.name }}
-        </div>
-        <div class="card-body">
-          {% regroup lesson_periods by period.weekday as periods_by_day %}
-          {% for weekday, periods in periods_by_day.items %}
-            <h3>{{ weekday }}</h3>
-            <table class="table table-striped table-bordered table-hover table-responsive-xl">
-              <thead>
-                <tr>
-                  <th>{% blocktrans %}Period{% endblocktrans %}</th>
-                  <th>{% blocktrans %}Subject{% endblocktrans %}</th>
-                  <th>{% blocktrans %}Teachers{% endblocktrans %}</th>
-                </tr>
-              </thead>
-              <tbody>
-                {% for period in periods %}
-                  <tr class="
-                    {% if period.has_documentation %}
-                      table-success
-                    {% else %}
-                      {% weekday_to_date week weekday as current_date %}
-                      {% today as today %}
-                      {% if current_date < today %}
-                        table-danger
-                      {% endif %}
-                    {% endif %}
-                  ">
-                    <td>{{ period.period.period }}</td>
-                    <td>
-                      <a href="{% url 'lesson_by_week_and_period' week period.id %}">
-                        {{ period.lesson.subject.name }}
-                      </a>
-                    </td>
-                    <td>{{ period.lesson.teacher_names }}</td>
+  {% if group %}
+    <div class="row">
+      <div class="col-md-7">
+        <div class="card">
+          <div class="card-header bg-light text-dark">
+            {% blocktrans %}Week{% endblocktrans %}
+            {{ week }} ({{ week|week_start }} — {{ week|week_end }}),
+            {{ group.name }}
+          </div>
+          <div class="card-body">
+            {% regroup lesson_periods by period.weekday as periods_by_day %}
+            {% for weekday, periods in periods_by_day.items %}
+              <h3>{{ weekday }}</h3>
+              <table class="table table-striped table-bordered table-hover table-responsive-xl">
+                <thead>
+                  <tr>
+                    <th>{% blocktrans %}Period{% endblocktrans %}</th>
+                    <th>{% blocktrans %}Subject{% endblocktrans %}</th>
+                    <th>{% blocktrans %}Teachers{% endblocktrans %}</th>
                   </tr>
-                {% endfor %}
-              </tbody>
-            </table>
+                </thead>
+                <tbody>
+                  {% for period in periods %}
+                    <tr class="
+                      {% if period.has_documentation %}
+                        table-success
+                      {% else %}
+                        {% weekday_to_date week weekday as current_date %}
+                        {% today as today %}
+                        {% if current_date < today %}
+                          table-danger
+                        {% endif %}
+                      {% endif %}
+                    ">
+                      <td>{{ period.period.period }}</td>
+                      <td>
+                        <a href="{% url 'lesson_by_week_and_period' week period.id %}">
+                          {{ period.lesson.subject.name }}
+                        </a>
+                      </td>
+                      <td>{{ period.lesson.teacher_names }}</td>
+                    </tr>
+                  {% endfor %}
+                </tbody>
+              </table>
+            {% endfor %}
+          </div>
+        </div>
+      </div>
+      <div class="col-md-5">
+        <div class="card">
+          <div class="card-header bg-light text-dark">
+            {% blocktrans %}Personal notes{% endblocktrans %}
+          </div>
+          {% for person in persons %}
+            <div class="card-body">
+              <h5 class="card-title">{{ person.full_name }}</h5>
+              <p class="card-text">
+                {% trans "Absent" %}: {{ person.absences }}
+                ({{ person.unexcused }} {% trans "unexcused" %})
+              </p>
+              <p class="card-text">
+                {% trans "Summed up tardiness" %}: {{ person.tardiness }}
+              </p>
+              {% for note in person.personal_notes %}
+                {% if note.remarks %}
+                  <p class="card-text">
+                    {{ note.remarks }}
+                  </p>
+                {% endif %}
+              {% endfor %}
+            </div>
           {% endfor %}
         </div>
       </div>
     </div>
-    <div class="col-md-5">
-      <div class="card">
-        <div class="card-header bg-light text-dark">
-          {% blocktrans %}Personal notes{% endblocktrans %}
-        </div>
-        {% for person in persons %}
-          <div class="card-body">
-            <h5 class="card-title">{{ person.full_name }}</h5>
-            <p class="card-text">
-              {% trans "Absent" %}: {{ person.absences }}
-              ({{ person.unexcused }} {% trans "unexcused" %})
-            </p>
-            <p class="card-text">
-              {% trans "Summed up tardiness" %}: {{ person.tardiness }}
-            </p>
-            {% for note in person.personal_notes %}
-              {% if note.remarks %}
-                <p class="card-text">
-                  {{ note.remarks }}
-                </p>
-              {% endif %}
-            {% endfor %}
-          </div>
-        {% endfor %}
+  {% else %}
+    <div class="card text-white bg-danger">
+      <div class="card-header">
+        {% blocktrans %}No group selected{% endblocktrans %}
+      </div>
+      <div class="card-body">
+        <p>
+          {% blocktrans %}
+            You must select a group to see the week summary.
+          {% endblocktrans %}
+        </p>
       </div>
     </div>
-  </div>
+  {% endif %}
 {% endblock %}
diff --git a/biscuit/apps/alsijil/views.py b/biscuit/apps/alsijil/views.py
index b488a8cd1..600f38455 100644
--- a/biscuit/apps/alsijil/views.py
+++ b/biscuit/apps/alsijil/views.py
@@ -98,40 +98,41 @@ def group_week(request: HttpRequest, week: Optional[int] = None) -> HttpResponse
     else:
         group = None
 
-    if not group:
-        raise Http404(_('You must select a group to see the week summary.'))
-
-    # Get all lesson periods for the selected group
-    lesson_periods = LessonPeriod.objects.annotate(
-        has_documentation=Exists(LessonDocumentation.objects.filter(
-            ~Q(topic__exact=''),
-            lesson_period=OuterRef('pk')
-        ))
-    ).filter(
-        lesson__date_start__lte=week_start,
-        lesson__date_end__gte=week_end
-    ).select_related(
-        'lesson', 'lesson__subject', 'period', 'room'
-    ).prefetch_related(
-        'lesson__groups', 'lesson__teachers', 'substitutions'
-    ).extra(
-        select={'_week': wanted_week}
-    ).filter(
-        Q(lesson__groups__pk=int(request.GET['group'])) | Q(lesson__groups__parent_groups__pk=int(request.GET['group']))
-    )
-
-    # Aggregate all personal notes for this group and week
-    persons = Person.objects.filter(
-        is_active=True
-    ).filter(
-        Q(member_of=group) | Q(member_of__parent_groups=group)
-    ).prefetch_related(
-        'personal_notes'
-    ).annotate(
-        absences=Count('personal_notes__absent', filter=Q(week=wanted_week, absent=True)),
-        unexcused=Count('personal_notes__absent', filter=Q(week=wanted_week, absent=True, excused=False)),
-        tardiness=Sum('personal_notes__tardiness', filter=Q(week=wanted_week))
-    )
+    if group:
+        # Get all lesson periods for the selected group
+        lesson_periods = LessonPeriod.objects.annotate(
+            has_documentation=Exists(LessonDocumentation.objects.filter(
+                ~Q(topic__exact=''),
+                lesson_period=OuterRef('pk')
+            ))
+        ).filter(
+            lesson__date_start__lte=week_start,
+            lesson__date_end__gte=week_end
+        ).select_related(
+            'lesson', 'lesson__subject', 'period', 'room'
+        ).prefetch_related(
+            'lesson__groups', 'lesson__teachers', 'substitutions'
+        ).extra(
+            select={'_week': wanted_week}
+        ).filter(
+            Q(lesson__groups__pk=int(request.GET['group'])) | Q(lesson__groups__parent_groups__pk=int(request.GET['group']))
+        )
+
+        # Aggregate all personal notes for this group and week
+        persons = Person.objects.filter(
+            is_active=True
+        ).filter(
+            Q(member_of=group) | Q(member_of__parent_groups=group)
+        ).prefetch_related(
+            'personal_notes'
+        ).annotate(
+            absences=Count('personal_notes__absent', filter=Q(week=wanted_week, absent=True)),
+            unexcused=Count('personal_notes__absent', filter=Q(week=wanted_week, absent=True, excused=False)),
+            tardiness=Sum('personal_notes__tardiness', filter=Q(week=wanted_week))
+        )
+    else:
+        lesson_periods = None
+        persons = None
 
     # Add a form to filter the view
     select_form = SelectForm(request.GET or None)
-- 
GitLab