From 4ea7bf88338df2603ad3bcde7134bfdea6e05a5b Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Wed, 16 Dec 2020 12:23:56 +0100
Subject: [PATCH] Delete all substitutions and supervision substitutions which
 are out of validity

Out of validity = Linked to a validity, but the validity range ends before the substitution's date

Close #15
---
 .../untis/util/mysql/importers/substitutions.py    | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/aleksis/apps/untis/util/mysql/importers/substitutions.py b/aleksis/apps/untis/util/mysql/importers/substitutions.py
index 42f51a3..30efbb0 100644
--- a/aleksis/apps/untis/util/mysql/importers/substitutions.py
+++ b/aleksis/apps/untis/util/mysql/importers/substitutions.py
@@ -235,13 +235,16 @@ def import_substitutions(
                         logger.info("  Supervision substitution updated")
 
     # Delete all no longer existing substitutions
-    for s in chronos_models.LessonSubstitution.objects.within_dates(
+    lesson_substitutions_in_range = chronos_models.LessonSubstitution.objects.within_dates(
         validity_range.date_start, validity_range.date_end
-    ):
+    )
+    for s in lesson_substitutions_in_range:
         if s.import_ref_untis and s.import_ref_untis not in existing_subs:
             logger.info("Substitution {} deleted".format(s.id))
             s.delete()
 
+    lesson_substitutions_in_range.exclude(lesson_period__lesson__validity=validity_range).delete()
+
     # Delete all no longer existing extra lessons
     for s in chronos_models.ExtraLesson.objects.within_dates(
         validity_range.date_start, validity_range.date_end
@@ -251,9 +254,12 @@ def import_substitutions(
             s.delete()
 
     # Delete all no longer existing supervision substitutions
-    for s in chronos_models.SupervisionSubstitution.objects.filter(
+    supervision_substitutions_in_range = chronos_models.SupervisionSubstitution.objects.filter(
         date__gte=validity_range.date_start, date__lte=validity_range.date_end
-    ):
+    )
+    for s in supervision_substitutions_in_range:
         if s.import_ref_untis and s.import_ref_untis not in existing_subs:
             logger.info("Supervision substitution {} deleted".format(s.id))
             s.delete()
+
+    supervision_substitutions_in_range.exclude(supervision__validity=validity_range).delete()
-- 
GitLab