Orders API: Add subevent_before parameter

This commit is contained in:
Raphael Michel
2020-11-19 17:17:39 +01:00
parent 6aa3532ee6
commit 88be280445
3 changed files with 33 additions and 1 deletions
+6 -1
View File
@@ -163,6 +163,10 @@ last_modified datetime Last modificati
The ``exclude`` and ``subevent_after`` query parameter has been added.
.. versionchanged:: 3.13
The ``subevent_before`` query parameter has been added.
.. _order-position-resource:
@@ -490,7 +494,8 @@ List of all orders
recommend using this in combination with ``testmode=false``, since test mode orders can vanish at any time and
you will not notice it using this method.
:query datetime created_since: Only return orders that have been created since the given date.
:query datetime subevent_after: Only return orders that contain a ticket for a subevent taking place after the given date.
:query datetime subevent_after: Only return orders that contain a ticket for a subevent taking place after the given date. This is an exclusive after, and it considers the **end** of the subevent (or its start, if the end is not set).
:query datetime subevent_before: Only return orders that contain a ticket for a subevent taking place after the given date. This is an exclusive before, and it considers the **start** of the subevent.
:query string exclude: Exclude a field from the output, e.g. ``fees`` or ``positions.downloads``. Can be used as a performance optimization. Can be passed multiple times.
:param organizer: The ``slug`` field of the organizer to fetch
:param event: The ``slug`` field of the event to fetch
+14
View File
@@ -65,6 +65,7 @@ with scopes_disabled():
modified_since = django_filters.IsoDateTimeFilter(field_name='last_modified', lookup_expr='gte')
created_since = django_filters.IsoDateTimeFilter(field_name='datetime', lookup_expr='gte')
subevent_after = django_filters.IsoDateTimeFilter(method='subevent_after_qs')
subevent_before = django_filters.IsoDateTimeFilter(method='subevent_before_qs')
search = django_filters.CharFilter(method='search_qs')
class Meta:
@@ -84,6 +85,19 @@ with scopes_disabled():
).filter(has_se_after=True)
return qs
def subevent_before_qs(self, qs, name, value):
qs = qs.annotate(
has_se_before=Exists(
OrderPosition.all.filter(
subevent_id__in=SubEvent.objects.filter(
Q(date_from__lt=value), event=OuterRef(OuterRef('event_id'))
).values_list('id'),
order_id=OuterRef('pk'),
)
)
).filter(has_se_before=True)
return qs
def search_qs(self, qs, name, value):
u = value
if "-" in value:
+13
View File
@@ -282,6 +282,19 @@ def test_order_list_filter_subevent_date(token_client, organizer, event, order,
assert resp.status_code == 200
assert [res] == resp.data['results']
resp = token_client.get('/api/v1/organizers/{}/events/{}/orders/?subevent_before={}'.format(
organizer.slug, event.slug,
(subevent.date_from - datetime.timedelta(hours=1)).isoformat().replace('+00:00', 'Z')
))
assert resp.status_code == 200
assert [] == resp.data['results']
resp = token_client.get('/api/v1/organizers/{}/events/{}/orders/?subevent_before={}'.format(
organizer.slug, event.slug,
(subevent.date_from + datetime.timedelta(hours=1)).isoformat().replace('+00:00', 'Z')
))
assert resp.status_code == 200
assert [res] == resp.data['results']
@pytest.mark.django_db
def test_order_list(token_client, organizer, event, order, item, taxrule, question):