diff --git a/src/pretix/plugins/badges/templates/pretixplugins/badges/index.html b/src/pretix/plugins/badges/templates/pretixplugins/badges/index.html index 1e87ff456..38d28cb71 100644 --- a/src/pretix/plugins/badges/templates/pretixplugins/badges/index.html +++ b/src/pretix/plugins/badges/templates/pretixplugins/badges/index.html @@ -68,6 +68,8 @@ {% if "can_change_event_settings" in request.eventpermset %} + {% endif %} diff --git a/src/pretix/plugins/badges/views.py b/src/pretix/plugins/badges/views.py index bb79670fc..325bd5edb 100644 --- a/src/pretix/plugins/badges/views.py +++ b/src/pretix/plugins/badges/views.py @@ -24,6 +24,7 @@ from pretix.base.pdf import Renderer from pretix.base.views.tasks import AsyncAction from pretix.control.permissions import EventPermissionRequiredMixin from pretix.control.views.pdf import BaseEditorView +from pretix.helpers.models import modelcopy from pretix.plugins.badges.forms import BadgeLayoutForm from pretix.plugins.badges.tasks import badges_create_pdf @@ -55,6 +56,8 @@ class LayoutCreate(EventPermissionRequiredMixin, CreateView): form.instance.default = True messages.success(self.request, _('The new badge layout has been created.')) super().form_valid(form) + if form.instance.background and form.instance.background.name: + form.instance.background.save('background.pdf', form.instance.background) form.instance.log_action('pretix.plugins.badges.layout.added', user=self.request.user, data=dict(form.cleaned_data)) return redirect(reverse('plugins:badges:edit', kwargs={ @@ -70,6 +73,24 @@ class LayoutCreate(EventPermissionRequiredMixin, CreateView): def get_context_data(self, **kwargs): return super().get_context_data(**kwargs) + @cached_property + def copy_from(self): + if self.request.GET.get("copy_from") and not getattr(self, 'object', None): + try: + return self.request.event.badge_layouts.get(pk=self.request.GET.get("copy_from")) + except BadgeLayout.DoesNotExist: + pass + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + + if self.copy_from: + i = modelcopy(self.copy_from) + i.pk = None + kwargs['instance'] = i + kwargs.setdefault('initial', {}) + return kwargs + class LayoutSetDefault(EventPermissionRequiredMixin, DetailView): model = BadgeLayout diff --git a/src/pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html b/src/pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html index 79affe071..a2db4f765 100644 --- a/src/pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html +++ b/src/pretix/plugins/ticketoutputpdf/templates/pretixplugins/ticketoutputpdf/index.html @@ -65,6 +65,8 @@ {% if "can_change_event_settings" in request.eventpermset %} + {% endif %} diff --git a/src/pretix/plugins/ticketoutputpdf/views.py b/src/pretix/plugins/ticketoutputpdf/views.py index 2f0e1520a..66da58206 100644 --- a/src/pretix/plugins/ticketoutputpdf/views.py +++ b/src/pretix/plugins/ticketoutputpdf/views.py @@ -23,6 +23,7 @@ from pretix.base.pdf import Renderer from pretix.base.services.tickets import invalidate_cache from pretix.control.permissions import EventPermissionRequiredMixin from pretix.control.views.pdf import BaseEditorView +from pretix.helpers.models import modelcopy from pretix.plugins.ticketoutputpdf.forms import TicketLayoutForm from pretix.plugins.ticketoutputpdf.ticketoutput import PdfTicketOutput @@ -91,6 +92,8 @@ class LayoutCreate(EventPermissionRequiredMixin, CreateView): form.instance.default = True messages.success(self.request, _('The new ticket layout has been created.')) super().form_valid(form) + if form.instance.background and form.instance.background.name: + form.instance.background.save('background.pdf', form.instance.background) form.instance.log_action('pretix.plugins.ticketoutputpdf.layout.added', user=self.request.user, data=dict(form.cleaned_data)) return redirect(reverse('plugins:ticketoutputpdf:edit', kwargs={ @@ -106,6 +109,24 @@ class LayoutCreate(EventPermissionRequiredMixin, CreateView): def get_context_data(self, **kwargs): return super().get_context_data(**kwargs) + @cached_property + def copy_from(self): + if self.request.GET.get("copy_from") and not getattr(self, 'object', None): + try: + return self.request.event.ticket_layouts.get(pk=self.request.GET.get("copy_from")) + except TicketLayout.DoesNotExist: + pass + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + + if self.copy_from: + i = modelcopy(self.copy_from) + i.pk = None + kwargs['instance'] = i + kwargs.setdefault('initial', {}) + return kwargs + class LayoutSetDefault(EventPermissionRequiredMixin, DetailView): model = TicketLayout