From 173eb5907d6d3394f48b618806fdb38ce385dcff Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Wed, 4 Aug 2021 10:32:41 +0200 Subject: [PATCH] api: disable event only if excluded_user_external_id is specified (#55369) --- chrono/api/views.py | 20 +++++++++++++++----- tests/api/test_datetimes.py | 7 +++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/chrono/api/views.py b/chrono/api/views.py index 2ad13b7..982df94 100644 --- a/chrono/api/views.py +++ b/chrono/api/views.py @@ -416,8 +416,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) @@ -450,7 +450,13 @@ def get_event_text(event, agenda, day=None): def get_event_detail( - request, event, agenda=None, min_places=1, booked_user_external_id=None, show_events=None + request, + event, + agenda=None, + min_places=1, + booked_user_external_id=None, + show_events=None, + disable_booked=True, ): agenda = agenda or event.agenda details = { @@ -463,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( @@ -752,6 +758,7 @@ class Datetimes(APIView): start_datetime, end_datetime = get_start_and_end_datetime_from_request(request) booked_user_external_id = request.GET.get('user_external_id') or None excluded_user_external_id = request.GET.get('exclude_user_external_id') or None + disable_booked = bool(excluded_user_external_id) if ( booked_user_external_id and excluded_user_external_id @@ -785,7 +792,9 @@ class Datetimes(APIView): ) if request.GET.get('hide_disabled'): - entries = [e for e in entries if not is_event_disabled(e, min_places)] + entries = [ + e for e in entries if not is_event_disabled(e, min_places, disable_booked=disable_booked) + ] response = { 'data': [ @@ -796,6 +805,7 @@ class Datetimes(APIView): min_places=min_places, booked_user_external_id=booked_user_external_id, show_events=show_events_raw, + disable_booked=disable_booked, ) for x in entries ], diff --git a/tests/api/test_datetimes.py b/tests/api/test_datetimes.py index 0053e6d..50ad8ef 100644 --- a/tests/api/test_datetimes.py +++ b/tests/api/test_datetimes.py @@ -269,6 +269,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() -- 2.20.1