From 69cf62d2cad0778a2c778f219b0593c23ebe6b79 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 26 Oct 2021 18:07:23 +0200 Subject: [PATCH] Fix missing or wrong create_transactions calls --- src/pretix/base/models/orders.py | 2 +- src/pretix/base/services/orders.py | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/pretix/base/models/orders.py b/src/pretix/base/models/orders.py index 9e9879df65..dcc343414f 100644 --- a/src/pretix/base/models/orders.py +++ b/src/pretix/base/models/orders.py @@ -458,7 +458,7 @@ class Order(LockModel, LoggedModel): update_fields = kwargs.get('update_fields', []) if 'require_approval' not in self.get_deferred_fields() and 'status' not in self.get_deferred_fields(): status_paid_or_pending = self.status in (Order.STATUS_PENDING, Order.STATUS_PAID) and not self.require_approval - if status_paid_or_pending != self.__initial_status_paid_or_pending or not self.pk: + if status_paid_or_pending != self.__initial_status_paid_or_pending: _transactions_mark_order_dirty(self.pk, using=kwargs.get('using', None)) elif ( not kwargs.get('force_save_with_deferred_fields', None) and diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index 951e568d8b..2abe1c5d83 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -284,6 +284,7 @@ def approve_order(order, user=None, send_mail: bool=True, auth=None, force=False order.require_approval = False order.set_expires(now(), order.event.subevents.filter(id__in=[p.subevent_id for p in order.positions.all()])) order.save(update_fields=['require_approval', 'expires']) + order.create_transactions() order.log_action('pretix.event.order.approved', user=user, auth=auth) if order.total == Decimal('0.00'): @@ -297,7 +298,6 @@ def approve_order(order, user=None, send_mail: bool=True, auth=None, force=False p.confirm(send_mail=False, count_waitinglist=False, user=user, auth=auth, ignore_date=True, force=force) except Quota.QuotaExceededException: raise OrderError(error_messages['unavailable']) - order.create_transactions() order_approved.send(order.event, order=order) @@ -424,6 +424,7 @@ def _cancel_order(order, user=None, send_mail: bool=True, api_token=None, device m.canceled = True m.save() + transaction_args = {} if cancellation_fee: with order.event.lock(): for position in order.positions.all(): @@ -458,7 +459,7 @@ def _cancel_order(order, user=None, send_mail: bool=True, api_token=None, device order.total = cancellation_fee order.cancellation_date = now() order.save(update_fields=['status', 'cancellation_date', 'total']) - order.create_transactions(positions=[]) + transaction_args['positions'] = [] if cancel_invoice and i: invoices.append(generate_invoice(order)) @@ -467,7 +468,6 @@ def _cancel_order(order, user=None, send_mail: bool=True, api_token=None, device order.status = Order.STATUS_CANCELED order.cancellation_date = now() order.save(update_fields=['status', 'cancellation_date']) - order.create_transactions() for position in order.positions.all(): assign_ticket_secret( @@ -480,6 +480,8 @@ def _cancel_order(order, user=None, send_mail: bool=True, api_token=None, device data={'cancellation_fee': cancellation_fee}) order.cancellation_requests.all().delete() + order.create_transactions(*transaction_args) + if send_mail: email_template = order.event.settings.mail_text_order_canceled with language(order.locale, order.event.settings.region):