Fix #549 -- Multiple PDF ticket layouts (#938)

- [x] Data model
- [x] CRUD
- [x] Editor
- [x] Migration from old settings
- [x] Clone files when copying events
  - [x] badges?
- [x] Actual ticket output
- [x] Default layout on event creation
- [x] Link well from ticketing settings
- [x] Tests
- [x] Shipping plugin
  - [x] Migration
  - [x] Settings
  - [x] Create default
- [x] API
This commit is contained in:
Raphael Michel
2018-06-06 15:27:55 +02:00
committed by GitHub
parent 72661623f3
commit e3450baeb3
29 changed files with 1302 additions and 36 deletions

View File

@@ -0,0 +1,30 @@
from rest_framework import viewsets
from pretix.api.serializers.i18n import I18nAwareModelSerializer
from pretix.api.serializers.order import CompatibleJSONField
from .models import BadgeItem, BadgeLayout
class ItemAssignmentSerializer(I18nAwareModelSerializer):
class Meta:
model = BadgeItem
fields = ('item',)
class BadgeLayoutSerializer(I18nAwareModelSerializer):
layout = CompatibleJSONField()
item_assignments = ItemAssignmentSerializer(many=True)
class Meta:
model = BadgeLayout
fields = ('id', 'name', 'default', 'layout', 'background', 'item_assignments')
class BadgeLayoutViewSet(viewsets.ReadOnlyModelViewSet):
serializer_class = BadgeLayoutSerializer
queryset = BadgeLayout.objects.none()
lookup_field = 'id'
def get_queryset(self):
return self.request.event.badge_layouts.all()

View File

@@ -19,6 +19,7 @@ class BadgeItemForm(forms.ModelForm):
event = kwargs.pop('event')
super().__init__(*args, **kwargs)
self.fields['layout'].label = _('Badge layout')
self.fields['layout'].empty_label = _('(Event default)')
self.fields['layout'].queryset = event.badge_layouts.all()
self.fields['layout'].required = False

View File

@@ -70,6 +70,10 @@ def event_copy_data_receiver(sender, other, item_map, **kwargs):
bl.pk = None
bl.event = sender
bl.save()
if bl.background and bl.background.name:
bl.background.save('background.pdf', bl.background)
layout_map[oldid] = bl
for bi in BadgeItem.objects.filter(item__event=other):

View File

@@ -1,5 +1,8 @@
from django.conf.urls import url
from pretix.api.urls import event_router
from pretix.plugins.badges.api import BadgeLayoutViewSet
from .views import (
LayoutCreate, LayoutDelete, LayoutEditorView, LayoutListView,
LayoutSetDefault, OrderPrintDo,
@@ -19,3 +22,4 @@ urlpatterns = [
url(r'^control/event/(?P<organizer>[^/]+)/(?P<event>[^/]+)/badges/(?P<layout>\d+)/editor',
LayoutEditorView.as_view(), name='edit'),
]
event_router.register('badgelayouts', BadgeLayoutViewSet)