Skip to content
Snippets Groups Projects
Verified Commit c7ce2dc7 authored by Tom Teichler's avatar Tom Teichler :beers:
Browse files

Add filter. Advances #34.

parent 880f9d8b
No related branches found
No related tags found
No related merge requests found
......@@ -128,34 +128,77 @@ def group_week(request: HttpRequest, year: Optional[int] = None, week: Optional[
Q(lesson__groups=group) | Q(lesson__groups__parent_groups=group)
).distinct()
# Aggregate all personal notes for this group and week
persons = Person.objects.filter(
is_active=True
elif teacher:
# Get all lesson periods for the selected teacher
lesson_periods = LessonPeriod.objects.annotate(
has_documentation=Exists(LessonDocumentation.objects.filter(
~Q(topic__exact=''),
lesson_period=OuterRef('pk'),
week=wanted_week.week
))
).filter(
Q(member_of=group) | Q(member_of__parent_groups=group)
).distinct().prefetch_related(
'personal_notes'
).annotate(
absences=Count('personal_notes__absent', filter=Q(
personal_notes__lesson_period__in=lesson_periods,
personal_notes__week=wanted_week.week,
personal_notes__absent=True
)),
unexcused=Count('personal_notes__absent', filter=Q(
personal_notes__lesson_period__in=lesson_periods,
personal_notes__week=wanted_week.week,
personal_notes__absent=True,
personal_notes__excused=False
)),
tardiness=Sum('personal_notes__late', filter=Q(
personal_notes__lesson_period__in=lesson_periods,
personal_notes__week=wanted_week.week
lesson__date_start__lte=wanted_week[0] + timedelta(days=1) * (F('period__weekday') - 1),
lesson__date_end__gte=wanted_week[0] + timedelta(days=1) * (F('period__weekday') - 1)
).select_related(
'lesson', 'lesson__subject', 'period', 'room'
).prefetch_related(
'lesson__groups', 'lesson__teachers', 'substitutions'
).extra(
select={'_week': wanted_week.week}
).filter(
Q(lesson__teachers=teachers)
).distinct()
elif room:
# Get all lesson periods for the selected teacher
lesson_periods = LessonPeriod.objects.annotate(
has_documentation=Exists(LessonDocumentation.objects.filter(
~Q(topic__exact=''),
lesson_period=OuterRef('pk'),
week=wanted_week.week
))
)
).filter(
lesson__date_start__lte=wanted_week[0] + timedelta(days=1) * (F('period__weekday') - 1),
lesson__date_end__gte=wanted_week[0] + timedelta(days=1) * (F('period__weekday') - 1)
).select_related(
'lesson', 'lesson__subject', 'period', 'room'
).prefetch_related(
'lesson__groups', 'lesson__teachers', 'substitutions'
).extra(
select={'_week': wanted_week.week}
).filter(
Q(room=room)
).distinct()
else:
lesson_periods = None
persons = None
# 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)
).distinct().prefetch_related(
'personal_notes'
).annotate(
absences=Count('personal_notes__absent', filter=Q(
personal_notes__lesson_period__in=lesson_periods,
personal_notes__week=wanted_week.week,
personal_notes__absent=True
)),
unexcused=Count('personal_notes__absent', filter=Q(
personal_notes__lesson_period__in=lesson_periods,
personal_notes__week=wanted_week.week,
personal_notes__absent=True,
personal_notes__excused=False
)),
tardiness=Sum('personal_notes__late', filter=Q(
personal_notes__lesson_period__in=lesson_periods,
personal_notes__week=wanted_week.week
))
)
# Add a form to filter the view
select_form = SelectForm(request.GET or None)
......
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