From 1b44092a2511367fec3bf520facf50a87a4eb100 Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Thu, 7 Jan 2021 19:49:04 +0100
Subject: [PATCH] [Data checks] Combine holiday queries to one big query

---
 aleksis/apps/alsijil/data_checks.py | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)

diff --git a/aleksis/apps/alsijil/data_checks.py b/aleksis/apps/alsijil/data_checks.py
index c1264e181..98decd9aa 100644
--- a/aleksis/apps/alsijil/data_checks.py
+++ b/aleksis/apps/alsijil/data_checks.py
@@ -123,13 +123,14 @@ class LessonDocumentationOnHolidaysDataCheck(DataCheck):
             ~Q(topic="") | ~Q(group_note="") | ~Q(homework="")
         ).annotate(actual_date=weekday_to_date)
 
+        q = Q()
         for holiday in holidays:
-            docs_filtered_by_date = documentations.filter(
-                actual_date__gte=holiday.date_start, actual_date__lte=holiday.date_end
-            )
-            for doc in docs_filtered_by_date:
-                logging.info(f"Lesson documentation {doc} is on holidays")
-                cls.register_result(doc)
+            q = q | Q(actual_date__gte=holiday.date_start, actual_date__lte=holiday.date_end)
+        documentations = documentations.filter(q)
+
+        for doc in documentations:
+            logging.info(f"Lesson documentation {doc} is on holidays")
+            cls.register_result(doc)
 
 
 class PersonalNoteOnHolidaysDataCheck(DataCheck):
@@ -158,13 +159,14 @@ class PersonalNoteOnHolidaysDataCheck(DataCheck):
             ~Q(remarks="") | Q(absent=True) | ~Q(late=0) | Q(extra_marks__isnull=False)
         ).annotate(actual_date=weekday_to_date)
 
+        q = Q()
         for holiday in holidays:
-            notes_filtered_by_date = personal_notes.filter(
-                actual_date__gte=holiday.date_start, actual_date__lte=holiday.date_end
-            )
-            for note in notes_filtered_by_date:
-                logging.info(f"Personal note {note} is on holidays")
-                cls.register_result(note)
+            q = q | Q(actual_date__gte=holiday.date_start, actual_date__lte=holiday.date_end)
+        personal_notes = personal_notes.filter(q)
+
+        for note in personal_notes:
+            logging.info(f"Personal note {note} is on holidays")
+            cls.register_result(note)
 
 
 class ExcusesWithoutAbsences(DataCheck):
-- 
GitLab