diff --git a/addons/stock/models/product.py b/addons/stock/models/product.py index 1c20aa9f52e..fcc8dc25bd3 100644 --- a/addons/stock/models/product.py +++ b/addons/stock/models/product.py @@ -4,10 +4,18 @@ from odoo import api, fields, models, _ from odoo.addons import decimal_precision as dp from odoo.exceptions import UserError -from odoo.tools.safe_eval import safe_eval as eval from odoo.tools.float_utils import float_round from datetime import datetime +import operator as py_operator +OPERATORS = { + '<': py_operator.lt, + '>': py_operator.gt, + '<=': py_operator.le, + '>=': py_operator.ge, + '==': py_operator.eq, + '!=': py_operator.ne +} class Product(models.Model): _inherit = "product.product" @@ -258,7 +266,7 @@ class Product(models.Model): # TODO: Still optimization possible when searching virtual quantities ids = [] for product in self.search([]): - if eval(str(product[field]) + operator + str(value)): + if OPERATORS[operator](product[field], value): ids.append(product.id) return [('id', 'in', ids)] @@ -281,7 +289,7 @@ class Product(models.Model): domain_quant.append(('package_id', '=', package_id)) quants_groupby = self.env['stock.quant'].read_group(domain_quant, ['product_id', 'qty'], ['product_id']) for quant in quants_groupby: - if eval('%s %s %s' % (quant['qty'], operator, value)): + if OPERATORS[operator](quant['qty'], value): product_ids.add(quant['product_id'][0]) return list(product_ids) diff --git a/doc/cla/corporate/akretion.md b/doc/cla/corporate/akretion.md index 61932b3fe8b..156b24ff4d5 100644 --- a/doc/cla/corporate/akretion.md +++ b/doc/cla/corporate/akretion.md @@ -33,6 +33,7 @@ Cilene Oliveira cilene.oliveira@akretion.com https://github.com/cileneoliveira David Beal david.beal@akretion.com https://github.com/bealdav Florian da Costa florian.dacosta@akretion.com https://github.com/florian-dacosta Magno Barcelo da Costa magno.costa@akretion.com.br https://github.com/mbcosta +Raphaël Reverdy raphael.reverdy@akretion.com https://github.com/hparfr Raphaël Valyi raphael.valyi@akretion.com https://github.com/rvalyi Renato Lima renato.lima@akretion.com https://github.com/renatonlima Sebastien Beau sebastien.beau@akretion.com https://github.com/sebastienbeau