[FIX] payment: Fix reference computation to avoid duplicates
- The method to compute the reference of a payment.transaction and avoid duplicate was missing some edge cases (for example if there was a '-' in the reference). - The creation of transactions in the route /website_payment/pay was not checking for duplicate payment.transaction.
This commit is contained in:
@@ -109,6 +109,8 @@ class WebsitePayment(http.Controller):
|
||||
if order_id:
|
||||
values['sale_order_ids'] = [(6, 0, [order_id])]
|
||||
|
||||
reference_values = order_id and {'sale_order_ids': [(4, order_id)]} or {}
|
||||
values['reference'] = request.env['payment.transaction']._compute_reference(values=reference_values, prefix=reference)
|
||||
tx = request.env['payment.transaction'].sudo().with_context(lang=None).create(values)
|
||||
|
||||
render_values = {
|
||||
|
||||
@@ -792,11 +792,10 @@ class PaymentTransaction(models.Model):
|
||||
# Fetch the last reference
|
||||
# E.g. If the last reference is SO42-5, this query will return '-5'
|
||||
self._cr.execute('''
|
||||
SELECT CAST(SUBSTRING(reference FROM '-\d+') AS INTEGER) AS suffix
|
||||
SELECT CAST(SUBSTRING(reference FROM '-\d+$') AS INTEGER) AS suffix
|
||||
FROM payment_transaction WHERE reference LIKE %s ORDER BY suffix
|
||||
''', [prefix + '%'])
|
||||
''', [prefix + '-%'])
|
||||
query_res = self._cr.fetchone()
|
||||
|
||||
if query_res:
|
||||
# Increment the last reference by one
|
||||
suffix = '%s' % (-query_res[0] + 1)
|
||||
|
||||
Reference in New Issue
Block a user