Fix transaction creation issues and improve debugging

This commit is contained in:
Raphael Michel
2021-10-26 11:33:28 +02:00
parent 5ea8a8ef82
commit 2dceff1218
2 changed files with 23 additions and 24 deletions

View File

@@ -60,10 +60,10 @@ def _check_for_dirty_orders():
dirty_transactions.order_ids = set()
if dirty_transactions.order_ids and dirty_transactions.order_ids != {None}:
_fail(
"In the transaction that just ended, you created or modified an Order, OrderPosition, or OrderFee "
"object in a way that you should have called `order.create_transactions()` afterwards. The transaction "
"still went through and your data can be fixed with the `create_order_transactions` management command "
"but you should update your code to prevent this from happening."
f"In the transaction that just ended, you created or modified an Order, OrderPosition, or OrderFee "
f"object in a way that you should have called `order.create_transactions()` afterwards. The transaction "
f"still went through and your data can be fixed with the `create_order_transactions` management command "
f"but you should update your code to prevent this from happening. Affected order IDs: {dirty_transactions.order_ids}"
)
dirty_transactions.order_ids.clear()

View File

@@ -1561,17 +1561,16 @@ class OrderChangeManager:
self.order.save()
elif self.open_payment:
try:
with transaction.atomic():
self.open_payment.payment_provider.cancel_payment(self.open_payment)
self.order.log_action(
'pretix.event.order.payment.canceled',
{
'local_id': self.open_payment.local_id,
'provider': self.open_payment.provider,
},
user=self.user,
auth=self.auth
)
self.open_payment.payment_provider.cancel_payment(self.open_payment)
self.order.log_action(
'pretix.event.order.payment.canceled',
{
'local_id': self.open_payment.local_id,
'provider': self.open_payment.provider,
},
user=self.user,
auth=self.auth
)
except PaymentException as e:
self.order.log_action(
'pretix.event.order.payment.canceled.failed',
@@ -1586,12 +1585,11 @@ class OrderChangeManager:
elif self.order.status in (Order.STATUS_PENDING, Order.STATUS_EXPIRED) and self._totaldiff > 0:
if self.open_payment:
try:
with transaction.atomic():
self.open_payment.payment_provider.cancel_payment(self.open_payment)
self.order.log_action('pretix.event.order.payment.canceled', {
'local_id': self.open_payment.local_id,
'provider': self.open_payment.provider,
}, user=self.user, auth=self.auth)
self.open_payment.payment_provider.cancel_payment(self.open_payment)
self.order.log_action('pretix.event.order.payment.canceled', {
'local_id': self.open_payment.local_id,
'provider': self.open_payment.provider,
}, user=self.user, auth=self.auth)
except PaymentException as e:
self.order.log_action(
'pretix.event.order.payment.canceled.failed',
@@ -2131,11 +2129,11 @@ class OrderChangeManager:
self._recalculate_total_and_payment_fee()
if self.order.status in (Order.STATUS_PENDING, Order.STATUS_PAID):
self._reissue_invoice()
self._check_paid_price_change()
self._check_paid_to_free()
self._clear_tickets_cache()
self.order.create_transactions()
self.order.touch()
self._check_paid_price_change()
self._check_paid_to_free()
self.order.create_transactions()
if self.notify:
notify_user_changed_order(
@@ -2409,6 +2407,7 @@ def change_payment_provider(order: Order, payment_provider, amount=None, new_pay
generate_cancellation(i)
generate_invoice(order)
order.create_transactions()
return old_fee, new_fee, fee, new_payment