Skip to content
Snippets Groups Projects
Verified Commit b72abfa7 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

Fix bugs

parent d0c67457
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
{% 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 %}
......
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment