api: group bookings by event start datetime in statistics (#55266)
This commit is contained in:
parent
d6c1b36713
commit
91ee8ca870
|
@ -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()
|
||||
|
|
|
@ -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'] == {
|
||||
|
|
Loading…
Reference in New Issue