mirror of
https://github.com/pretix/pretix.git
synced 2026-05-08 15:44:02 +00:00
Subevent bulk creation: Handle available_from of items the same way as dates (#3822)
This commit is contained in:
@@ -399,6 +399,19 @@ class SubEventEditorMixin(MetaDataEditorMixin):
|
|||||||
except SubEvent.DoesNotExist:
|
except SubEvent.DoesNotExist:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def _copy_from_date_to_relative(self, value):
|
||||||
|
if not value:
|
||||||
|
return value
|
||||||
|
tz = self.request.event.timezone
|
||||||
|
days = (self.copy_from.date_from.astimezone(tz).date() - value.astimezone(tz).date()).days
|
||||||
|
return RelativeDateWrapper(RelativeDate(
|
||||||
|
days=abs(days),
|
||||||
|
base_date_name='date_from',
|
||||||
|
time=value.astimezone(tz).time(),
|
||||||
|
minutes=None,
|
||||||
|
is_after=days < 0,
|
||||||
|
))
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def itemvar_forms(self):
|
def itemvar_forms(self):
|
||||||
se_item_instances = {
|
se_item_instances = {
|
||||||
@@ -411,15 +424,21 @@ class SubEventEditorMixin(MetaDataEditorMixin):
|
|||||||
if self.copy_from:
|
if self.copy_from:
|
||||||
se_item_instances = {
|
se_item_instances = {
|
||||||
sei.item_id: SubEventItem(
|
sei.item_id: SubEventItem(
|
||||||
item=sei.item, price=sei.price, disabled=sei.disabled,
|
item=sei.item,
|
||||||
available_from=sei.available_from, available_until=sei.available_until
|
price=sei.price,
|
||||||
|
disabled=sei.disabled,
|
||||||
|
available_from=sei.available_from,
|
||||||
|
available_until=sei.available_until
|
||||||
)
|
)
|
||||||
for sei in SubEventItem.objects.filter(subevent=self.copy_from).select_related('item')
|
for sei in SubEventItem.objects.filter(subevent=self.copy_from).select_related('item')
|
||||||
}
|
}
|
||||||
se_var_instances = {
|
se_var_instances = {
|
||||||
sei.variation_id: SubEventItemVariation(
|
sei.variation_id: SubEventItemVariation(
|
||||||
variation=sei.variation, price=sei.price, disabled=sei.disabled,
|
variation=sei.variation,
|
||||||
available_from=sei.available_from, available_until=sei.available_until
|
price=sei.price,
|
||||||
|
disabled=sei.disabled,
|
||||||
|
available_from=sei.available_from,
|
||||||
|
available_until=sei.available_until
|
||||||
)
|
)
|
||||||
for sei in SubEventItemVariation.objects.filter(subevent=self.copy_from).select_related('variation')
|
for sei in SubEventItemVariation.objects.filter(subevent=self.copy_from).select_related('variation')
|
||||||
}
|
}
|
||||||
@@ -429,17 +448,34 @@ class SubEventEditorMixin(MetaDataEditorMixin):
|
|||||||
if i.has_variations:
|
if i.has_variations:
|
||||||
for v in i.variations.all():
|
for v in i.variations.all():
|
||||||
inst = se_var_instances.get(v.pk) or SubEventItemVariation(subevent=self.object, variation=v)
|
inst = se_var_instances.get(v.pk) or SubEventItemVariation(subevent=self.object, variation=v)
|
||||||
|
if self.copy_from:
|
||||||
|
initial = {
|
||||||
|
'rel_available_from': self._copy_from_date_to_relative(inst.available_from),
|
||||||
|
'rel_available_until': self._copy_from_date_to_relative(inst.available_until)
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
initial = {}
|
||||||
formlist.append(self.itemvarformclass(
|
formlist.append(self.itemvarformclass(
|
||||||
prefix='itemvar-{}'.format(v.pk),
|
prefix='itemvar-{}'.format(v.pk),
|
||||||
item=i, variation=v,
|
item=i,
|
||||||
|
variation=v,
|
||||||
|
initial=initial,
|
||||||
instance=inst,
|
instance=inst,
|
||||||
data=(self.request.POST if self.request.method == "POST" else None)
|
data=(self.request.POST if self.request.method == "POST" else None)
|
||||||
))
|
))
|
||||||
else:
|
else:
|
||||||
inst = se_item_instances.get(i.pk) or SubEventItem(subevent=self.object, item=i)
|
inst = se_item_instances.get(i.pk) or SubEventItem(subevent=self.object, item=i)
|
||||||
|
if self.copy_from:
|
||||||
|
initial = {
|
||||||
|
'rel_available_from': self._copy_from_date_to_relative(inst.available_from),
|
||||||
|
'rel_available_until': self._copy_from_date_to_relative(inst.available_until)
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
initial = {}
|
||||||
formlist.append(self.itemformclass(
|
formlist.append(self.itemformclass(
|
||||||
prefix='item-{}'.format(i.pk),
|
prefix='item-{}'.format(i.pk),
|
||||||
item=i,
|
item=i,
|
||||||
|
initial=initial,
|
||||||
instance=inst,
|
instance=inst,
|
||||||
data=(self.request.POST if self.request.method == "POST" else None)
|
data=(self.request.POST if self.request.method == "POST" else None)
|
||||||
))
|
))
|
||||||
@@ -757,18 +793,8 @@ class SubEventBulkCreate(SubEventEditorMixin, EventPermissionRequiredMixin, Asyn
|
|||||||
initial['time_from'] = i.date_from.astimezone(tz).time()
|
initial['time_from'] = i.date_from.astimezone(tz).time()
|
||||||
initial['time_to'] = i.date_to.astimezone(tz).time() if i.date_to else None
|
initial['time_to'] = i.date_to.astimezone(tz).time() if i.date_to else None
|
||||||
initial['time_admission'] = i.date_admission.astimezone(tz).time() if i.date_admission else None
|
initial['time_admission'] = i.date_admission.astimezone(tz).time() if i.date_admission else None
|
||||||
initial['rel_presale_start'] = RelativeDateWrapper(RelativeDate(
|
initial['rel_presale_start'] = self._copy_from_date_to_relative(i.presale_start)
|
||||||
days=(i.date_from.astimezone(tz).date() - i.presale_start.astimezone(tz).date()).days,
|
initial['rel_presale_end'] = self._copy_from_date_to_relative(i.presale_end)
|
||||||
base_date_name='date_from',
|
|
||||||
time=i.presale_start.astimezone(tz).time(),
|
|
||||||
minutes=None
|
|
||||||
)) if i.presale_start else None
|
|
||||||
initial['rel_presale_end'] = RelativeDateWrapper(RelativeDate(
|
|
||||||
days=(i.date_from.astimezone(tz).date() - i.presale_end.astimezone(tz).date()).days,
|
|
||||||
base_date_name='date_from',
|
|
||||||
time=i.presale_end.astimezone(tz).time(),
|
|
||||||
minutes=None
|
|
||||||
)) if i.presale_end else None
|
|
||||||
else:
|
else:
|
||||||
kwargs['instance'] = SubEvent(event=self.request.event)
|
kwargs['instance'] = SubEvent(event=self.request.event)
|
||||||
initial['location'] = self.request.event.location
|
initial['location'] = self.request.event.location
|
||||||
|
|||||||
Reference in New Issue
Block a user