From 2d2b0245a82e1e780a610276211593ac2d17a34d Mon Sep 17 00:00:00 2001
From: Ernesto Rico Schmidt <ernesto@helsinki.at>
Date: Tue, 21 Feb 2023 18:51:36 -0400
Subject: [PATCH] Fix query to get timeslots in time rage, add type annotations

---
 program/models.py | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/program/models.py b/program/models.py
index 25c5e4c5..a4a83309 100644
--- a/program/models.py
+++ b/program/models.py
@@ -28,7 +28,7 @@ from versatileimagefield.fields import PPOIField, VersatileImageField
 from django.contrib.auth.models import User
 from django.core.exceptions import ObjectDoesNotExist
 from django.db import models
-from django.db.models import Q
+from django.db.models import Q, QuerySet
 from django.forms.models import model_to_dict
 from django.utils import timezone
 from django.utils.translation import gettext_lazy as _
@@ -1062,11 +1062,17 @@ class TimeSlotManager(models.Manager):
         )
 
     @staticmethod
-    def get_timerange_timeslots(start: datetime, end: datetime):
-        """get the timeslots in the timerange between start and end"""
+    def get_timerange_timeslots(start_timerange: datetime, end_timerange: datetime) -> QuerySet:
+        """get the timeslots between start_timerange and end_timerange"""
+
         return TimeSlot.objects.filter(
-            Q(start__lte=start, end__gte=start) | Q(start__gt=start, start__lt=end)
-        ).exclude(end=start)
+            # start before start_timerange, end after start_timerange
+            Q(start__lt=start_timerange, end__gt=start_timerange)
+            # start after/at start_timerange, end before/at end_timerange
+            | Q(start__gte=start_timerange, end__lte=end_timerange)
+            # start before end_timerange, end after/at end_timerange
+            | Q(start__lt=end_timerange, end__gte=end_timerange)
+        )
 
     @staticmethod
     def get_colliding_timeslots(timeslot):
-- 
GitLab