Skip to content
Snippets Groups Projects

Resolve "[SQL] Monster query on personal notes"

Merged Nik | Klampfradler requested to merge 128-sql-monster-query-on-personal-notes into master
1 file
+ 55
51
Compare changes
  • Side-by-side
  • Inline
@@ -279,62 +279,66 @@ def generate_person_list_with_class_register_statistics(
@@ -279,62 +279,66 @@ def generate_person_list_with_class_register_statistics(
if persons is None:
if persons is None:
persons = self.members.all()
persons = self.members.all()
persons = persons.filter(
persons = (
personal_notes__groups_of_person=self,
persons.filter(
personal_notes__lesson_period__lesson__validity__school_term=self.school_term,
personal_notes__groups_of_person=self,
).annotate(
personal_notes__lesson_period__lesson__validity__school_term=self.school_term,
absences_count=Count(
)
"personal_notes__absent",
.distinct()
filter=Q(
.annotate(
personal_notes__absent=True,
absences_count=Count(
personal_notes__lesson_period__lesson__validity__school_term=self.school_term,
"personal_notes__absent",
)
filter=Q(
& (
personal_notes__absent=True,
Q(personal_notes__lesson_period__lesson__groups=self)
personal_notes__lesson_period__lesson__validity__school_term=self.school_term,
| Q(personal_notes__lesson_period__lesson__groups__parent_groups=self)
)
 
& (
 
Q(personal_notes__lesson_period__lesson__groups=self)
 
| Q(personal_notes__lesson_period__lesson__groups__parent_groups=self)
 
),
),
),
),
excused=Count(
excused=Count(
"personal_notes__absent",
"personal_notes__absent",
filter=Q(
filter=Q(
personal_notes__absent=True,
personal_notes__absent=True,
personal_notes__excused=True,
personal_notes__excused=True,
personal_notes__excuse_type__isnull=True,
personal_notes__excuse_type__isnull=True,
personal_notes__lesson_period__lesson__validity__school_term=self.school_term,
personal_notes__lesson_period__lesson__validity__school_term=self.school_term,
)
)
& (
& (
Q(personal_notes__lesson_period__lesson__groups=self)
Q(personal_notes__lesson_period__lesson__groups=self)
| Q(personal_notes__lesson_period__lesson__groups__parent_groups=self)
| Q(personal_notes__lesson_period__lesson__groups__parent_groups=self)
),
),
),
),
unexcused=Count(
unexcused=Count(
"personal_notes__absent",
"personal_notes__absent",
filter=Q(
filter=Q(
personal_notes__absent=True,
personal_notes__absent=True,
personal_notes__excused=False,
personal_notes__excused=False,
personal_notes__lesson_period__lesson__validity__school_term=self.school_term,
personal_notes__lesson_period__lesson__validity__school_term=self.school_term,
)
)
& (
& (
Q(personal_notes__lesson_period__lesson__groups=self)
Q(personal_notes__lesson_period__lesson__groups=self)
| Q(personal_notes__lesson_period__lesson__groups__parent_groups=self)
| Q(personal_notes__lesson_period__lesson__groups__parent_groups=self)
),
),
),
),
tardiness=Sum(
tardiness=Sum(
"personal_notes__late",
"personal_notes__late",
filter=(
filter=(
Q(personal_notes__lesson_period__lesson__groups=self)
Q(personal_notes__lesson_period__lesson__groups=self)
| Q(personal_notes__lesson_period__lesson__groups__parent_groups=self)
| Q(personal_notes__lesson_period__lesson__groups__parent_groups=self)
),
),
),
),
tardiness_count=Count(
tardiness_count=Count(
"personal_notes",
"personal_notes",
filter=~Q(personal_notes__late=0)
filter=~Q(personal_notes__late=0)
& Q(personal_notes__lesson_period__lesson__validity__school_term=self.school_term,)
& Q(personal_notes__lesson_period__lesson__validity__school_term=self.school_term,)
& (
& (
Q(personal_notes__lesson_period__lesson__groups=self)
Q(personal_notes__lesson_period__lesson__groups=self)
| Q(personal_notes__lesson_period__lesson__groups__parent_groups=self)
| Q(personal_notes__lesson_period__lesson__groups__parent_groups=self)
),
),
),
),
)
)
)
for extra_mark in ExtraMark.objects.all():
for extra_mark in ExtraMark.objects.all():
Loading