Projet

Général

Profil

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

Valentin Deniaud, 04 août 2021 10:40

Télécharger (3,63 ko)

Voir les différences:

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(-)
chrono/api/views.py
416 416
    return places
417 417

  
418 418

  
419
def is_event_disabled(event, min_places=1):
420
    if getattr(event, 'user_places_count', 0) > 0:
419
def is_event_disabled(event, min_places=1, disable_booked=True):
420
    if disable_booked and getattr(event, 'user_places_count', 0) > 0:
421 421
        return True
422 422
    if event.start_datetime < now():
423 423
        # event is past => not disabled (always ok to book a past event)
......
450 450

  
451 451

  
452 452
def get_event_detail(
453
    request, event, agenda=None, min_places=1, booked_user_external_id=None, show_events=None
453
    request,
454
    event,
455
    agenda=None,
456
    min_places=1,
457
    booked_user_external_id=None,
458
    show_events=None,
459
    disable_booked=True,
454 460
):
455 461
    agenda = agenda or event.agenda
456 462
    details = {
......
463 469
        'description': event.description,
464 470
        'pricing': event.pricing,
465 471
        'url': event.url,
466
        'disabled': is_event_disabled(event, min_places=min_places),
472
        'disabled': is_event_disabled(event, min_places=min_places, disable_booked=disable_booked),
467 473
        'api': {
468 474
            'bookings_url': request.build_absolute_uri(
469 475
                reverse(
......
752 758
        start_datetime, end_datetime = get_start_and_end_datetime_from_request(request)
753 759
        booked_user_external_id = request.GET.get('user_external_id') or None
754 760
        excluded_user_external_id = request.GET.get('exclude_user_external_id') or None
761
        disable_booked = bool(excluded_user_external_id)
755 762
        if (
756 763
            booked_user_external_id
757 764
            and excluded_user_external_id
......
785 792
            )
786 793

  
787 794
        if request.GET.get('hide_disabled'):
788
            entries = [e for e in entries if not is_event_disabled(e, min_places)]
795
            entries = [
796
                e for e in entries if not is_event_disabled(e, min_places, disable_booked=disable_booked)
797
            ]
789 798

  
790 799
        response = {
791 800
            'data': [
......
796 805
                    min_places=min_places,
797 806
                    booked_user_external_id=booked_user_external_id,
798 807
                    show_events=show_events_raw,
808
                    disable_booked=disable_booked,
799 809
                )
800 810
                for x in entries
801 811
            ],
tests/api/test_datetimes.py
269 269

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

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

  
273 280
    booking.in_waiting_list = True
274 281
    booking.save()
275
-