diff --git a/program/models.py b/program/models.py index 25c5e4c53ff06d4f583e7715642843fab849058e..a4a83309288cc6b87bf2f6147d089784064e05f5 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):