api: do not disabled full events when booked in events datetimes (#79120)
gitea/chrono/pipeline/head This commit looks good
Details
gitea/chrono/pipeline/head This commit looks good
Details
This commit is contained in:
parent
90d3c29b72
commit
cce129b8bc
|
@ -142,7 +142,14 @@ def get_event_places(event):
|
|||
return places
|
||||
|
||||
|
||||
def is_event_disabled(event, min_places=1, disable_booked=True, bookable_events=None, bypass_delays=False):
|
||||
def is_event_disabled(
|
||||
event,
|
||||
min_places=1,
|
||||
disable_booked=True,
|
||||
bookable_events=None,
|
||||
bypass_delays=False,
|
||||
enable_full_when_booked=False,
|
||||
):
|
||||
if disable_booked and getattr(event, 'user_places_count', 0) > 0:
|
||||
return True
|
||||
if event.start_datetime < now():
|
||||
|
@ -160,6 +167,8 @@ def is_event_disabled(event, min_places=1, disable_booked=True, bookable_events=
|
|||
# event is out of minimal delay and we don't want to bypass delays
|
||||
return True
|
||||
if event.remaining_places < min_places and event.remaining_waiting_list_places < min_places:
|
||||
if enable_full_when_booked and getattr(event, 'user_places_count', 0) > 0:
|
||||
return False
|
||||
return True
|
||||
return False
|
||||
|
||||
|
@ -199,6 +208,7 @@ def get_event_detail(
|
|||
disable_booked=True,
|
||||
bypass_delays=False,
|
||||
with_status=False,
|
||||
enable_full_when_booked=False,
|
||||
):
|
||||
details = get_short_event_detail(
|
||||
request=request,
|
||||
|
@ -245,6 +255,7 @@ def get_event_detail(
|
|||
disable_booked=disable_booked,
|
||||
bookable_events=bookable_events,
|
||||
bypass_delays=bypass_delays,
|
||||
enable_full_when_booked=enable_full_when_booked,
|
||||
),
|
||||
'api': {
|
||||
'bookings_url': request.build_absolute_uri(
|
||||
|
@ -743,6 +754,7 @@ class MultipleAgendasDatetimes(APIView):
|
|||
booked_user_external_id=payload.get('user_external_id'),
|
||||
multiple_agendas=True,
|
||||
disable_booked=disable_booked,
|
||||
enable_full_when_booked=True,
|
||||
bypass_delays=payload.get('bypass_delays'),
|
||||
with_status=with_status,
|
||||
)
|
||||
|
|
|
@ -1702,3 +1702,42 @@ def test_datetimes_multiple_agendas_overlapping_events(app):
|
|||
params={'subscribed': 'all', 'user_external_id': 'xxx', 'check_overlaps': True},
|
||||
)
|
||||
assert len(resp.json['data']) == 0
|
||||
|
||||
|
||||
@pytest.mark.freeze_time('2021-05-06 14:00')
|
||||
def test_datetimes_multiple_agendas_enable_full_when_booked(app):
|
||||
agenda = Agenda.objects.create(
|
||||
label='First agenda', kind='events', minimal_booking_delay=0, maximal_booking_delay=45
|
||||
)
|
||||
Desk.objects.create(agenda=agenda, slug='_exceptions_holder')
|
||||
event = Event.objects.create(
|
||||
slug='recurring',
|
||||
start_datetime=now() + datetime.timedelta(hours=1),
|
||||
recurrence_days=[localtime().weekday()],
|
||||
recurrence_end_date=now() + datetime.timedelta(days=15),
|
||||
places=2,
|
||||
agenda=agenda,
|
||||
)
|
||||
event.create_all_recurrences()
|
||||
|
||||
resp = app.get('/api/agendas/datetimes/', params={'agendas': agenda.slug, 'user_external_id': 'our_user'})
|
||||
assert [(d['id'], d['disabled']) for d in resp.json['data']] == [
|
||||
('first-agenda@recurring--2021-05-06-1700', False),
|
||||
('first-agenda@recurring--2021-05-13-1700', False),
|
||||
('first-agenda@recurring--2021-05-20-1700', False),
|
||||
]
|
||||
|
||||
first_event = Event.objects.get(slug='recurring--2021-05-06-1700')
|
||||
Booking.objects.create(event=first_event, user_external_id='our_user')
|
||||
Booking.objects.create(event=first_event, user_external_id='other_user')
|
||||
|
||||
second_event = Event.objects.get(slug='recurring--2021-05-13-1700')
|
||||
Booking.objects.create(event=second_event, user_external_id='other_user')
|
||||
Booking.objects.create(event=second_event, user_external_id='other_user_2')
|
||||
|
||||
resp = app.get('/api/agendas/datetimes/', params={'agendas': agenda.slug, 'user_external_id': 'our_user'})
|
||||
assert [(d['id'], d['disabled']) for d in resp.json['data']] == [
|
||||
('first-agenda@recurring--2021-05-06-1700', False), # full event with user booking, not disabled
|
||||
('first-agenda@recurring--2021-05-13-1700', True), # full event without user booking, disabled
|
||||
('first-agenda@recurring--2021-05-20-1700', False),
|
||||
]
|
||||
|
|
Loading…
Reference in New Issue