diff --git a/src/pretix/plugins/badges/api.py b/src/pretix/plugins/badges/api.py index 6d3952427..fa749eb11 100644 --- a/src/pretix/plugins/badges/api.py +++ b/src/pretix/plugins/badges/api.py @@ -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) diff --git a/src/pretix/plugins/badges/urls.py b/src/pretix/plugins/badges/urls.py index dca7740bd..ccbdf1827 100644 --- a/src/pretix/plugins/badges/urls.py +++ b/src/pretix/plugins/badges/urls.py @@ -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) diff --git a/src/pretix/plugins/ticketoutputpdf/api.py b/src/pretix/plugins/ticketoutputpdf/api.py index 28ebd4a2a..3b8321190 100644 --- a/src/pretix/plugins/ticketoutputpdf/api.py +++ b/src/pretix/plugins/ticketoutputpdf/api.py @@ -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) diff --git a/src/pretix/plugins/ticketoutputpdf/urls.py b/src/pretix/plugins/ticketoutputpdf/urls.py index 88892fae3..565b55145 100644 --- a/src/pretix/plugins/ticketoutputpdf/urls.py +++ b/src/pretix/plugins/ticketoutputpdf/urls.py @@ -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) diff --git a/src/tests/plugins/badges/test_api.py b/src/tests/plugins/badges/test_api.py index 49cacf117..71c195a9b 100644 --- a/src/tests/plugins/badges/test_api.py +++ b/src/tests/plugins/badges/test_api.py @@ -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 diff --git a/src/tests/plugins/ticketoutputpdf/test_api.py b/src/tests/plugins/ticketoutputpdf/test_api.py index 68c65dee5..f6043bea7 100644 --- a/src/tests/plugins/ticketoutputpdf/test_api.py +++ b/src/tests/plugins/ticketoutputpdf/test_api.py @@ -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