From 8a2a6ea6c7a0cc2f5e008abacc8724a96542710a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20K=C3=BCnsem=C3=B6ller?=
 <jkuensem@physik.uni-bielefeld.de>
Date: Wed, 6 Nov 2024 11:30:01 +0100
Subject: [PATCH 1/3] TMSS-2808: fix time inversion issue with some units

---
 .../backend/src/tmss/tmssapp/adapters/reports.py | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
index c94deff12f0..cd95145f8e7 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
@@ -69,11 +69,14 @@ class CycleReport():
         # by the cycle. (No need to handle the parts outside the cycle because these time are not included anyway.)
         # Note: we do not use self.subs here because we purposefully do not want to filter on projects etc.
         for sub in models.SchedulingUnitBlueprint.objects.filter(on_sky_start_time__lt=stop, on_sky_stop_time__gt=start)\
+                                                         .filter(on_sky_start_time__lt=F('on_sky_stop_time'))\
                                                          .only('on_sky_start_time', 'on_sky_stop_time'):
-            new_idle_ranges = []
-            for range in idle_ranges:
-                new_idle_ranges += range.subtract(DateTimeRange(sub.on_sky_start_time, sub.on_sky_stop_time))
-            idle_ranges = new_idle_ranges
+            if sub.on_sky_start_time < sub.on_sky_stop_time:
+                new_idle_ranges = []
+                sub_range = DateTimeRange(sub.on_sky_start_time, sub.on_sky_stop_time)
+                for range in idle_ranges:
+                    new_idle_ranges += range.subtract(sub_range)
+                idle_ranges = new_idle_ranges
 
         idle_seconds = sum([range.get_timedelta_second() for range in idle_ranges])
         return idle_seconds
@@ -360,8 +363,9 @@ class CycleReport():
         standalone_reservations = [res for res in standalone_reservations if len(res.specifications_doc.get('resources', {}).get('stations', [])) >= 3]
 
         # Determine scheduling units in reporting period
-        # Note: we do not use self.subs because we purposefully do not want to filter for projects etc here.  # todo: correct?
-        subs_in_period = models.SchedulingUnitBlueprint.objects.filter(on_sky_start_time__lt=stop, on_sky_stop_time__gt=start)
+        # Note: we do not use self.subs because we purposefully do not want to filter for projects etc here.
+        subs_in_period = models.SchedulingUnitBlueprint.objects.filter(on_sky_start_time__lt=stop, on_sky_stop_time__gt=start)\
+                                                               .filter(on_sky_start_time__lt=F('on_sky_stop_time'))
         ilt_stations = ['DE601', 'DE602', 'DE603', 'DE604', 'DE605', 'DE609', 'FR606', 'SE607', 'UK608', 'PL610', 'PL611', 'PL612', 'IE613', 'LV614']
         subs_in_period_int = subs_in_period.filter(task_blueprints__subtasks__specifications_doc__stations__overlap=ilt_stations) \
                              | subs_in_period.filter (task_blueprints__subtasks__specifications_doc__station_list__overlap=ilt_stations)
-- 
GitLab


From c9fd70fb10786f28f7579e031c3ece2203a6ab8d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20K=C3=BCnsem=C3=B6ller?=
 <jkuensem@physik.uni-bielefeld.de>
Date: Wed, 6 Nov 2024 11:54:52 +0100
Subject: [PATCH 2/3] TMSS-2808: fix time inversion issue with some units

---
 SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
index cd95145f8e7..746985f52af 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
@@ -71,11 +71,11 @@ class CycleReport():
         for sub in models.SchedulingUnitBlueprint.objects.filter(on_sky_start_time__lt=stop, on_sky_stop_time__gt=start)\
                                                          .filter(on_sky_start_time__lt=F('on_sky_stop_time'))\
                                                          .only('on_sky_start_time', 'on_sky_stop_time'):
-            if sub.on_sky_start_time < sub.on_sky_stop_time:
-                new_idle_ranges = []
-                sub_range = DateTimeRange(sub.on_sky_start_time, sub.on_sky_stop_time)
-                for range in idle_ranges:
-                    new_idle_ranges += range.subtract(sub_range)
+
+            new_idle_ranges = []
+            sub_range = DateTimeRange(sub.on_sky_start_time, sub.on_sky_stop_time)
+            for range in idle_ranges:
+                new_idle_ranges += range.subtract(sub_range)
                 idle_ranges = new_idle_ranges
 
         idle_seconds = sum([range.get_timedelta_second() for range in idle_ranges])
-- 
GitLab


From 45b8086296af52ab4a76b0e753eafc522e979dc6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B6rn=20K=C3=BCnsem=C3=B6ller?=
 <jkuensem@physik.uni-bielefeld.de>
Date: Wed, 6 Nov 2024 11:55:27 +0100
Subject: [PATCH 3/3] TMSS-2808: fix time inversion issue with some units

---
 SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
index 746985f52af..7f941d250c3 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
@@ -76,7 +76,7 @@ class CycleReport():
             sub_range = DateTimeRange(sub.on_sky_start_time, sub.on_sky_stop_time)
             for range in idle_ranges:
                 new_idle_ranges += range.subtract(sub_range)
-                idle_ranges = new_idle_ranges
+            idle_ranges = new_idle_ranges
 
         idle_seconds = sum([range.get_timedelta_second() for range in idle_ranges])
         return idle_seconds
-- 
GitLab