From bc9f04e65010491b9e97627b710b3bb256f8ca4b Mon Sep 17 00:00:00 2001 From: Mira Weller Date: Mon, 22 Jul 2024 11:27:21 +0200 Subject: [PATCH] add API endpoint /seats to event --- src/pretix/api/serializers/event.py | 11 ++++++++++- src/pretix/api/urls.py | 1 + src/pretix/api/views/event.py | 24 ++++++++++++++++++++++-- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/pretix/api/serializers/event.py b/src/pretix/api/serializers/event.py index 10a4e7fe49..609466042e 100644 --- a/src/pretix/api/serializers/event.py +++ b/src/pretix/api/serializers/event.py @@ -52,7 +52,7 @@ from pretix.api.serializers import ( from pretix.api.serializers.i18n import I18nAwareModelSerializer from pretix.api.serializers.settings import SettingsSerializer from pretix.base.models import ( - Device, Event, SalesChannel, TaxRule, TeamAPIToken, + Device, Event, SalesChannel, TaxRule, TeamAPIToken, Seat, ) from pretix.base.models.event import SubEvent from pretix.base.models.items import ( @@ -969,3 +969,12 @@ class ItemMetaPropertiesSerializer(I18nAwareModelSerializer): class Meta: model = ItemMetaProperty fields = ('id', 'name', 'default', 'required', 'allowed_values') + + +class SeatSerializer(I18nAwareModelSerializer): + class Meta: + model = Seat + read_only_fields = ('id', 'subevent', 'zone_name', 'row_name', 'row_label', + 'seat_number', 'seat_label', 'seat_guid', 'product', 'sorting_rank', 'x', 'y',) + fields = ('id', 'subevent', 'zone_name', 'row_name', 'row_label', + 'seat_number', 'seat_label', 'seat_guid', 'product', 'blocked', 'sorting_rank', 'x', 'y',) diff --git a/src/pretix/api/urls.py b/src/pretix/api/urls.py index 78d9cb68a8..90dfd33a8b 100644 --- a/src/pretix/api/urls.py +++ b/src/pretix/api/urls.py @@ -87,6 +87,7 @@ event_router.register(r'invoices', order.InvoiceViewSet) event_router.register(r'revokedsecrets', order.RevokedSecretViewSet, basename='revokedsecrets') event_router.register(r'blockedsecrets', order.BlockedSecretViewSet, basename='blockedsecrets') event_router.register(r'taxrules', event.TaxRuleViewSet) +event_router.register(r'seats', event.SeatViewSet) event_router.register(r'waitinglistentries', waitinglist.WaitingListViewSet) event_router.register(r'checkinlists', checkin.CheckinListViewSet) event_router.register(r'cartpositions', cart.CartPositionViewSet) diff --git a/src/pretix/api/views/event.py b/src/pretix/api/views/event.py index 043785c0d4..55b8dd8528 100644 --- a/src/pretix/api/views/event.py +++ b/src/pretix/api/views/event.py @@ -49,12 +49,12 @@ from pretix.api.pagination import TotalOrderingFilter from pretix.api.serializers.event import ( CloneEventSerializer, DeviceEventSettingsSerializer, EventSerializer, EventSettingsSerializer, ItemMetaPropertiesSerializer, SubEventSerializer, - TaxRuleSerializer, + TaxRuleSerializer, SeatSerializer, ) from pretix.api.views import ConditionalListView from pretix.base.models import ( CartPosition, Device, Event, ItemMetaProperty, SeatCategoryMapping, - TaxRule, TeamAPIToken, + TaxRule, TeamAPIToken, Seat, ) from pretix.base.models.event import SubEvent from pretix.base.services.quotas import QuotaAvailability @@ -667,3 +667,23 @@ class EventSettingsView(views.APIView): 'request': request }) return Response(s.data) + + +class SeatViewSet(ConditionalListView, viewsets.ModelViewSet): + serializer_class = SeatSerializer + queryset = Seat.objects.none() + write_permission = 'can_change_event_settings' + filter_backends = [DjangoFilterBackend] + filterset_fields = ['zone_name', 'row_name', 'row_label', 'seat_number', 'seat_label', 'seat_guid', 'blocked'] + + def get_queryset(self): + return self.request.event.seats.all() + + def perform_update(self, serializer): + super().perform_update(serializer) + serializer.instance.log_action( + 'pretix.event.seat.changed', + user=self.request.user, + auth=self.request.auth, + data=self.request.data + )