add API endpoint /seats to event

This commit is contained in:
Mira Weller
2024-07-22 11:27:21 +02:00
parent 2c68b9e895
commit bc9f04e650
3 changed files with 33 additions and 3 deletions

View File

@@ -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',)

View File

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

View File

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