forked from CGM_Public/pretix_original
add event to api response
This commit is contained in:
@@ -1750,8 +1750,11 @@ List of all order positions
|
|||||||
"results": [
|
"results": [
|
||||||
{
|
{
|
||||||
"id:": 23442
|
"id:": 23442
|
||||||
"code": "ABC12",
|
|
||||||
"event": "sampleconf",
|
"event": "sampleconf",
|
||||||
|
"order": "ABC12",
|
||||||
|
"positionid": 1,
|
||||||
|
"canceled": false,
|
||||||
|
"item": 1345,
|
||||||
...
|
...
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -636,6 +636,14 @@ class OrderPositionSerializer(I18nAwareModelSerializer):
|
|||||||
return entry
|
return entry
|
||||||
|
|
||||||
|
|
||||||
|
class OrganizerOrderPositionSerializer(OrderPositionSerializer):
|
||||||
|
event = SlugRelatedField(slug_field='slug', read_only=True)
|
||||||
|
|
||||||
|
class Meta(OrderPositionSerializer.Meta):
|
||||||
|
fields = OrderPositionSerializer.Meta.fields + ('event',)
|
||||||
|
read_only_fields = OrderPositionSerializer.Meta.read_only_fields + ('event',)
|
||||||
|
|
||||||
|
|
||||||
class RequireAttentionField(serializers.Field):
|
class RequireAttentionField(serializers.Field):
|
||||||
def to_representation(self, instance: OrderPosition):
|
def to_representation(self, instance: OrderPosition):
|
||||||
return instance.require_checkin_attention
|
return instance.require_checkin_attention
|
||||||
|
|||||||
@@ -57,9 +57,10 @@ from pretix.api.serializers.order import (
|
|||||||
BlockedTicketSecretSerializer, InvoiceSerializer, OrderCreateSerializer,
|
BlockedTicketSecretSerializer, InvoiceSerializer, OrderCreateSerializer,
|
||||||
OrderPaymentCreateSerializer, OrderPaymentSerializer,
|
OrderPaymentCreateSerializer, OrderPaymentSerializer,
|
||||||
OrderPositionSerializer, OrderRefundCreateSerializer,
|
OrderPositionSerializer, OrderRefundCreateSerializer,
|
||||||
OrderRefundSerializer, OrderSerializer, OrganizerTransactionSerializer,
|
OrderRefundSerializer, OrderSerializer, OrganizerOrderPositionSerializer,
|
||||||
PriceCalcSerializer, PrintLogSerializer, RevokedTicketSecretSerializer,
|
OrganizerTransactionSerializer, PriceCalcSerializer, PrintLogSerializer,
|
||||||
SimulatedOrderSerializer, TransactionSerializer,
|
RevokedTicketSecretSerializer, SimulatedOrderSerializer,
|
||||||
|
TransactionSerializer,
|
||||||
)
|
)
|
||||||
from pretix.api.serializers.orderchange import (
|
from pretix.api.serializers.orderchange import (
|
||||||
BlockNameSerializer, OrderChangeOperationSerializer,
|
BlockNameSerializer, OrderChangeOperationSerializer,
|
||||||
@@ -1066,7 +1067,6 @@ with scopes_disabled():
|
|||||||
|
|
||||||
|
|
||||||
class OrderPositionViewSetMixin:
|
class OrderPositionViewSetMixin:
|
||||||
serializer_class = OrderPositionSerializer
|
|
||||||
queryset = OrderPosition.all.none()
|
queryset = OrderPosition.all.none()
|
||||||
filter_backends = (DjangoFilterBackend, RichOrderingFilter)
|
filter_backends = (DjangoFilterBackend, RichOrderingFilter)
|
||||||
ordering = ('order__datetime', 'positionid')
|
ordering = ('order__datetime', 'positionid')
|
||||||
@@ -1097,7 +1097,7 @@ class OrderPositionViewSetMixin:
|
|||||||
else:
|
else:
|
||||||
qs = OrderPosition.objects
|
qs = OrderPosition.objects
|
||||||
qs = qs.filter(order__event__organizer=self.request.organizer)
|
qs = qs.filter(order__event__organizer=self.request.organizer)
|
||||||
if self.request.query_params.get('pdf_data', 'false').lower() == 'true' and getattr(request, 'event', None):
|
if self.request.query_params.get('pdf_data', 'false').lower() == 'true' and getattr(self.request, 'event', None):
|
||||||
prefetch_related_objects([self.request.organizer], 'meta_properties')
|
prefetch_related_objects([self.request.organizer], 'meta_properties')
|
||||||
prefetch_related_objects(
|
prefetch_related_objects(
|
||||||
[self.request.event],
|
[self.request.event],
|
||||||
@@ -1168,12 +1168,14 @@ class OrderPositionViewSetMixin:
|
|||||||
|
|
||||||
|
|
||||||
class OrganizerOrderPositionViewSet(OrderPositionViewSetMixin, viewsets.ReadOnlyModelViewSet):
|
class OrganizerOrderPositionViewSet(OrderPositionViewSetMixin, viewsets.ReadOnlyModelViewSet):
|
||||||
|
serializer_class = OrganizerOrderPositionSerializer
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
qs = super().get_queryset()
|
qs = super().get_queryset()
|
||||||
|
|
||||||
perm = self.permission if self.request.method in SAFE_METHODS else self.write_permission
|
perm = self.permission if self.request.method in SAFE_METHODS else self.write_permission
|
||||||
|
|
||||||
if isinstance(self.request.auth, (TeamAPIToken, Device)) or self.request.user.is_authenticated::
|
if isinstance(self.request.auth, (TeamAPIToken, Device)) or self.request.user.is_authenticated:
|
||||||
qs = qs.filter(
|
qs = qs.filter(
|
||||||
order__event__in=self.request.auth.get_events_with_permission(perm, request=self.request)
|
order__event__in=self.request.auth.get_events_with_permission(perm, request=self.request)
|
||||||
)
|
)
|
||||||
@@ -1182,6 +1184,8 @@ class OrganizerOrderPositionViewSet(OrderPositionViewSetMixin, viewsets.ReadOnly
|
|||||||
|
|
||||||
|
|
||||||
class EventOrderPositionViewSet(OrderPositionViewSetMixin, viewsets.ModelViewSet):
|
class EventOrderPositionViewSet(OrderPositionViewSetMixin, viewsets.ModelViewSet):
|
||||||
|
serializer_class = OrderPositionSerializer
|
||||||
|
|
||||||
def get_serializer_context(self):
|
def get_serializer_context(self):
|
||||||
ctx = super().get_serializer_context()
|
ctx = super().get_serializer_context()
|
||||||
ctx['event'] = self.request.event
|
ctx['event'] = self.request.event
|
||||||
|
|||||||
@@ -1057,11 +1057,27 @@ def test_orderposition_list_limited_read(
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"endpoint_template",
|
("endpoint_template", "endpoint_type"),
|
||||||
[('/api/v1/organizers/{}/events/{}/orderpositions/'), ('/api/v1/organizers/{}/orderpositions/')]
|
[
|
||||||
|
('/api/v1/organizers/{}/events/{}/orderpositions/', "event"),
|
||||||
|
('/api/v1/organizers/{}/orderpositions/', "organizer")
|
||||||
|
],
|
||||||
)
|
)
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_orderposition_list(endpoint_template, token_client, organizer, device, event, order, item, subevent, subevent2, question, django_assert_num_queries):
|
def test_orderposition_list(
|
||||||
|
endpoint_template,
|
||||||
|
endpoint_type,
|
||||||
|
token_client,
|
||||||
|
organizer,
|
||||||
|
device,
|
||||||
|
event,
|
||||||
|
order,
|
||||||
|
item,
|
||||||
|
subevent,
|
||||||
|
subevent2,
|
||||||
|
question,
|
||||||
|
django_assert_num_queries
|
||||||
|
):
|
||||||
endpoint = endpoint_template.format(organizer.slug, event.slug)
|
endpoint = endpoint_template.format(organizer.slug, event.slug)
|
||||||
|
|
||||||
i2 = copy.copy(item)
|
i2 = copy.copy(item)
|
||||||
@@ -1080,6 +1096,8 @@ def test_orderposition_list(endpoint_template, token_client, organizer, device,
|
|||||||
res["answers"][0]["question"] = question.pk
|
res["answers"][0]["question"] = question.pk
|
||||||
res["print_logs"][0]["id"] = op.print_logs.first().pk
|
res["print_logs"][0]["id"] = op.print_logs.first().pk
|
||||||
res["print_logs"][0]["device_id"] = device.device_id
|
res["print_logs"][0]["device_id"] = device.device_id
|
||||||
|
if endpoint_type == "organizer":
|
||||||
|
res["event"] = event.slug
|
||||||
|
|
||||||
resp = token_client.get(endpoint)
|
resp = token_client.get(endpoint)
|
||||||
assert resp.status_code == 200
|
assert resp.status_code == 200
|
||||||
|
|||||||
Reference in New Issue
Block a user