Add API for badge and ticket layout assignments

This commit is contained in:
Raphael Michel
2019-03-06 09:35:08 +01:00
parent f3ef00e3b7
commit 2b8949dea4
6 changed files with 51 additions and 5 deletions

View File

@@ -6,7 +6,13 @@ from pretix.api.serializers.order import CompatibleJSONField
from .models import BadgeItem, BadgeLayout
class ItemAssignmentSerializer(I18nAwareModelSerializer):
class BadgeItemAssignmentSerializer(I18nAwareModelSerializer):
class Meta:
model = BadgeItem
fields = ('id', 'item', 'layout')
class NestedItemAssignmentSerializer(I18nAwareModelSerializer):
class Meta:
model = BadgeItem
fields = ('item',)
@@ -14,7 +20,7 @@ class ItemAssignmentSerializer(I18nAwareModelSerializer):
class BadgeLayoutSerializer(I18nAwareModelSerializer):
layout = CompatibleJSONField()
item_assignments = ItemAssignmentSerializer(many=True)
item_assignments = NestedItemAssignmentSerializer(many=True)
class Meta:
model = BadgeLayout
@@ -28,3 +34,12 @@ class BadgeLayoutViewSet(viewsets.ReadOnlyModelViewSet):
def get_queryset(self):
return self.request.event.badge_layouts.all()
class BadgeItemViewSet(viewsets.ReadOnlyModelViewSet):
serializer_class = BadgeItemAssignmentSerializer
queryset = BadgeItem.objects.none()
lookup_field = 'id'
def get_queryset(self):
return BadgeItem.objects.filter(item__event=self.request.event)

View File

@@ -1,7 +1,7 @@
from django.conf.urls import url
from pretix.api.urls import event_router
from pretix.plugins.badges.api import BadgeLayoutViewSet
from pretix.plugins.badges.api import BadgeItemViewSet, BadgeLayoutViewSet
from .views import (
LayoutCreate, LayoutDelete, LayoutEditorView, LayoutListView,
@@ -23,3 +23,4 @@ urlpatterns = [
LayoutEditorView.as_view(), name='edit'),
]
event_router.register('badgelayouts', BadgeLayoutViewSet)
event_router.register('badgeitems', BadgeItemViewSet)

View File

@@ -8,6 +8,13 @@ from .models import TicketLayout, TicketLayoutItem
class ItemAssignmentSerializer(I18nAwareModelSerializer):
class Meta:
model = TicketLayoutItem
fields = ('id', 'layout', 'item', 'sales_channel')
class NestedItemAssignmentSerializer(I18nAwareModelSerializer):
class Meta:
model = TicketLayoutItem
fields = ('item', 'sales_channel')
@@ -15,7 +22,7 @@ class ItemAssignmentSerializer(I18nAwareModelSerializer):
class TicketLayoutSerializer(I18nAwareModelSerializer):
layout = CompatibleJSONField()
item_assignments = ItemAssignmentSerializer(many=True)
item_assignments = NestedItemAssignmentSerializer(many=True)
class Meta:
model = TicketLayout
@@ -29,3 +36,12 @@ class TicketLayoutViewSet(viewsets.ReadOnlyModelViewSet):
def get_queryset(self):
return self.request.event.ticket_layouts.all()
class TicketLayoutItemViewSet(viewsets.ReadOnlyModelViewSet):
serializer_class = ItemAssignmentSerializer
queryset = TicketLayoutItem.objects.none()
lookup_field = 'id'
def get_queryset(self):
return TicketLayoutItem.objects.filter(item__event=self.request.event)

View File

@@ -1,7 +1,9 @@
from django.conf.urls import url
from pretix.api.urls import event_router
from pretix.plugins.ticketoutputpdf.api import TicketLayoutViewSet
from pretix.plugins.ticketoutputpdf.api import (
TicketLayoutItemViewSet, TicketLayoutViewSet,
)
from pretix.plugins.ticketoutputpdf.views import (
LayoutCreate, LayoutDelete, LayoutEditorView, LayoutGetDefault,
LayoutListView, LayoutSetDefault,
@@ -22,3 +24,4 @@ urlpatterns = [
LayoutEditorView.as_view(), name='edit'),
]
event_router.register('ticketlayouts', TicketLayoutViewSet)
event_router.register('ticketlayoutitems', TicketLayoutItemViewSet)

View File

@@ -46,6 +46,11 @@ def test_api_list(env, client):
env[0].slug, env[0].organizer.slug)).content.decode('utf-8')
)
assert r['results'] == [res]
r = json.loads(
client.get('/api/v1/organizers/{}/events/{}/badgeitems/'.format(
env[0].slug, env[0].organizer.slug)).content.decode('utf-8')
)
assert r['results'] == [{'item': env[3].pk, 'layout': env[2].pk, 'id': env[2].item_assignments.first().pk}]
@pytest.mark.django_db

View File

@@ -46,6 +46,12 @@ def test_api_list(env, client):
env[0].slug, env[0].organizer.slug)).content.decode('utf-8')
)
assert r['results'] == [res]
r = json.loads(
client.get('/api/v1/organizers/{}/events/{}/ticketlayoutitems/'.format(
env[0].slug, env[0].organizer.slug)).content.decode('utf-8')
)
assert r['results'] == [{'item': env[3].pk, 'layout': env[2].pk, 'id': env[2].item_assignments.first().pk,
'sales_channel': 'web'}]
@pytest.mark.django_db