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