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

@@ -68,6 +68,8 @@
<td class="text-right flip"> <td class="text-right flip">
{% if "can_change_event_settings" in request.eventpermset %} {% if "can_change_event_settings" in request.eventpermset %}
<a href="{% url "plugins:badges: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:badges: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:badges: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:badges: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> <a href="{% url "plugins:badges: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 %} {% endif %}
</td> </td>

View File

@@ -24,6 +24,7 @@ from pretix.base.pdf import Renderer
from pretix.base.views.tasks import AsyncAction from pretix.base.views.tasks import AsyncAction
from pretix.control.permissions import EventPermissionRequiredMixin from pretix.control.permissions import EventPermissionRequiredMixin
from pretix.control.views.pdf import BaseEditorView from pretix.control.views.pdf import BaseEditorView
from pretix.helpers.models import modelcopy
from pretix.plugins.badges.forms import BadgeLayoutForm from pretix.plugins.badges.forms import BadgeLayoutForm
from pretix.plugins.badges.tasks import badges_create_pdf from pretix.plugins.badges.tasks import badges_create_pdf
@@ -55,6 +56,8 @@ class LayoutCreate(EventPermissionRequiredMixin, CreateView):
form.instance.default = True form.instance.default = True
messages.success(self.request, _('The new badge layout has been created.')) messages.success(self.request, _('The new badge layout has been created.'))
super().form_valid(form) 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, form.instance.log_action('pretix.plugins.badges.layout.added', user=self.request.user,
data=dict(form.cleaned_data)) data=dict(form.cleaned_data))
return redirect(reverse('plugins:badges:edit', kwargs={ return redirect(reverse('plugins:badges:edit', kwargs={
@@ -70,6 +73,24 @@ class LayoutCreate(EventPermissionRequiredMixin, CreateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
return super().get_context_data(**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): class LayoutSetDefault(EventPermissionRequiredMixin, DetailView):
model = BadgeLayout model = BadgeLayout

View File

@@ -65,6 +65,8 @@
<td class="text-right flip"> <td class="text-right flip">
{% if "can_change_event_settings" in request.eventpermset %} {% 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: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> <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 %} {% endif %}
</td> </td>

View File

@@ -23,6 +23,7 @@ from pretix.base.pdf import Renderer
from pretix.base.services.tickets import invalidate_cache from pretix.base.services.tickets import invalidate_cache
from pretix.control.permissions import EventPermissionRequiredMixin from pretix.control.permissions import EventPermissionRequiredMixin
from pretix.control.views.pdf import BaseEditorView from pretix.control.views.pdf import BaseEditorView
from pretix.helpers.models import modelcopy
from pretix.plugins.ticketoutputpdf.forms import TicketLayoutForm from pretix.plugins.ticketoutputpdf.forms import TicketLayoutForm
from pretix.plugins.ticketoutputpdf.ticketoutput import PdfTicketOutput from pretix.plugins.ticketoutputpdf.ticketoutput import PdfTicketOutput
@@ -91,6 +92,8 @@ class LayoutCreate(EventPermissionRequiredMixin, CreateView):
form.instance.default = True form.instance.default = True
messages.success(self.request, _('The new ticket layout has been created.')) messages.success(self.request, _('The new ticket layout has been created.'))
super().form_valid(form) 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, form.instance.log_action('pretix.plugins.ticketoutputpdf.layout.added', user=self.request.user,
data=dict(form.cleaned_data)) data=dict(form.cleaned_data))
return redirect(reverse('plugins:ticketoutputpdf:edit', kwargs={ return redirect(reverse('plugins:ticketoutputpdf:edit', kwargs={
@@ -106,6 +109,24 @@ class LayoutCreate(EventPermissionRequiredMixin, CreateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
return super().get_context_data(**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): class LayoutSetDefault(EventPermissionRequiredMixin, DetailView):
model = TicketLayout model = TicketLayout