From 3b4b91c81f2ff7f169cc059ee97104a438ba8af7 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Wed, 15 Jan 2025 15:45:34 +0100 Subject: [PATCH] Copy ItemVariation.limit_sales_channels when copying items --- src/pretix/control/forms/item.py | 2 ++ src/tests/control/test_items.py | 11 +++++++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pretix/control/forms/item.py b/src/pretix/control/forms/item.py index c11e6b3f5..1d7831284 100644 --- a/src/pretix/control/forms/item.py +++ b/src/pretix/control/forms/item.py @@ -539,6 +539,8 @@ class ItemCreateForm(I18nModelForm): v.pk = None v.item = instance v.save() + if not variation.all_sales_channels: + v.limit_sales_channels.set(variation.limit_sales_channels.all()) for mv in variation.meta_values.all(): mv.pk = None mv.variation = v diff --git a/src/tests/control/test_items.py b/src/tests/control/test_items.py index 731ee24f6..dccadfc12 100644 --- a/src/tests/control/test_items.py +++ b/src/tests/control/test_items.py @@ -673,7 +673,12 @@ class ItemsTest(ItemFormTest): with scopes_disabled(): q = Question.objects.create(event=self.event1, question="Size", type="N") q.items.add(self.item2) - self.item2.sales_channels = ["web", "bar"] + self.item2.limit_sales_channels.set(self.orga1.sales_channels.filter(identifier__in=["web", "bar"])) + self.item2.all_sales_channels = False + self.item2.save() + self.var2.limit_sales_channels.set(self.orga1.sales_channels.filter(identifier__in=["web"])) + self.var2.all_sales_channels = False + self.var2.save() prop = self.event1.item_meta_properties.create(name="Foo") self.item2.meta_values.create(property=prop, value="Bar") @@ -690,6 +695,7 @@ class ItemsTest(ItemFormTest): with scopes_disabled(): i_old = Item.objects.get(name__icontains='Business') i_new = Item.objects.get(name__icontains='Intermediate') + v2_new = i_new.variations.get(value__icontains='Gold') assert i_new.category == i_old.category assert i_new.description == i_old.description assert i_new.active == i_old.active @@ -698,7 +704,8 @@ class ItemsTest(ItemFormTest): assert i_new.require_voucher == i_old.require_voucher assert i_new.hide_without_voucher == i_old.hide_without_voucher assert i_new.allow_cancel == i_old.allow_cancel - assert set(i_new.limit_sales_channels.all()) == set(i_old.limit_sales_channels.all()) + assert set(i_new.limit_sales_channels.values_list("identifier", flat=True)) == {"web", "bar"} + assert set(v2_new.limit_sales_channels.values_list("identifier", flat=True)) == {"web"} assert i_new.meta_data == i_old.meta_data == {"Foo": "Bar"} assert set(i_new.questions.all()) == set(i_old.questions.all()) assert set([str(v.value) for v in i_new.variations.all()]) == set([str(v.value) for v in i_old.variations.all()])