Projet

Général

Profil

0001-api-group-bookings-by-event-start-datetime-in-statis.patch

Valentin Deniaud, 30 juin 2021 11:36

Télécharger (4,01 ko)

Voir les différences:

Subject: [PATCH] api: group bookings by event start datetime in statistics
 (#55266)

 chrono/api/views.py          |  6 +++---
 tests/api/test_statistics.py | 25 +++++++++++++------------
 2 files changed, 16 insertions(+), 15 deletions(-)
chrono/api/views.py
2083 2083

  
2084 2084
        bookings = Booking.objects
2085 2085
        if 'start' in data:
2086
            bookings = bookings.filter(creation_datetime__gte=data['start'])
2086
            bookings = bookings.filter(event__start_datetime__gte=data['start'])
2087 2087
        if 'end' in data:
2088
            bookings = bookings.filter(creation_datetime__lte=data['end'])
2088
            bookings = bookings.filter(event__start_datetime__lte=data['end'])
2089 2089

  
2090 2090
        if 'category' in data and data['category'] != '_all':
2091 2091
            bookings = bookings.filter(event__agenda__category__slug=data['category'])
2092 2092

  
2093
        bookings = bookings.annotate(day=TruncDay('creation_datetime'))
2093
        bookings = bookings.annotate(day=TruncDay('event__start_datetime'))
2094 2094
        bookings = bookings.values('day', 'user_was_present').annotate(total=Count('id')).order_by('day')
2095 2095

  
2096 2096
        bookings_by_day = collections.OrderedDict()
tests/api/test_statistics.py
22 22

  
23 23

  
24 24
def test_statistics_bookings(app, user, freezer):
25
    agenda = Agenda.objects.create(label='Foo bar', kind='events')
26
    event = Event.objects.create(start_datetime=now(), places=5, agenda=agenda)
25
    freezer.move_to('2020-10-01')
26
    agenda = Agenda.objects.create(
27
        label='Foo bar', kind='events', minimal_booking_delay=0, maximal_booking_delay=0
28
    )
29
    event1 = Event.objects.create(start_datetime=now().replace(day=10), places=5, agenda=agenda)
30
    event2 = Event.objects.create(start_datetime=now().replace(day=15), places=5, agenda=agenda)
27 31

  
28 32
    app.authorization = ('Basic', ('john.doe', 'password'))
29 33
    resp = app.get('/api/statistics/')
......
32 36
    resp = app.get(url)
33 37
    assert len(resp.json['data']['series']) == 0
34 38

  
35
    freezer.move_to('2020-10-10')
36 39
    for _ in range(10):
37
        Booking.objects.create(event=event)
38
    freezer.move_to('2020-10-15')
39
    Booking.objects.create(event=event)
40
        Booking.objects.create(event=event1)
41
    Booking.objects.create(event=event2)
40 42

  
41 43
    resp = app.get(url + '?time_interval=day')
42 44
    assert resp.json['data'] == {
......
53 55

  
54 56
    category = Category.objects.create(label='Category A', slug='category-a')
55 57
    agenda = Agenda.objects.create(label='Foo bar', kind='events', category=category)
56
    event = Event.objects.create(start_datetime=now(), places=5, agenda=agenda)
57
    freezer.move_to('2020-10-25')
58
    Booking.objects.create(event=event)
58
    event3 = Event.objects.create(start_datetime=now().replace(day=25), places=5, agenda=agenda)
59
    Booking.objects.create(event=event3)
59 60

  
60 61
    # category filter
61 62
    resp = app.get(url + '?category=category-a')
......
71 72

  
72 73
    # absence/presence
73 74
    for i in range(10):
74
        Booking.objects.create(event=event, user_was_present=bool(i % 2))
75
        Booking.objects.create(event=event3, user_was_present=bool(i % 2))
75 76

  
76
    freezer.move_to('2020-11-01')
77
    Booking.objects.create(event=event, user_was_present=True)
77
    event4 = Event.objects.create(start_datetime=now().replace(month=11, day=1), places=5, agenda=agenda)
78
    Booking.objects.create(event=event4, user_was_present=True)
78 79

  
79 80
    resp = app.get(url)
80 81
    assert resp.json['data'] == {
81
-