Badges, PDF tickets: Allow to copy layouts

This commit is contained in:
Raphael Michel
2020-02-28 12:50:31 +01:00
parent 12b3ae81d6
commit de277cc959
4 changed files with 46 additions and 0 deletions

View File

@@ -65,6 +65,8 @@
<td class="text-right flip">
{% if "can_change_event_settings" in request.eventpermset %}
<a href="{% url "plugins:ticketoutputpdf:edit" organizer=request.event.organizer.slug event=request.event.slug layout=l.id %}" class="btn btn-default btn-sm"><i class="fa fa-edit"></i></a>
<a href="{% url "plugins:ticketoutputpdf:add" organizer=request.event.organizer.slug event=request.event.slug %}?copy_from={{ l.id }}"
class="btn btn-default btn-sm" title="{% trans "Clone" %}" data-toggle="tooltip"><i class="fa fa-copy"></i></a>
<a href="{% url "plugins:ticketoutputpdf:delete" organizer=request.event.organizer.slug event=request.event.slug layout=l.id %}" class="btn btn-danger btn-sm"><i class="fa fa-trash"></i></a>
{% endif %}
</td>

View File

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