api: return places info on fillslot api for an event agenda (#35297)
This commit is contained in:
parent
ec2db025a2
commit
35dcc849df
|
@ -127,6 +127,19 @@ def get_agenda_detail(request, agenda):
|
|||
return agenda_detail
|
||||
|
||||
|
||||
def get_event_places(event):
|
||||
places = {
|
||||
'total': event.places,
|
||||
'reserved': event.booked_places,
|
||||
'available': event.places - event.booked_places,
|
||||
}
|
||||
if event.waiting_list_places:
|
||||
places['waiting_list_total'] = event.waiting_list_places
|
||||
places['waiting_list_reserved'] = event.waiting_list
|
||||
places['waiting_list_available'] = (event.waiting_list_places - event.waiting_list)
|
||||
return places
|
||||
|
||||
|
||||
class Agendas(APIView):
|
||||
permission_classes = ()
|
||||
|
||||
|
@ -342,6 +355,7 @@ class Fillslots(APIView):
|
|||
format=format)
|
||||
|
||||
def fillslot(self, request, agenda_identifier=None, slots=[], format=None):
|
||||
multiple_booking = bool(not slots)
|
||||
try:
|
||||
agenda = Agenda.objects.get(slug=agenda_identifier)
|
||||
except Agenda.DoesNotExist:
|
||||
|
@ -559,6 +573,9 @@ class Fillslots(APIView):
|
|||
'slug': available_desk.slug}
|
||||
if to_cancel_booking:
|
||||
response['cancelled_booking_id'] = cancelled_booking_id
|
||||
if agenda.kind == 'events' and not multiple_booking:
|
||||
event = events[0]
|
||||
response['places'] = get_event_places(event)
|
||||
|
||||
return Response(response)
|
||||
|
||||
|
@ -666,16 +683,8 @@ class SlotStatus(APIView):
|
|||
event = self.get_object(event_identifier)
|
||||
response = {
|
||||
'err': 0,
|
||||
'places': {
|
||||
'total': event.places,
|
||||
'reserved': event.booked_places,
|
||||
'available': event.places - event.booked_places,
|
||||
}
|
||||
'places': get_event_places(event),
|
||||
}
|
||||
if event.waiting_list_places:
|
||||
response['places']['waiting_list_total'] = event.waiting_list_places
|
||||
response['places']['waiting_list_reserved'] = event.waiting_list
|
||||
response['places']['waiting_list_available'] = (event.waiting_list_places - event.waiting_list)
|
||||
return Response(response)
|
||||
|
||||
|
||||
|
|
|
@ -761,6 +761,49 @@ def test_booking_api_with_data(app, some_data, user):
|
|||
assert Booking.objects.all()[0].extra_data == {'hello': 'world'}
|
||||
|
||||
|
||||
def test_booking_api_available(app, some_data, meetings_agenda, user):
|
||||
agenda = Agenda.objects.filter(label=u'Foo bar')[0]
|
||||
event = Event.objects.filter(agenda=agenda)[0]
|
||||
|
||||
app.authorization = ('Basic', ('john.doe', 'password'))
|
||||
resp = app.post_json('/api/agenda/%s/fillslot/%s/' % (agenda.pk, event.pk))
|
||||
assert resp.json['err'] == 0
|
||||
assert resp.json['places']['total'] == 10
|
||||
assert resp.json['places']['available'] == 9
|
||||
assert resp.json['places']['reserved'] == 1
|
||||
assert 'waiting_list_total' not in resp.json['places']
|
||||
|
||||
Booking.objects.create(event=event, in_waiting_list=True)
|
||||
event.waiting_list_places = 5
|
||||
event.save()
|
||||
|
||||
resp = app.post_json('/api/agenda/%s/fillslot/%s/' % (agenda.pk, event.pk))
|
||||
assert resp.json['err'] == 0
|
||||
assert resp.json['places']['total'] == 10
|
||||
assert resp.json['places']['available'] == 9
|
||||
assert resp.json['places']['reserved'] == 1
|
||||
assert resp.json['places']['waiting_list_total'] == 5
|
||||
assert resp.json['places']['waiting_list_available'] == 3
|
||||
assert resp.json['places']['waiting_list_reserved'] == 2
|
||||
|
||||
# not for mettings agenda
|
||||
meeting_type = MeetingType.objects.get(agenda=meetings_agenda)
|
||||
resp = app.get('/api/agenda/meetings/%s/datetimes/' % meeting_type.pk)
|
||||
event_id = resp.json['data'][2]['id']
|
||||
resp = app.post_json('/api/agenda/%s/fillslot/%s/' % (meetings_agenda.pk, event_id))
|
||||
assert resp.json['err'] == 0
|
||||
assert 'places' not in resp.json
|
||||
|
||||
# not for multiple booking
|
||||
events = [x for x in Event.objects.filter(agenda=agenda).order_by('start_datetime') if x.in_bookable_period()][:2]
|
||||
slots = [x.pk for x in events]
|
||||
|
||||
resp = app.post('/api/agenda/%s/fillslots/' % agenda.slug,
|
||||
params={'slots': slots, 'count': '3'})
|
||||
assert resp.json['err'] == 0
|
||||
assert 'places' not in resp.json
|
||||
|
||||
|
||||
def test_booking_api_with_cancel_booking(app, some_data, user):
|
||||
agenda_id = Agenda.objects.filter(label=u'Foo bar')[0].id
|
||||
event_0, event_1, event_2, event_3 = Event.objects.filter(agenda_id=agenda_id)[0:4]
|
||||
|
|
Loading…
Reference in New Issue