api: disable event only if excluded_user_external_id is specified (#55369)
This commit is contained in:
parent
67f1f68fd6
commit
f6de72a5a9
|
@ -415,8 +415,8 @@ def get_event_places(event):
|
|||
return places
|
||||
|
||||
|
||||
def is_event_disabled(event, min_places=1):
|
||||
if getattr(event, 'user_places_count', 0) > 0:
|
||||
def is_event_disabled(event, min_places=1, disable_booked=True):
|
||||
if disable_booked and getattr(event, 'user_places_count', 0) > 0:
|
||||
return True
|
||||
if event.start_datetime < now():
|
||||
# event is past => not disabled (always ok to book a past event)
|
||||
|
@ -456,6 +456,7 @@ def get_event_detail(
|
|||
booked_user_external_id=None,
|
||||
show_events=None,
|
||||
multiple_agendas=False,
|
||||
disable_booked=True,
|
||||
):
|
||||
agenda = agenda or event.agenda
|
||||
details = {
|
||||
|
@ -468,7 +469,7 @@ def get_event_detail(
|
|||
'description': event.description,
|
||||
'pricing': event.pricing,
|
||||
'url': event.url,
|
||||
'disabled': is_event_disabled(event, min_places=min_places),
|
||||
'disabled': is_event_disabled(event, min_places=min_places, disable_booked=disable_booked),
|
||||
'api': {
|
||||
'bookings_url': request.build_absolute_uri(
|
||||
reverse(
|
||||
|
@ -745,6 +746,7 @@ class Datetimes(APIView):
|
|||
payload = serializer.validated_data
|
||||
|
||||
user_external_id = payload.get('user_external_id') or payload.get('exclude_user_external_id')
|
||||
disable_booked = bool(payload.get('exclude_user_external_id'))
|
||||
show_events_raw = payload.get('events')
|
||||
show_events = show_events_raw or 'future'
|
||||
show_past = show_events in ['all', 'past']
|
||||
|
@ -767,7 +769,11 @@ class Datetimes(APIView):
|
|||
)
|
||||
|
||||
if payload['hide_disabled']:
|
||||
entries = [e for e in entries if not is_event_disabled(e, payload['min_places'])]
|
||||
entries = [
|
||||
e
|
||||
for e in entries
|
||||
if not is_event_disabled(e, payload['min_places'], disable_booked=disable_booked)
|
||||
]
|
||||
|
||||
response = {
|
||||
'data': [
|
||||
|
@ -778,6 +784,7 @@ class Datetimes(APIView):
|
|||
min_places=payload['min_places'],
|
||||
booked_user_external_id=payload.get('user_external_id'),
|
||||
show_events=show_events_raw,
|
||||
disable_booked=disable_booked,
|
||||
)
|
||||
for x in entries
|
||||
],
|
||||
|
@ -817,6 +824,7 @@ class MultipleAgendasDatetimes(APIView):
|
|||
agendas = get_objects_from_slugs(agenda_slugs, qs=Agenda.objects.filter(kind='events'))
|
||||
|
||||
user_external_id = payload.get('user_external_id') or payload.get('exclude_user_external_id')
|
||||
disable_booked = bool(payload.get('exclude_user_external_id'))
|
||||
agendas = Agenda.prefetch_events_and_exceptions(
|
||||
agendas, annotate_events=True, user_external_id=user_external_id
|
||||
)
|
||||
|
@ -842,6 +850,7 @@ class MultipleAgendasDatetimes(APIView):
|
|||
min_places=payload['min_places'],
|
||||
booked_user_external_id=payload.get('user_external_id'),
|
||||
multiple_agendas=True,
|
||||
disable_booked=disable_booked,
|
||||
)
|
||||
for x in entries
|
||||
],
|
||||
|
|
|
@ -271,6 +271,13 @@ def test_datetimes_api_user_external_id(app):
|
|||
|
||||
resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug, params={'user_external_id': '42'})
|
||||
assert resp.json['data'][0]['booked_for_external_user'] == 'main-list'
|
||||
assert resp.json['data'][0]['disabled'] == False
|
||||
|
||||
resp = app.get(
|
||||
'/api/agenda/%s/datetimes/' % agenda.slug,
|
||||
params={'user_external_id': '42', 'exclude_user_external_id': '42'},
|
||||
)
|
||||
assert resp.json['data'][0]['disabled'] == True
|
||||
|
||||
booking.in_waiting_list = True
|
||||
booking.save()
|
||||
|
@ -1399,7 +1406,7 @@ def test_datetimes_multiple_agendas(app):
|
|||
|
||||
assert resp.json['data'][1]['places']['available'] == 3
|
||||
assert resp.json['data'][1]['booked_for_external_user'] == 'main-list'
|
||||
assert resp.json['data'][1]['disabled'] is True
|
||||
assert resp.json['data'][1]['disabled'] is False
|
||||
|
||||
# check exclude_user_external_id
|
||||
resp = app.get(
|
||||
|
|
Loading…
Reference in New Issue