415 |
415 |
return places
|
416 |
416 |
|
417 |
417 |
|
418 |
|
def is_event_disabled(event, min_places=1):
|
419 |
|
if getattr(event, 'user_places_count', 0) > 0:
|
|
418 |
def is_event_disabled(event, min_places=1, disable_booked=True):
|
|
419 |
if disable_booked and getattr(event, 'user_places_count', 0) > 0:
|
420 |
420 |
return True
|
421 |
421 |
if event.start_datetime < now():
|
422 |
422 |
# event is past => not disabled (always ok to book a past event)
|
... | ... | |
456 |
456 |
booked_user_external_id=None,
|
457 |
457 |
show_events=None,
|
458 |
458 |
multiple_agendas=False,
|
|
459 |
disable_booked=True,
|
459 |
460 |
):
|
460 |
461 |
agenda = agenda or event.agenda
|
461 |
462 |
details = {
|
... | ... | |
468 |
469 |
'description': event.description,
|
469 |
470 |
'pricing': event.pricing,
|
470 |
471 |
'url': event.url,
|
471 |
|
'disabled': is_event_disabled(event, min_places=min_places),
|
|
472 |
'disabled': is_event_disabled(event, min_places=min_places, disable_booked=disable_booked),
|
472 |
473 |
'api': {
|
473 |
474 |
'bookings_url': request.build_absolute_uri(
|
474 |
475 |
reverse(
|
... | ... | |
745 |
746 |
payload = serializer.validated_data
|
746 |
747 |
|
747 |
748 |
user_external_id = payload.get('user_external_id') or payload.get('exclude_user_external_id')
|
|
749 |
disable_booked = bool(payload.get('exclude_user_external_id'))
|
748 |
750 |
show_events_raw = payload.get('events')
|
749 |
751 |
show_events = show_events_raw or 'future'
|
750 |
752 |
show_past = show_events in ['all', 'past']
|
... | ... | |
767 |
769 |
)
|
768 |
770 |
|
769 |
771 |
if payload['hide_disabled']:
|
770 |
|
entries = [e for e in entries if not is_event_disabled(e, payload['min_places'])]
|
|
772 |
entries = [
|
|
773 |
e
|
|
774 |
for e in entries
|
|
775 |
if not is_event_disabled(e, payload['min_places'], disable_booked=disable_booked)
|
|
776 |
]
|
771 |
777 |
|
772 |
778 |
response = {
|
773 |
779 |
'data': [
|
... | ... | |
778 |
784 |
min_places=payload['min_places'],
|
779 |
785 |
booked_user_external_id=payload.get('user_external_id'),
|
780 |
786 |
show_events=show_events_raw,
|
|
787 |
disable_booked=disable_booked,
|
781 |
788 |
)
|
782 |
789 |
for x in entries
|
783 |
790 |
],
|
... | ... | |
817 |
824 |
agendas = get_objects_from_slugs(agenda_slugs, qs=Agenda.objects.filter(kind='events'))
|
818 |
825 |
|
819 |
826 |
user_external_id = payload.get('user_external_id') or payload.get('exclude_user_external_id')
|
|
827 |
disable_booked = bool(payload.get('exclude_user_external_id'))
|
820 |
828 |
agendas = Agenda.prefetch_events_and_exceptions(
|
821 |
829 |
agendas, annotate_events=True, user_external_id=user_external_id
|
822 |
830 |
)
|
... | ... | |
842 |
850 |
min_places=payload['min_places'],
|
843 |
851 |
booked_user_external_id=payload.get('user_external_id'),
|
844 |
852 |
multiple_agendas=True,
|
|
853 |
disable_booked=disable_booked,
|
845 |
854 |
)
|
846 |
855 |
for x in entries
|
847 |
856 |
],
|