api: a past event is disabled except if we want to book it (#56615)

This commit is contained in:
Lauréline Guérin 2021-10-04 17:52:27 +02:00
parent e4603ed856
commit 09b1ce63d9
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
1 changed files with 17 additions and 6 deletions

View File

@ -416,12 +416,16 @@ def get_event_places(event):
return places
def is_event_disabled(event, min_places=1, disable_booked=True):
def is_event_disabled(event, min_places=1, disable_booked=True, bookable_events=None):
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)
return False
# event is past
if bookable_events in ['all', 'past']:
# but we want to book past events, and it's always ok
return False
# we just want to show past events, but they are not bookable
return True
if event.remaining_places < min_places and event.remaining_waiting_list_places < min_places:
return True
return False
@ -483,7 +487,12 @@ def get_event_detail(
else:
details.update(
{
'disabled': is_event_disabled(event, min_places=min_places, disable_booked=disable_booked),
'disabled': is_event_disabled(
event,
min_places=min_places,
disable_booked=disable_booked,
bookable_events=bookable_events,
),
'api': {
'bookings_url': request.build_absolute_uri(
reverse(
@ -532,7 +541,7 @@ def get_events_meta_detail(
first_bookable_slot = None
for event in events:
bookable_datetimes_number_total += 1
if not is_event_disabled(event, min_places=min_places):
if not is_event_disabled(event, min_places=min_places, bookable_events=bookable_events):
bookable_datetimes_number_available += 1
if not first_bookable_slot:
first_bookable_slot = get_event_detail(
@ -786,7 +795,9 @@ class Datetimes(APIView):
entries = [
e
for e in entries
if not is_event_disabled(e, payload['min_places'], disable_booked=disable_booked)
if not is_event_disabled(
e, payload['min_places'], disable_booked=disable_booked, bookable_events=bookable_events
)
]
response = {