api: add desk info in booking response (#18973)
This commit is contained in:
parent
169cc6a0ab
commit
fc1bdf3391
|
@ -316,6 +316,7 @@ class Fillslot(GenericAPIView):
|
|||
else:
|
||||
places_count = 1
|
||||
|
||||
available_desk = None
|
||||
if agenda.kind == 'meetings':
|
||||
# event is actually a timeslot, convert to a real event object
|
||||
meeting_type_id, start_datetime_str = event_pk.split(':')
|
||||
|
@ -327,12 +328,12 @@ class Fillslot(GenericAPIView):
|
|||
start_datetime=start_datetime,
|
||||
full=False, places=1)
|
||||
|
||||
available_desk = None
|
||||
|
||||
open_slots, _ = get_all_slots(agenda, MeetingType.objects.get(id=meeting_type_id))
|
||||
slot = open_slots[event.start_datetime:event.end_datetime]
|
||||
# sort available matching slots by desk id
|
||||
slot = sorted(open_slots[event.start_datetime:event.end_datetime], key=lambda x: x.data.desk.id)
|
||||
if slot:
|
||||
available_desk = slot.pop().data.desk
|
||||
# book first available desk
|
||||
available_desk = slot[0].data.desk
|
||||
|
||||
if not available_desk:
|
||||
return Response({'err': 1, 'reason': 'no more desk available'})
|
||||
|
@ -377,6 +378,10 @@ class Fillslot(GenericAPIView):
|
|||
if new_booking.in_waiting_list:
|
||||
response['api']['accept_url'] = request.build_absolute_uri(
|
||||
reverse('api-accept-booking', kwargs={'booking_pk': new_booking.id}))
|
||||
if available_desk:
|
||||
response['desk'] = {
|
||||
'label': available_desk.label,
|
||||
'slug': available_desk.slug}
|
||||
|
||||
return Response(response)
|
||||
|
||||
|
|
|
@ -994,3 +994,28 @@ def test_agenda_meeting_api_in_between_exceptions(app, meetings_agenda, user):
|
|||
weekday=time_period.weekday)
|
||||
resp4 = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
|
||||
assert len(resp.json['data']) == len(resp4.json['data'])
|
||||
|
||||
|
||||
def test_agenda_meeting_api_desk_info(app, meetings_agenda, user):
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
meeting_type = MeetingType.objects.get(agenda=meetings_agenda)
|
||||
desk = meetings_agenda.desk_set.get(slug='desk-1')
|
||||
desk2 = Desk.objects.create(label='Desk 2', agenda=meetings_agenda)
|
||||
for time_period in desk.timeperiod_set.all():
|
||||
TimePeriod.objects.create(
|
||||
desk=desk2, start_time=time_period.start_time, end_time=time_period.end_time,
|
||||
weekday=time_period.weekday)
|
||||
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.id)
|
||||
booking_url = resp.json['data'][0]['api']['fillslot_url']
|
||||
booking_url2 = resp.json['data'][3]['api']['fillslot_url']
|
||||
resp = app.post(booking_url)
|
||||
assert resp.json['desk']['label'] == desk.label
|
||||
assert resp.json['desk']['slug'] == desk.slug
|
||||
# book the same slot and make sure desk 2 info are returned
|
||||
resp = app.post(booking_url)
|
||||
assert resp.json['desk']['label'] == desk2.label
|
||||
assert resp.json['desk']['slug'] == desk2.slug
|
||||
# booking slot 3 and make sure desk 1 info are returened
|
||||
resp = app.post(booking_url2)
|
||||
assert resp.json['desk']['label'] == desk.label
|
||||
assert resp.json['desk']['slug'] == desk.slug
|
||||
|
|
Loading…
Reference in New Issue