diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py index 6e1a20853e..be347ecbda 100644 --- a/src/pretix/control/forms/item.py +++ b/src/pretix/control/forms/item.py @@ -105,12 +105,32 @@ class ItemCreateForm(I18nModelForm): 'You can select the variations in the next step.'), required=False) + def __init__(self, *args, **kwargs): + self.event = kwargs['event'] + super().__init__(*args, **kwargs) + self.fields['copy_from'] = forms.ModelChoiceField( + label=_("Copy product information"), + queryset=self.event.items.all(), + widget=forms.Select, + empty_label=_('Do not copy'), + required=False + ) + def save(self, *args, **kwargs): instance = super().save(*args, **kwargs) if self.cleaned_data.get('has_variations'): - ItemVariation.objects.create( - item=instance, value=__('Standard') - ) + if self.cleaned_data.get('copy_from') and self.cleaned_data.get('copy_from').has_variations: + for variation in self.cleaned_data['copy_from'].variations.all(): + ItemVariation.objects.create(item=instance, value=variation.value, active=variation.active, + position=variation.position, default_price=variation.default_price) + else: + ItemVariation.objects.create( + item=instance, value=__('Standard') + ) + + for question in Question.objects.filter(items=self.cleaned_data.get('copy_from')): + question.items.add(instance) + return instance class Meta: diff --git a/src/pretix/control/templates/pretixcontrol/item/create.html b/src/pretix/control/templates/pretixcontrol/item/create.html index 2eeb17a995..b94c04339e 100644 --- a/src/pretix/control/templates/pretixcontrol/item/create.html +++ b/src/pretix/control/templates/pretixcontrol/item/create.html @@ -7,6 +7,7 @@
{% trans "General information" %} {% bootstrap_field form.name layout="horizontal" %} + {% bootstrap_field form.copy_from layout="horizontal" %} {% bootstrap_field form.has_variations layout="horizontal" %} {% bootstrap_field form.admission layout="horizontal" %}
diff --git a/src/pretix/control/views/item.py b/src/pretix/control/views/item.py index 7659916492..c0453cefab 100644 --- a/src/pretix/control/views/item.py +++ b/src/pretix/control/views/item.py @@ -766,6 +766,16 @@ class ItemCreate(EventPermissionRequiredMixin, CreateView): @transaction.atomic def form_valid(self, form): messages.success(self.request, _('Your changes have been saved.')) + if form.cleaned_data['copy_from']: + form.instance.category = form.cleaned_data['copy_from'].category + form.instance.description = form.cleaned_data['copy_from'].description + form.instance.active = form.cleaned_data['copy_from'].active + form.instance.available_from = form.cleaned_data['copy_from'].available_from + form.instance.available_until = form.cleaned_data['copy_from'].available_until + form.instance.require_voucher = form.cleaned_data['copy_from'].require_voucher + form.instance.hide_without_voucher = form.cleaned_data['copy_from'].hide_without_voucher + form.instance.allow_cancel = form.cleaned_data['copy_from'].allow_cancel + ret = super().form_valid(form) form.instance.log_action('pretix.event.item.added', user=self.request.user, data={ k: (form.cleaned_data.get(k).name