Projet

Général

Profil

0001-api-disable-event-only-if-excluded_user_external_id-.patch

Valentin Deniaud, 17 août 2021 16:26

Télécharger (4,67 ko)

Voir les différences:

Subject: [PATCH] api: disable event only if excluded_user_external_id is
 specified (#55369)

 chrono/api/views.py         | 17 +++++++++++++----
 tests/api/test_datetimes.py |  9 ++++++++-
 2 files changed, 21 insertions(+), 5 deletions(-)
chrono/api/views.py
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
            ],
tests/api/test_datetimes.py
271 271

  
272 272
    resp = app.get('/api/agenda/%s/datetimes/' % agenda.slug, params={'user_external_id': '42'})
273 273
    assert resp.json['data'][0]['booked_for_external_user'] == 'main-list'
274
    assert resp.json['data'][0]['disabled'] == False
275

  
276
    resp = app.get(
277
        '/api/agenda/%s/datetimes/' % agenda.slug,
278
        params={'user_external_id': '42', 'exclude_user_external_id': '42'},
279
    )
280
    assert resp.json['data'][0]['disabled'] == True
274 281

  
275 282
    booking.in_waiting_list = True
276 283
    booking.save()
......
1399 1406

  
1400 1407
    assert resp.json['data'][1]['places']['available'] == 3
1401 1408
    assert resp.json['data'][1]['booked_for_external_user'] == 'main-list'
1402
    assert resp.json['data'][1]['disabled'] is True
1409
    assert resp.json['data'][1]['disabled'] is False
1403 1410

  
1404 1411
    # check exclude_user_external_id
1405 1412
    resp = app.get(
1406
-