forked from CGM_Public/pretix_original
API: Fix sales channels when copying events (Z#23177154, Z#23169537)
This commit is contained in:
@@ -103,7 +103,7 @@ class SalesChannelMigrationMixin:
|
|||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
if data["sales_channels"] == all_channels:
|
if set(data["sales_channels"]) == all_channels:
|
||||||
data["all_sales_channels"] = True
|
data["all_sales_channels"] = True
|
||||||
data["limit_sales_channels"] = []
|
data["limit_sales_channels"] = []
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -437,21 +437,24 @@ class CloneEventSerializer(EventSerializer):
|
|||||||
testmode = validated_data.pop('testmode', None)
|
testmode = validated_data.pop('testmode', None)
|
||||||
has_subevents = validated_data.pop('has_subevents', None)
|
has_subevents = validated_data.pop('has_subevents', None)
|
||||||
tz = validated_data.pop('timezone', None)
|
tz = validated_data.pop('timezone', None)
|
||||||
sales_channels = validated_data.pop('sales_channels', None)
|
all_sales_channels = validated_data.pop('all_sales_channels', None)
|
||||||
|
limit_sales_channels = validated_data.pop('limit_sales_channels', None)
|
||||||
date_admission = validated_data.pop('date_admission', None)
|
date_admission = validated_data.pop('date_admission', None)
|
||||||
new_event = super().create({**validated_data, 'plugins': None})
|
new_event = super().create({**validated_data, 'plugins': None})
|
||||||
|
|
||||||
event = Event.objects.filter(slug=self.context['event'], organizer=self.context['organizer'].pk).first()
|
event = Event.objects.filter(slug=self.context['event'], organizer=self.context['organizer'].pk).first()
|
||||||
new_event.copy_data_from(event, skip_meta_data='meta_data' in validated_data)
|
new_event.copy_data_from(event, skip_meta_data='meta_data' in validated_data)
|
||||||
|
|
||||||
|
print("s", all_sales_channels, limit_sales_channels)
|
||||||
if plugins is not None:
|
if plugins is not None:
|
||||||
new_event.set_active_plugins(plugins)
|
new_event.set_active_plugins(plugins)
|
||||||
if is_public is not None:
|
if is_public is not None:
|
||||||
new_event.is_public = is_public
|
new_event.is_public = is_public
|
||||||
if testmode is not None:
|
if testmode is not None:
|
||||||
new_event.testmode = testmode
|
new_event.testmode = testmode
|
||||||
if sales_channels is not None:
|
if all_sales_channels is not None or limit_sales_channels is not None:
|
||||||
new_event.sales_channels = sales_channels
|
new_event.all_sales_channels = all_sales_channels
|
||||||
|
new_event.limit_sales_channels.set(limit_sales_channels)
|
||||||
if has_subevents is not None:
|
if has_subevents is not None:
|
||||||
new_event.has_subevents = has_subevents
|
new_event.has_subevents = has_subevents
|
||||||
if has_subevents is not None:
|
if has_subevents is not None:
|
||||||
|
|||||||
@@ -497,6 +497,51 @@ def test_event_create_with_clone(token_client, organizer, event, meta_prop, urls
|
|||||||
assert cloned_event.plugins == ""
|
assert cloned_event.plugins == ""
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
@pytest.mark.parametrize("urlstyle", [
|
||||||
|
'/api/v1/organizers/{}/events/{}/clone/',
|
||||||
|
'/api/v1/organizers/{}/events/?clone_from={}',
|
||||||
|
])
|
||||||
|
def test_event_create_with_clone_migrate_sales_channels(token_client, organizer, event, meta_prop, urlstyle):
|
||||||
|
with scopes_disabled():
|
||||||
|
all_channels = list(organizer.sales_channels.values_list("identifier", flat=True))
|
||||||
|
resp = token_client.post(
|
||||||
|
urlstyle.format(organizer.slug, event.slug),
|
||||||
|
{
|
||||||
|
"name": {
|
||||||
|
"de": "Demo Konference 2020 Test",
|
||||||
|
"en": "Demo Conference 2020 Test"
|
||||||
|
},
|
||||||
|
"live": False,
|
||||||
|
"testmode": True,
|
||||||
|
"currency": "EUR",
|
||||||
|
"date_from": "2018-12-27T10:00:00Z",
|
||||||
|
"date_to": "2018-12-28T10:00:00Z",
|
||||||
|
"date_admission": "2018-12-27T08:00:00Z",
|
||||||
|
"is_public": False,
|
||||||
|
"presale_start": None,
|
||||||
|
"presale_end": None,
|
||||||
|
"location": None,
|
||||||
|
"slug": "2030",
|
||||||
|
"sales_channels": all_channels,
|
||||||
|
"meta_data": {
|
||||||
|
"type": "Workshop"
|
||||||
|
},
|
||||||
|
"plugins": [
|
||||||
|
"pretix.plugins.ticketoutputpdf"
|
||||||
|
],
|
||||||
|
"timezone": "Europe/Vienna"
|
||||||
|
},
|
||||||
|
format='json'
|
||||||
|
)
|
||||||
|
|
||||||
|
assert resp.status_code == 201
|
||||||
|
with scopes_disabled():
|
||||||
|
cloned_event = Event.objects.get(organizer=organizer.pk, slug='2030')
|
||||||
|
assert cloned_event.all_sales_channels
|
||||||
|
assert not cloned_event.limit_sales_channels.exists()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_event_create_with_clone_unknown_source(user, user_client, organizer, event):
|
def test_event_create_with_clone_unknown_source(user, user_client, organizer, event):
|
||||||
with scopes_disabled():
|
with scopes_disabled():
|
||||||
|
|||||||
Reference in New Issue
Block a user