diff --git a/addons/payment/models/payment_acquirer.py b/addons/payment/models/payment_acquirer.py index e0a7eb61305..0e3e3b0fb5c 100644 --- a/addons/payment/models/payment_acquirer.py +++ b/addons/payment/models/payment_acquirer.py @@ -527,7 +527,7 @@ class PaymentTransaction(models.Model): ref_suffix = 1 init_ref = reference while self.env['payment.transaction'].sudo().search_count([('reference', '=', reference)]): - reference = init_ref + '-' + str(ref_suffix) + reference = init_ref + 'x' + str(ref_suffix) ref_suffix += 1 return reference diff --git a/addons/website_sale/models/sale_order.py b/addons/website_sale/models/sale_order.py index d845f65ae2a..b95b1afcffd 100644 --- a/addons/website_sale/models/sale_order.py +++ b/addons/website_sale/models/sale_order.py @@ -463,7 +463,15 @@ class Website(models.Model): tx_id = request.session.get('sale_transaction_id') if tx_id: transaction = self.env['payment.transaction'].sudo().browse(tx_id) - if transaction.state != 'cancel': + # Ugly hack for SIPS: SIPS does not allow to reuse a payment reference, even if the + # payment was not not proceeded. For example: + # - Select SIPS for payment + # - Be redirected to SIPS website + # - Go back to eCommerce without paying + # - Be redirected to SIPS website again => error + # Since there is no link module between 'website_sale' and 'payment_sips', we prevent + # here to reuse any previous transaction for SIPS. + if transaction.state != 'cancel' and transaction.acquirer_id.provider != 'sips': return transaction else: request.session['sale_transaction_id'] = False