diff --git a/chrono/agendas/models.py b/chrono/agendas/models.py index 15deaa74..1fcd8d1f 100644 --- a/chrono/agendas/models.py +++ b/chrono/agendas/models.py @@ -606,8 +606,9 @@ class Agenda(models.Model): if not closed_hours_by_days: yield SharedTimePeriod.from_weektime_interval(time_period_interval, desks=desks) else: + date = time_period_interval.begin.date for weektime_interval in IntervalSet.simple(*time_period_interval) - closed_hours_by_days: - yield SharedTimePeriod.from_weektime_interval(weektime_interval, desks=desks) + yield SharedTimePeriod.from_weektime_interval(weektime_interval, desks=desks, date=date) @functional.cached_property def max_booking_datetime(self): @@ -1361,7 +1362,7 @@ class SharedTimePeriod: event_datetime = next_time @classmethod - def from_weektime_interval(cls, weektime_interval, desks=()): + def from_weektime_interval(cls, weektime_interval, desks=(), date=None): begin, end = weektime_interval assert begin.weekday == end.weekday @@ -1370,7 +1371,7 @@ class SharedTimePeriod: weekday_indexes=begin.weekday_indexes or end.weekday_indexes, start_time=begin.time, end_time=end.time, - date=begin.date or end.date, + date=begin.date or end.date or date, desks=desks, ) diff --git a/tests/api/datetimes/test_meetings.py b/tests/api/datetimes/test_meetings.py index 4cd0d87e..6cdf34db 100644 --- a/tests/api/datetimes/test_meetings.py +++ b/tests/api/datetimes/test_meetings.py @@ -2481,7 +2481,7 @@ def test_datetimes_api_meetings_agenda_date_time_period(app): @pytest.mark.freeze_time('2022-10-24 10:00') def test_datetimes_api_meetings_virtual_agenda_date_time_period(app): agenda = Agenda.objects.create( - label='Foo bar', kind='meetings', minimal_booking_delay=0, maximal_booking_delay=8 + label='Foo bar', kind='meetings', minimal_booking_delay=0, maximal_booking_delay=30 ) desk = Desk.objects.create(agenda=agenda, label='desk') meeting_type = MeetingType.objects.create(agenda=agenda, label='Plop', duration=30) @@ -2509,8 +2509,16 @@ def test_datetimes_api_meetings_virtual_agenda_date_time_period(app): weekday=0, start_time=datetime.time(12, 00), end_time=datetime.time(13, 00), agenda=virtual_agenda ) resp = app.get(api_url) - resp = app.get(api_url) assert [x['datetime'] for x in resp.json['data']] == [ '2022-10-24 13:00:00', '2022-10-24 13:30:00', ] + + # add second exclusion period on virtual agenda + TimePeriod.objects.create( + weekday=0, start_time=datetime.time(13, 30), end_time=datetime.time(14, 00), agenda=virtual_agenda + ) + resp = app.get(api_url) + assert [x['datetime'] for x in resp.json['data']] == [ + '2022-10-24 13:00:00', + ]