api: correctly remove all timeslots overlapped by exceptions (#20386)
This commit is contained in:
parent
add27d0933
commit
1111695dd5
|
@ -66,7 +66,7 @@ def get_all_slots(agenda, meeting_type):
|
|||
for desk, excluded_interval in excluded_slot_by_desk.iteritems():
|
||||
for interval in excluded_interval:
|
||||
begin, end = interval
|
||||
open_slots_by_desk[desk].remove_envelop(localtime(begin), localtime(end))
|
||||
open_slots_by_desk[desk].remove_overlap(localtime(begin), localtime(end))
|
||||
# keep a copy of all time slot before removing busy time slots
|
||||
all_time_slots = reduce(operator.__or__, deepcopy(open_slots_by_desk).values())
|
||||
|
||||
|
|
|
@ -1092,3 +1092,33 @@ def test_agenda_meeting_gcd_durations(app, meetings_agenda, user):
|
|||
assert [x for x in resp.json['data'] if not x.get('disabled')][0]['datetime'].startswith('2017-05-22 12:00:00')
|
||||
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type_30.id)
|
||||
assert [x for x in resp.json['data'] if not x.get('disabled')][0]['datetime'].startswith('2017-05-22 12:00:00')
|
||||
|
||||
|
||||
def test_agenda_meeting_gcd_durations_and_exceptions(app, meetings_agenda, user):
|
||||
meetings_agenda.maximal_booking_delay = 2
|
||||
meetings_agenda.save()
|
||||
|
||||
MeetingType.objects.all().delete()
|
||||
|
||||
meeting_type_20 = MeetingType(agenda=meetings_agenda, label='Blah 20', duration=20)
|
||||
meeting_type_20.save()
|
||||
|
||||
meeting_type_40 = MeetingType(agenda=meetings_agenda, label='Blah 40', duration=40)
|
||||
meeting_type_40.save()
|
||||
|
||||
desk = meetings_agenda.desk_set.all()[0]
|
||||
|
||||
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type_20.id)
|
||||
assert len(resp.json['data']) == 6
|
||||
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type_40.id)
|
||||
assert len(resp.json['data']) == 5
|
||||
|
||||
# exception to just leave enough place for a single 20-minutes meeting.
|
||||
TimePeriodException.objects.create(
|
||||
desk=desk, start_datetime=datetime.datetime(2017, 5, 22, 10, 20),
|
||||
end_datetime=datetime.datetime(2017, 5, 22, 12, 00))
|
||||
|
||||
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type_20.id)
|
||||
assert len(resp.json['data']) == 1
|
||||
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type_40.id)
|
||||
assert len(resp.json['data']) == 0
|
||||
|
|
Loading…
Reference in New Issue