Skip to content
Snippets Groups Projects

Turn group week view into general week view.

Merged Tom Teichler requested to merge 34-turn-group-week-view-into-general-week-view into master
Compare and
1 file
+ 18
13
Compare changes
  • Side-by-side
  • Inline
@@ -98,18 +98,12 @@ def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[
else:
wanted_week = CalendarWeek()
if request.GET.get('group', None):
# Use requested group
group = Group.objects.get(pk=request.GET['group'])
elif hasattr(request, 'user') and hasattr(request.user, 'person'):
# Try to select group from owned groups of user
group = request.user.person.owner_of.first()
lesson_periods = if year and week:
wanted_week = CalendarWeek(year=year, week=week)
else:
group = None
wanted_week = CalendarWeek()
if group:
# Get all lesson periods for the selected group
lesson_periods = LessonPeriod.objects.annotate(
lesson_periods = LessonPeriod.objects.annotate(
has_documentation=Exists(LessonDocumentation.objects.filter(
~Q(topic__exact=''),
lesson_period=OuterRef('pk'),
@@ -124,9 +118,20 @@ def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[
'lesson__groups', 'lesson__teachers', 'substitutions'
).extra(
select={'_week': wanted_week.week}
).filter(
Q(lesson__groups=group) | Q(lesson__groups__parent_groups=group)
).distinct()
)
if request.GET.get('group', None) or request.GET.get('teacher', None) or request.GET.get('room', None):
# Incrementally filter lesson periods by GET parameters
if 'group' in request.GET and request.GET['group']:
lesson_periods = lesson_periods.filter(
Q(lesson__groups__pk=int(request.GET['group'])) | Q(lesson__groups__parent_groups__pk=int(request.GET['group'])))
if 'teacher' in request.GET and request.GET['teacher']:
lesson_periods = lesson_periods.filter(
Q(substitutions__teachers__pk=int(request.GET['teacher']), substitutions__week=wanted_week.week) | Q(lesson__teachers__pk=int(request.GET['teacher'])))
if 'room' in request.GET and request.GET['room']:
lesson_periods = lesson_periods.filter(
room__pk=int(request.GET['room']))
# Aggregate all personal notes for this group and week
persons = Person.objects.filter(
Loading