api: change date filtering of already booked meetings (#53313)
For a researsing slots in an interval of [min, max] overlapping events should be considered if event.start_datetime \in [min - agenda.max_duration_meeting_types, max] as the implicit event.end_datetime cannot be superior to: event.start_datetime + agenda.max_meeting_types_duration and the formal condition for an overlapping event is : event.start_datetime < max && event.end_datetime > min
This commit is contained in:
parent
10a9c80f9a
commit
6c9518f4d6
|
@ -100,6 +100,7 @@ def get_all_slots(
|
|||
# that the base_meeting_duration for the virtual agenda is always the same
|
||||
# as the base meeting duration of each real agenda.
|
||||
base_meeting_duration = base_agenda.get_base_meeting_duration()
|
||||
max_meeting_duration_td = datetime.timedelta(minutes=base_agenda.get_max_meeting_duration())
|
||||
base_min_datetime = get_min_datetime(base_agenda, start_datetime)
|
||||
base_max_datetime = get_max_datetime(base_agenda, end_datetime)
|
||||
|
||||
|
@ -187,8 +188,8 @@ def get_all_slots(
|
|||
booked_events = (
|
||||
Event.objects.filter(
|
||||
agenda__in=agenda_ids,
|
||||
start_datetime__gte=used_min_datetime,
|
||||
start_datetime__lte=used_max_datetime + meeting_duration_td,
|
||||
start_datetime__gte=used_min_datetime - max_meeting_duration_td,
|
||||
start_datetime__lte=used_max_datetime,
|
||||
)
|
||||
.exclude(booking__cancellation_datetime__isnull=False)
|
||||
# ordering is important for the later groupby, it works like sort | uniq
|
||||
|
@ -218,8 +219,8 @@ def get_all_slots(
|
|||
booked_events = (
|
||||
Event.objects.filter(
|
||||
pk__in=event_ids_queryset,
|
||||
start_datetime__gte=used_min_datetime,
|
||||
start_datetime__lte=used_max_datetime + meeting_duration_td,
|
||||
start_datetime__gte=used_min_datetime - max_meeting_duration_td,
|
||||
start_datetime__lte=used_max_datetime,
|
||||
)
|
||||
.exclude(booking__cancellation_datetime__isnull=False)
|
||||
.order_by('start_datetime', 'meeting_type__duration')
|
||||
|
@ -241,8 +242,8 @@ def get_all_slots(
|
|||
booked_events = (
|
||||
Event.objects.filter(
|
||||
agenda__in=agenda_ids,
|
||||
start_datetime__gte=used_min_datetime,
|
||||
start_datetime__lte=used_max_datetime + meeting_duration_td,
|
||||
start_datetime__gte=used_min_datetime - max_meeting_duration_td,
|
||||
start_datetime__lte=used_max_datetime,
|
||||
booking__user_external_id=excluded_user_external_id,
|
||||
)
|
||||
.exclude(booking__cancellation_datetime__isnull=False)
|
||||
|
|
Loading…
Reference in New Issue