mirror of
https://github.com/pretix/pretix.git
synced 2026-09-14 16:24:43 +00:00
Order API: Do not lock event with infinite quota when creating an order (#2675)
This commit is contained in:
@@ -977,8 +977,18 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
|
|||||||
else:
|
else:
|
||||||
ia = None
|
ia = None
|
||||||
|
|
||||||
|
lock_required = False
|
||||||
|
for pos_data in positions_data:
|
||||||
|
pos_data['_quotas'] = list(
|
||||||
|
pos_data.get('variation').quotas.filter(subevent=pos_data.get('subevent'))
|
||||||
|
if pos_data.get('variation')
|
||||||
|
else pos_data.get('item').quotas.filter(subevent=pos_data.get('subevent'))
|
||||||
|
)
|
||||||
|
if pos_data.get('voucher') or pos_data.get('seat') or any(q.size is not None for q in pos_data['_quotas']):
|
||||||
|
lock_required = True
|
||||||
|
|
||||||
lockfn = self.context['event'].lock
|
lockfn = self.context['event'].lock
|
||||||
if simulate:
|
if simulate or not lock_required:
|
||||||
lockfn = NoLockManager
|
lockfn = NoLockManager
|
||||||
with lockfn() as now_dt:
|
with lockfn() as now_dt:
|
||||||
free_seats = set()
|
free_seats = set()
|
||||||
@@ -1102,9 +1112,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
|
|||||||
str(pos_data.get('item'))
|
str(pos_data.get('item'))
|
||||||
)]
|
)]
|
||||||
|
|
||||||
new_quotas = (pos_data.get('variation').quotas.filter(subevent=pos_data.get('subevent'))
|
new_quotas = pos_data['_quotas']
|
||||||
if pos_data.get('variation')
|
|
||||||
else pos_data.get('item').quotas.filter(subevent=pos_data.get('subevent')))
|
|
||||||
if len(new_quotas) == 0:
|
if len(new_quotas) == 0:
|
||||||
errs[i]['item'] = [gettext_lazy('The product "{}" is not assigned to a quota.').format(
|
errs[i]['item'] = [gettext_lazy('The product "{}" is not assigned to a quota.').format(
|
||||||
str(pos_data.get('item'))
|
str(pos_data.get('item'))
|
||||||
@@ -1158,7 +1166,7 @@ class OrderCreateSerializer(I18nAwareModelSerializer):
|
|||||||
pos_data['attendee_name_parts'] = {
|
pos_data['attendee_name_parts'] = {
|
||||||
'_legacy': attendee_name
|
'_legacy': attendee_name
|
||||||
}
|
}
|
||||||
pos = OrderPosition(**{k: v for k, v in pos_data.items() if k != 'answers'})
|
pos = OrderPosition(**{k: v for k, v in pos_data.items() if k != 'answers' and k != '_quotas'})
|
||||||
if simulate:
|
if simulate:
|
||||||
pos.order = order._wrapped
|
pos.order = order._wrapped
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user