agendas: retain time period weekday_indexes attribute in exclusion computation (#72491)

This commit is contained in:
Valentin Deniaud 2022-12-15 14:46:04 +01:00
parent 66531b7c51
commit 7ef4bffa95
2 changed files with 29 additions and 6 deletions

View File

@ -607,8 +607,11 @@ class Agenda(models.Model):
yield SharedTimePeriod.from_weektime_interval(time_period_interval, desks=desks)
else:
date = time_period_interval.begin.date
weekday_indexes = time_period_interval.begin.weekday_indexes
for weektime_interval in IntervalSet.simple(*time_period_interval) - closed_hours_by_days:
yield SharedTimePeriod.from_weektime_interval(weektime_interval, desks=desks, date=date)
yield SharedTimePeriod.from_weektime_interval(
weektime_interval, desks=desks, date=date, weekday_indexes=weekday_indexes
)
@functional.cached_property
def max_booking_datetime(self):
@ -1373,13 +1376,13 @@ class SharedTimePeriod:
event_datetime = next_time
@classmethod
def from_weektime_interval(cls, weektime_interval, desks=(), date=None):
def from_weektime_interval(cls, weektime_interval, desks=(), date=None, weekday_indexes=None):
begin, end = weektime_interval
assert begin.weekday == end.weekday
return cls(
weekday=begin.weekday,
weekday_indexes=begin.weekday_indexes or end.weekday_indexes,
weekday_indexes=begin.weekday_indexes or end.weekday_indexes or weekday_indexes,
start_time=begin.time,
end_time=end.time,
date=begin.date or end.date or date,

View File

@ -2384,22 +2384,26 @@ def test_datetimes_api_meetings_virtual_agenda_weekday_indexes(app):
weekday=0,
weekday_indexes=[1, 2],
start_time=datetime.time(11, 0),
end_time=datetime.time(12, 0),
end_time=datetime.time(12, 30),
desk=desk,
)
api_url = '/api/agenda/%s/meetings/%s/datetimes/' % (virtual_agenda.slug, meeting_type.slug)
resp = app.get(api_url)
assert len(resp.json['data']) == 8
assert len(resp.json['data']) == 12
assert [x['datetime'] for x in resp.json['data']] == [
'2022-02-07 11:00:00',
'2022-02-07 11:30:00',
'2022-02-07 12:00:00',
'2022-02-14 11:00:00',
'2022-02-14 11:30:00',
'2022-02-14 12:00:00',
'2022-03-07 11:00:00',
'2022-03-07 11:30:00',
'2022-03-07 12:00:00',
'2022-03-14 11:00:00',
'2022-03-14 11:30:00',
'2022-03-14 12:00:00',
]
# add exclusion period on virtual agenda
@ -2419,7 +2423,23 @@ def test_datetimes_api_meetings_virtual_agenda_weekday_indexes(app):
exclusion_period.end_time = datetime.time(11, 30)
exclusion_period.save()
resp = app.get(api_url)
assert len(resp.json['data']) == 4
assert len(resp.json['data']) == 8
assert [x['datetime'] for x in resp.json['data']] == [
'2022-02-07 11:30:00',
'2022-02-07 12:00:00',
'2022-02-14 11:30:00',
'2022-02-14 12:00:00',
'2022-03-07 11:30:00',
'2022-03-07 12:00:00',
'2022-03-14 11:30:00',
'2022-03-14 12:00:00',
]
# add second exclusion period on virtual agenda
TimePeriod.objects.create(
weekday=0, start_time=datetime.time(12, 00), end_time=datetime.time(12, 30), agenda=virtual_agenda
)
resp = app.get(api_url)
assert [x['datetime'] for x in resp.json['data']] == [
'2022-02-07 11:30:00',
'2022-02-14 11:30:00',