Skip to content
Snippets Groups Projects
Verified Commit c1251dd4 authored by magicfelix's avatar magicfelix
Browse files

Prevent double counting of absences

parent 5e691110
No related branches found
No related tags found
1 merge request!273Draft: Resolve "Prevent double counting of absences"
Pipeline #107688 failed
......@@ -420,21 +420,34 @@ def generate_person_list_with_class_register_statistics(
persons = persons.select_related("primary_group", "primary_group__school_term").order_by(
"last_name", "first_name"
)
available_personal_notes = (
PersonalNote.objects.filter(
Q(event__in=events)
| Q(lesson_period__in=lesson_periods)
| Q(extra_lesson__in=extra_lessons)
)
.order_by("person__id")
.distinct()
)
if get_site_preferences()["alsijil__merge_personal_notes_of_parallel_lessons"]:
available_personal_notes = available_personal_notes.distinct(
"year",
"week",
"lesson_period__period__weekday",
"lesson_period__period__period",
"person__last_name",
"person__first_name",
"person__id",
)
persons = persons.annotate(
filtered_personal_notes=FilteredRelation(
"personal_notes",
condition=(
Q(personal_notes__event__in=events)
| Q(personal_notes__lesson_period__in=lesson_periods)
| Q(personal_notes__extra_lesson__in=extra_lessons)
),
"personal_notes", condition=Q(personal_notes__in=available_personal_notes)
)
).annotate(
absences_count=Count(
"filtered_personal_notes",
filter=Q(filtered_personal_notes__absent=True)
& ~Q(filtered_personal_notes__excuse_type__count_as_absent=False),
distinct=True,
),
excused=Count(
"filtered_personal_notes",
......@@ -443,7 +456,6 @@ def generate_person_list_with_class_register_statistics(
filtered_personal_notes__excused=True,
)
& ~Q(filtered_personal_notes__excuse_type__count_as_absent=False),
distinct=True,
),
excused_without_excuse_type=Count(
"filtered_personal_notes",
......@@ -452,16 +464,16 @@ def generate_person_list_with_class_register_statistics(
filtered_personal_notes__excused=True,
filtered_personal_notes__excuse_type__isnull=True,
),
distinct=True,
),
unexcused=Count(
"filtered_personal_notes",
filter=Q(filtered_personal_notes__absent=True, filtered_personal_notes__excused=False),
distinct=True,
),
tardiness=Sum("filtered_personal_notes__tardiness"),
tardiness_count=Count(
"filtered_personal_notes", filter=Q(filtered_personal_notes__tardiness__gt=0), distinct=True
"filtered_personal_notes",
filter=Q(filtered_personal_notes__tardiness__gt=0),
distinct=True,
),
)
......
......@@ -120,6 +120,14 @@ class GroupOwnersCanAssignRolesToParents(BooleanPreference):
)
@site_preferences_registry.register
class MergePersonalNotesOfParallelLessons(BooleanPreference):
section = alsijil
name = "merge_personal_notes_of_parallel_lessons"
default = False
verbose_name = _("Merge the personal notes of parallel lessons")
@person_preferences_registry.register
class ShowGroupRolesInWeekView(BooleanPreference):
section = alsijil
......
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