diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py
index 7799b6306b..fb71d98837 100644
--- a/src/pretix/control/forms/item.py
+++ b/src/pretix/control/forms/item.py
@@ -125,7 +125,7 @@ class QuotaForm(I18nModelForm):
items = kwargs.pop('items', None) or self.event.items.prefetch_related('variations')
self.original_instance = modelcopy(self.instance) if self.instance else None
initial = kwargs.get('initial', {})
- if self.instance and self.instance.pk:
+ if self.instance and self.instance.pk and 'itemvars' not in initial:
initial['itemvars'] = [str(i.pk) for i in self.instance.items.all()] + [
'{}-{}'.format(v.item_id, v.pk) for v in self.instance.variations.all()
]
diff --git a/src/pretix/control/templates/pretixcontrol/items/categories.html b/src/pretix/control/templates/pretixcontrol/items/categories.html
index 9e140ad20c..e07537bee0 100644
--- a/src/pretix/control/templates/pretixcontrol/items/categories.html
+++ b/src/pretix/control/templates/pretixcontrol/items/categories.html
@@ -45,6 +45,10 @@
+
+
+
|
diff --git a/src/pretix/control/templates/pretixcontrol/items/quotas.html b/src/pretix/control/templates/pretixcontrol/items/quotas.html
index c01c0067c7..94dbac96e8 100644
--- a/src/pretix/control/templates/pretixcontrol/items/quotas.html
+++ b/src/pretix/control/templates/pretixcontrol/items/quotas.html
@@ -77,6 +77,10 @@
{% include "pretixcontrol/items/fragment_quota_availability.html" with availability=q.availability closed=q.closed %} |
+
+
+
|
diff --git a/src/pretix/control/views/item.py b/src/pretix/control/views/item.py
index 909bc6b9fb..dd5fae44b3 100644
--- a/src/pretix/control/views/item.py
+++ b/src/pretix/control/views/item.py
@@ -39,6 +39,7 @@ from pretix.control.permissions import (
EventPermissionRequiredMixin, event_permission_required,
)
from pretix.control.signals import item_forms, item_formsets
+from pretix.helpers.models import modelcopy
from . import ChartContainingView, CreateView, PaginationMixin, UpdateView
@@ -189,6 +190,25 @@ class CategoryCreate(EventPermissionRequiredMixin, CreateView):
'event': self.request.event.slug,
})
+ @cached_property
+ def copy_from(self):
+ if self.request.GET.get("copy_from") and not getattr(self, 'object', None):
+ try:
+ return self.request.event.categories.get(pk=self.request.GET.get("copy_from"))
+ except ItemCategory.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
+ else:
+ kwargs['instance'] = ItemCategory(event=self.request.event)
+ return kwargs
+
@transaction.atomic
def form_valid(self, form):
form.instance.event = self.request.event
@@ -605,6 +625,29 @@ class QuotaCreate(EventPermissionRequiredMixin, CreateView):
form.instance.log_action('pretix.event.quota.added', user=self.request.user, data=dict(form.cleaned_data))
return ret
+ @cached_property
+ def copy_from(self):
+ if self.request.GET.get("copy_from") and not getattr(self, 'object', None):
+ try:
+ return self.request.event.quotas.get(pk=self.request.GET.get("copy_from"))
+ except Quota.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', {})
+ kwargs['initial']['itemvars'] = [str(i.pk) for i in self.copy_from.items.all()] + [
+ '{}-{}'.format(v.item_id, v.pk) for v in self.copy_from.variations.all()
+ ]
+ else:
+ kwargs['instance'] = Quota(event=self.request.event)
+ return kwargs
+
def form_invalid(self, form):
messages.error(self.request, _('We could not save your changes. See below for details.'))
return super().form_invalid(form)