api: group bookings by event start datetime in statistics (#55266)

This commit is contained in:
Valentin Deniaud 2021-06-30 11:32:55 +02:00
parent d6c1b36713
commit 91ee8ca870
2 changed files with 16 additions and 15 deletions

View File

@ -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()

View File

@ -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'] == {