From 8901adce65b77c376646042ba1246c05cbe7efc7 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Wed, 30 Jun 2021 11:32:55 +0200 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(-) diff --git a/chrono/api/views.py b/chrono/api/views.py index 3c268b3..b3bc48b 100644 --- a/chrono/api/views.py +++ b/chrono/api/views.py @@ -2083,14 +2083,14 @@ class BookingsStatistics(APIView): bookings = Booking.objects if 'start' in data: - bookings = bookings.filter(creation_datetime__gte=data['start']) + bookings = bookings.filter(event__start_datetime__gte=data['start']) if 'end' in data: - bookings = bookings.filter(creation_datetime__lte=data['end']) + bookings = bookings.filter(event__start_datetime__lte=data['end']) if 'category' in data and data['category'] != '_all': bookings = bookings.filter(event__agenda__category__slug=data['category']) - bookings = bookings.annotate(day=TruncDay('creation_datetime')) + bookings = bookings.annotate(day=TruncDay('event__start_datetime')) bookings = bookings.values('day', 'user_was_present').annotate(total=Count('id')).order_by('day') bookings_by_day = collections.OrderedDict() diff --git a/tests/api/test_statistics.py b/tests/api/test_statistics.py index 871f657..d6c1da4 100644 --- a/tests/api/test_statistics.py +++ b/tests/api/test_statistics.py @@ -22,8 +22,12 @@ def test_statistics_list(app, user): def test_statistics_bookings(app, user, freezer): - agenda = Agenda.objects.create(label='Foo bar', kind='events') - event = Event.objects.create(start_datetime=now(), places=5, agenda=agenda) + freezer.move_to('2020-10-01') + agenda = Agenda.objects.create( + label='Foo bar', kind='events', minimal_booking_delay=0, maximal_booking_delay=0 + ) + event1 = Event.objects.create(start_datetime=now().replace(day=10), places=5, agenda=agenda) + event2 = Event.objects.create(start_datetime=now().replace(day=15), places=5, agenda=agenda) app.authorization = ('Basic', ('john.doe', 'password')) resp = app.get('/api/statistics/') @@ -32,11 +36,9 @@ def test_statistics_bookings(app, user, freezer): resp = app.get(url) assert len(resp.json['data']['series']) == 0 - freezer.move_to('2020-10-10') for _ in range(10): - Booking.objects.create(event=event) - freezer.move_to('2020-10-15') - Booking.objects.create(event=event) + Booking.objects.create(event=event1) + Booking.objects.create(event=event2) resp = app.get(url + '?time_interval=day') assert resp.json['data'] == { @@ -53,9 +55,8 @@ def test_statistics_bookings(app, user, freezer): category = Category.objects.create(label='Category A', slug='category-a') agenda = Agenda.objects.create(label='Foo bar', kind='events', category=category) - event = Event.objects.create(start_datetime=now(), places=5, agenda=agenda) - freezer.move_to('2020-10-25') - Booking.objects.create(event=event) + event3 = Event.objects.create(start_datetime=now().replace(day=25), places=5, agenda=agenda) + Booking.objects.create(event=event3) # category filter resp = app.get(url + '?category=category-a') @@ -71,10 +72,10 @@ def test_statistics_bookings(app, user, freezer): # absence/presence for i in range(10): - Booking.objects.create(event=event, user_was_present=bool(i % 2)) + Booking.objects.create(event=event3, user_was_present=bool(i % 2)) - freezer.move_to('2020-11-01') - Booking.objects.create(event=event, user_was_present=True) + event4 = Event.objects.create(start_datetime=now().replace(month=11, day=1), places=5, agenda=agenda) + Booking.objects.create(event=event4, user_was_present=True) resp = app.get(url) assert resp.json['data'] == { -- 2.20.1