Move atomic transaction block

This commit is contained in:
Raphael Michel
2017-02-03 13:11:24 +01:00
parent 5495cd749a
commit 7146d984d0

View File

@@ -288,7 +288,6 @@ def _check_positions(event: Event, now_dt: datetime, positions: List[CartPositio
raise OrderError(err) raise OrderError(err)
@transaction.atomic
def _create_order(event: Event, email: str, positions: List[CartPosition], now_dt: datetime, def _create_order(event: Event, email: str, positions: List[CartPosition], now_dt: datetime,
payment_provider: BasePaymentProvider, locale: str=None, address: int=None, payment_provider: BasePaymentProvider, locale: str=None, address: int=None,
meta_info: dict=None): meta_info: dict=None):
@@ -317,33 +316,35 @@ def _create_order(event: Event, email: str, positions: List[CartPosition], now_d
if last_date < expires: if last_date < expires:
expires = last_date expires = last_date
order = Order.objects.create( with transaction.atomic():
status=Order.STATUS_PENDING, order = Order.objects.create(
event=event, status=Order.STATUS_PENDING,
email=email, event=event,
datetime=now_dt, email=email,
expires=expires, datetime=now_dt,
locale=locale, expires=expires,
total=total, locale=locale,
payment_fee=payment_fee, total=total,
payment_provider=payment_provider.identifier, payment_fee=payment_fee,
meta_info=json.dumps(meta_info or {}), payment_provider=payment_provider.identifier,
) meta_info=json.dumps(meta_info or {}),
OrderPosition.transform_cart_positions(positions, order) )
OrderPosition.transform_cart_positions(positions, order)
if address is not None: if address is not None:
try: try:
addr = InvoiceAddress.objects.get( addr = InvoiceAddress.objects.get(
pk=address pk=address
) )
if addr.order is not None: if addr.order is not None:
addr.pk = None addr.pk = None
addr.order = order addr.order = order
addr.save() addr.save()
except InvoiceAddress.DoesNotExist: except InvoiceAddress.DoesNotExist:
pass pass
order.log_action('pretix.event.order.placed')
order.log_action('pretix.event.order.placed')
order_placed.send(event, order=order) order_placed.send(event, order=order)
return order return order