diff --git a/src/pretix/base/models/_transactions.py b/src/pretix/base/models/_transactions.py index 1be9888c2..f6749a074 100644 --- a/src/pretix/base/models/_transactions.py +++ b/src/pretix/base/models/_transactions.py @@ -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() diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index 3589eafec..951e568d8 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -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