From 487418678c99f5b4fbd74c37a3cf69ddc0497956 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 26 Mar 2019 09:44:26 +0100 Subject: [PATCH] Banktransfer: Workaround for OrderPayment.MultipleObjectsReturned Fix sentry issue PRETIXEU-Z7 --- src/pretix/plugins/banktransfer/tasks.py | 25 ++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/pretix/plugins/banktransfer/tasks.py b/src/pretix/plugins/banktransfer/tasks.py index 4973b2676..3e5b26ce5 100644 --- a/src/pretix/plugins/banktransfer/tasks.py +++ b/src/pretix/plugins/banktransfer/tasks.py @@ -92,14 +92,23 @@ def _handle_transaction(trans: BankTransaction, code: str, event: Event=None, or trans.state = BankTransaction.STATE_ERROR trans.message = ugettext_noop('The order has already been canceled.') else: - p, created = trans.order.payments.get_or_create( - amount=trans.amount, - provider='banktransfer', - state__in=(OrderPayment.PAYMENT_STATE_CREATED, OrderPayment.PAYMENT_STATE_PENDING), - defaults={ - 'state': OrderPayment.PAYMENT_STATE_CREATED, - } - ) + try: + p, created = trans.order.payments.get_or_create( + amount=trans.amount, + provider='banktransfer', + state__in=(OrderPayment.PAYMENT_STATE_CREATED, OrderPayment.PAYMENT_STATE_PENDING), + defaults={ + 'state': OrderPayment.PAYMENT_STATE_CREATED, + } + ) + except OrderPayment.MultipleObjectsReturned: + created = False + p = trans.order.payments.filter( + amount=trans.amount, + provider='banktransfer', + state__in=(OrderPayment.PAYMENT_STATE_CREATED, OrderPayment.PAYMENT_STATE_PENDING), + ).last() + p.info_data = { 'reference': trans.reference, 'date': trans.date,