[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:
Toufik Benjaa
2018-09-06 16:03:01 +02:00
parent 541e049d96
commit e11c0a45f2
2 changed files with 4 additions and 3 deletions
+2
View File
@@ -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 = {
+2 -3
View File
@@ -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)