diff --git a/biscuit/apps/alsijil/templates/alsijil/group_week.html b/biscuit/apps/alsijil/templates/alsijil/group_week.html index 2d20aa0ef6ba9e187e46ac6727339f1c8ecfee90..959b80b5193e4e9944fe0edfe3d4741173990572 100644 --- a/biscuit/apps/alsijil/templates/alsijil/group_week.html +++ b/biscuit/apps/alsijil/templates/alsijil/group_week.html @@ -17,67 +17,53 @@ <input type="submit" value="Select" /> </form> - {% 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"> - {% for weekday, periods in periods_by_day.items %} - <h3>{{ weekday }}</h3> - <table class="table table-striped table-bordered table-hover table-responsive-xl"> - <thead> + <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> - <th>{% blocktrans %}Period{% endblocktrans %}</th> - <th>{% blocktrans %}Subject{% endblocktrans %}</th> - <th>{% blocktrans %}Teachers{% endblocktrans %}</th> + <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> - </thead> - <tbody> - {% for period in periods %} - <tr> - <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> - <div class="card-body"> - Not implemented yet. - </div> + {% endfor %} + </tbody> + </table> + {% endfor %} </div> </div> </div> - {% 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 class="col-md-5"> + <div class="card"> + <div class="card-header bg-light text-dark"> + {% blocktrans %}Personal notes{% endblocktrans %} + </div> + <div class="card-body"> + Not implemented yet. + </div> </div> </div> - {% endif %} + </div> {% endblock %} diff --git a/biscuit/apps/alsijil/views.py b/biscuit/apps/alsijil/views.py index 3a14e80158a5531beb68c6bd660509129613038e..cdf9f6b0c02455e9ababe1e0477dc198924a5756 100644 --- a/biscuit/apps/alsijil/views.py +++ b/biscuit/apps/alsijil/views.py @@ -98,25 +98,28 @@ def group_week(request: HttpRequest, week: Optional[int] = None) -> HttpResponse else: group = None - periods_by_day_unsorted = {} - if group: - for act_group in [group] + list(group.child_groups.all()): - for lesson in act_group.lessons.filter(date_start__lte=week_start, date_end__gte=week_end): - for lesson_period in lesson.lesson_periods.all(): - periods_by_day_unsorted.setdefault( - lesson_period.period.weekday, []).append(lesson_period) - - periods_by_day = OrderedDict() - for weekday, periods in sorted(periods_by_day_unsorted.items()): - periods_by_day[dict(TimePeriod.WEEKDAY_CHOICES)[weekday]] = sorted( - periods, key=lambda p: p.period.period) + if not group: + raise Http404(_('You must select a group to see the week summary.')) + + lesson_periods = LessonPeriod.objects.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'])) + ) # Add a form to filter the view select_form = SelectForm(request.GET or None) context['week'] = wanted_week context['group'] = group - context['periods_by_day'] = periods_by_day + context['lesson_periods'] = lesson_periods context['select_form'] = select_form return render(request, 'alsijil/group_week.html', context)