From 70c8fb0cb1d30a29a6b8687ebf21e95f07df0333 Mon Sep 17 00:00:00 2001 From: "jerome hanke (jhk)" Date: Fri, 13 Dec 2019 11:03:44 +0000 Subject: [PATCH] [FIX]point_of_sale:CORRECTION clients from pos sessions are now considered customers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this is a clean version of the fix made inĀ 577dac5baee5e503baba9f30dff67e69daafa00b requested here: https://github.com/odoo/odoo/commit/577dac5baee5e503baba9f30dff67e69daafa00b#r36404308 opw-2148894 closes odoo/odoo#41851 X-original-commit: d57fdda5b0c1423aaa9fcba31cef1dfb52d334f6 Signed-off-by: Nicolas Lempereur (nle) --- addons/account/models/partner.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/addons/account/models/partner.py b/addons/account/models/partner.py index 114afa929d0..21621cb17b1 100644 --- a/addons/account/models/partner.py +++ b/addons/account/models/partner.py @@ -3,7 +3,8 @@ import time import logging -import psycopg2 + +from psycopg2 import sql, DatabaseError from odoo import api, fields, models, _ from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT @@ -504,14 +505,18 @@ class ResPartner(models.Model): return super().create(vals_list) def _increase_rank(self, field): - if self.ids: + if self.ids and field in ['customer_rank', 'supplier_rank']: try: with self.env.cr.savepoint(): - self.env.cr.execute("SELECT "+field+" FROM res_partner WHERE ID IN %(partner_ids)s FOR UPDATE NOWAIT", {'partner_ids': tuple(self.ids)}) - self.env.cr.execute("UPDATE res_partner SET "+field+"="+field+"+1 WHERE ID IN %(partner_ids)s", {'partner_ids': tuple(self.ids)}) + query = sql.SQL(""" + SELECT {field} FROM res_partner WHERE ID IN %(partner_ids)s FOR UPDATE NOWAIT; + UPDATE res_partner SET {field} = {field} + 1 + WHERE id IN %(partner_ids)s + """).format(field=sql.Identifier(field)) + self.env.cr.execute(query, {'partner_ids': tuple(self.ids)}) for partner in self: self.env.cache.remove(partner, partner._fields[field]) - except psycopg2.DatabaseError as e: + except DatabaseError as e: if e.pgcode == '55P03': _logger.debug('Another transaction already locked partner rows. Cannot update partner ranks.') else: