mirror of
https://github.com/pretix/pretix.git
synced 2026-08-23 12:51:59 +00:00
Fix transaction creation issues and improve debugging
This commit is contained in:
@@ -60,10 +60,10 @@ def _check_for_dirty_orders():
|
|||||||
dirty_transactions.order_ids = set()
|
dirty_transactions.order_ids = set()
|
||||||
if dirty_transactions.order_ids and dirty_transactions.order_ids != {None}:
|
if dirty_transactions.order_ids and dirty_transactions.order_ids != {None}:
|
||||||
_fail(
|
_fail(
|
||||||
"In the transaction that just ended, you created or modified an Order, OrderPosition, or OrderFee "
|
f"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 "
|
f"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 "
|
f"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"but you should update your code to prevent this from happening. Affected order IDs: {dirty_transactions.order_ids}"
|
||||||
)
|
)
|
||||||
dirty_transactions.order_ids.clear()
|
dirty_transactions.order_ids.clear()
|
||||||
|
|
||||||
|
|||||||
@@ -1561,17 +1561,16 @@ class OrderChangeManager:
|
|||||||
self.order.save()
|
self.order.save()
|
||||||
elif self.open_payment:
|
elif self.open_payment:
|
||||||
try:
|
try:
|
||||||
with transaction.atomic():
|
self.open_payment.payment_provider.cancel_payment(self.open_payment)
|
||||||
self.open_payment.payment_provider.cancel_payment(self.open_payment)
|
self.order.log_action(
|
||||||
self.order.log_action(
|
'pretix.event.order.payment.canceled',
|
||||||
'pretix.event.order.payment.canceled',
|
{
|
||||||
{
|
'local_id': self.open_payment.local_id,
|
||||||
'local_id': self.open_payment.local_id,
|
'provider': self.open_payment.provider,
|
||||||
'provider': self.open_payment.provider,
|
},
|
||||||
},
|
user=self.user,
|
||||||
user=self.user,
|
auth=self.auth
|
||||||
auth=self.auth
|
)
|
||||||
)
|
|
||||||
except PaymentException as e:
|
except PaymentException as e:
|
||||||
self.order.log_action(
|
self.order.log_action(
|
||||||
'pretix.event.order.payment.canceled.failed',
|
'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:
|
elif self.order.status in (Order.STATUS_PENDING, Order.STATUS_EXPIRED) and self._totaldiff > 0:
|
||||||
if self.open_payment:
|
if self.open_payment:
|
||||||
try:
|
try:
|
||||||
with transaction.atomic():
|
self.open_payment.payment_provider.cancel_payment(self.open_payment)
|
||||||
self.open_payment.payment_provider.cancel_payment(self.open_payment)
|
self.order.log_action('pretix.event.order.payment.canceled', {
|
||||||
self.order.log_action('pretix.event.order.payment.canceled', {
|
'local_id': self.open_payment.local_id,
|
||||||
'local_id': self.open_payment.local_id,
|
'provider': self.open_payment.provider,
|
||||||
'provider': self.open_payment.provider,
|
}, user=self.user, auth=self.auth)
|
||||||
}, user=self.user, auth=self.auth)
|
|
||||||
except PaymentException as e:
|
except PaymentException as e:
|
||||||
self.order.log_action(
|
self.order.log_action(
|
||||||
'pretix.event.order.payment.canceled.failed',
|
'pretix.event.order.payment.canceled.failed',
|
||||||
@@ -2131,11 +2129,11 @@ class OrderChangeManager:
|
|||||||
self._recalculate_total_and_payment_fee()
|
self._recalculate_total_and_payment_fee()
|
||||||
if self.order.status in (Order.STATUS_PENDING, Order.STATUS_PAID):
|
if self.order.status in (Order.STATUS_PENDING, Order.STATUS_PAID):
|
||||||
self._reissue_invoice()
|
self._reissue_invoice()
|
||||||
|
self._check_paid_price_change()
|
||||||
|
self._check_paid_to_free()
|
||||||
self._clear_tickets_cache()
|
self._clear_tickets_cache()
|
||||||
self.order.create_transactions()
|
|
||||||
self.order.touch()
|
self.order.touch()
|
||||||
self._check_paid_price_change()
|
self.order.create_transactions()
|
||||||
self._check_paid_to_free()
|
|
||||||
|
|
||||||
if self.notify:
|
if self.notify:
|
||||||
notify_user_changed_order(
|
notify_user_changed_order(
|
||||||
@@ -2409,6 +2407,7 @@ def change_payment_provider(order: Order, payment_provider, amount=None, new_pay
|
|||||||
generate_cancellation(i)
|
generate_cancellation(i)
|
||||||
generate_invoice(order)
|
generate_invoice(order)
|
||||||
|
|
||||||
|
order.create_transactions()
|
||||||
return old_fee, new_fee, fee, new_payment
|
return old_fee, new_fee, fee, new_payment
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user