From b72abfa7fac77ac85fbff3e2598b53541fe44c59 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Sun, 3 May 2020 17:37:10 +0200 Subject: [PATCH] Fix bugs --- aleksis/apps/chronos/managers.py | 47 ++++++++++--------- .../chronos/partials/groups_part.html | 2 +- aleksis/apps/chronos/views.py | 9 ++-- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/aleksis/apps/chronos/managers.py b/aleksis/apps/chronos/managers.py index 2f32a3e4..c3be80b6 100644 --- a/aleksis/apps/chronos/managers.py +++ b/aleksis/apps/chronos/managers.py @@ -70,6 +70,29 @@ class WeekQuerySetMixin: return self.annotate(_week=models.Value(week_num, models.IntegerField())) +class GroupByPeriodsMixin: + def group_by_periods(self, is_person: bool = False) -> dict: + """Group a QuerySet of objects with attribute period by period numbers and weekdays.""" + + per_period = {} + for obj in self: + period = obj.period.period + weekday = obj.period.weekday + + if period not in per_period: + per_period[period] = [] if is_person else {} + + if not is_person and weekday not in per_period[period]: + per_period[period][weekday] = [] + + if is_person: + per_period[period].append(obj) + else: + per_period[period][weekday].append(obj) + + return per_period + + class LessonDataQuerySet(models.QuerySet, WeekQuerySetMixin): """ Overrides default QuerySet to add specific methods for lesson data. """ @@ -174,26 +197,6 @@ class LessonDataQuerySet(models.QuerySet, WeekQuerySetMixin): return qs1.union(qs2) - def group_by_periods(self, is_person: bool = False) -> dict: - """Group a QuerySet of objects with attribute period by period numbers and weekdays.""" - - per_period = {} - for obj in self: - period = obj.period.period - weekday = obj.period.weekday - - if period not in per_period: - per_period[period] = [] if is_person else {} - - if not is_person and weekday not in per_period[period]: - per_period[period][weekday] = [] - - if is_person: - per_period[period].append(obj) - else: - per_period[period][weekday].append(obj) - - return per_period def filter_from_type( self, type_: TimetableType, pk: int @@ -262,7 +265,7 @@ class LessonDataQuerySet(models.QuerySet, WeekQuerySetMixin): return self.annotate_week(week).all()[next_index] -class LessonPeriodQuerySet(LessonDataQuerySet): +class LessonPeriodQuerySet(LessonDataQuerySet, GroupByPeriodsMixin): """QuerySet with custom query methods for lesson periods.""" _period_path = "" @@ -467,7 +470,7 @@ class EventQuerySet(DateRangeQuerySet, TimetableQuerySet): return self.annotate(_date=models.Value(day, models.DateField())) -class ExtraLessonQuerySet(TimetableQuerySet): +class ExtraLessonQuerySet(TimetableQuerySet, GroupByPeriodsMixin): """QuerySet with custom query methods for extra lessons.""" _multiple_rooms = False diff --git a/aleksis/apps/chronos/templates/chronos/partials/groups_part.html b/aleksis/apps/chronos/templates/chronos/partials/groups_part.html index 0cae5bce..60980ace 100644 --- a/aleksis/apps/chronos/templates/chronos/partials/groups_part.html +++ b/aleksis/apps/chronos/templates/chronos/partials/groups_part.html @@ -1,4 +1,4 @@ -{% if groups.count > request.site.preferences.chronos__shorten_groups_limit and request.user.preferences.chronos__shorten_groups %} +{% if groups.count > request.site.preferences.chronos__shorten_groups_limit and request.user.person.preferences.chronos__shorten_groups %} {% include "components/text_collapsible.html" with template="chronos/partials/group.html" qs=groups %} {% else %} {% for group in groups %} diff --git a/aleksis/apps/chronos/views.py b/aleksis/apps/chronos/views.py index 532d0ed9..22f0eced 100644 --- a/aleksis/apps/chronos/views.py +++ b/aleksis/apps/chronos/views.py @@ -135,6 +135,9 @@ def timetable( el = get_el_by_pk(request, type_, pk) + if type(el) == HttpResponseNotFound: + return HttpResponseNotFound() + type_ = TimetableType.from_string(type_) if year and week: @@ -164,7 +167,7 @@ def timetable( context["smart"] = is_smart context["week_select"] = { "year": wanted_week.year, - "dest": reverse("timetable", args=[type_, pk]), + "dest": reverse("timetable", args=[type_.value, pk]), } if is_smart: @@ -178,10 +181,10 @@ def timetable( week_next = wanted_week + 1 context["url_prev"] = reverse( - "timetable_by_week", args=[type_, pk, week_prev.year, week_prev.week] + "timetable_by_week", args=[type_.value, pk, week_prev.year, week_prev.week] ) context["url_next"] = reverse( - "timetable_by_week", args=[type_, pk, week_next.year, week_next.week] + "timetable_by_week", args=[type_.value, pk, week_next.year, week_next.week] ) return render(request, "chronos/timetable.html", context) -- GitLab