Banktransfer: Workaround for OrderPayment.MultipleObjectsReturned

Fix sentry issue PRETIXEU-Z7
This commit is contained in:
Raphael Michel
2019-03-26 09:44:26 +01:00
parent d4795868d6
commit 487418678c

View File

@@ -92,14 +92,23 @@ def _handle_transaction(trans: BankTransaction, code: str, event: Event=None, or
trans.state = BankTransaction.STATE_ERROR trans.state = BankTransaction.STATE_ERROR
trans.message = ugettext_noop('The order has already been canceled.') trans.message = ugettext_noop('The order has already been canceled.')
else: else:
p, created = trans.order.payments.get_or_create( try:
amount=trans.amount, p, created = trans.order.payments.get_or_create(
provider='banktransfer', amount=trans.amount,
state__in=(OrderPayment.PAYMENT_STATE_CREATED, OrderPayment.PAYMENT_STATE_PENDING), provider='banktransfer',
defaults={ state__in=(OrderPayment.PAYMENT_STATE_CREATED, OrderPayment.PAYMENT_STATE_PENDING),
'state': OrderPayment.PAYMENT_STATE_CREATED, 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 = { p.info_data = {
'reference': trans.reference, 'reference': trans.reference,
'date': trans.date, 'date': trans.date,