agendas: retain time period weekday_indexes attribute in exclusion computation (#72491)
This commit is contained in:
parent
66531b7c51
commit
7ef4bffa95
|
@ -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,
|
||||
|
|
|
@ -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',
|
||||
|
|
Loading…
Reference in New Issue