agendas: retain time period date attribute in exclusion computation (#71797)

This commit is contained in:
Valentin Deniaud 2022-12-01 17:04:18 +01:00
parent ea8d6f70db
commit 688c12e201
2 changed files with 14 additions and 5 deletions

View File

@ -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,
)

View File

@ -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',
]