From 6a5f84f682222c7a30bcbdf08573f1648c01bcda Mon Sep 17 00:00:00 2001 From: Thomas Fossoul Date: Thu, 1 Mar 2018 17:17:55 +0100 Subject: [PATCH] [10.0][IMP] purchase_packaging: reduce sql query calls for search uom reference category --- purchase_packaging/__manifest__.py | 2 +- .../models/purchase_order_line.py | 38 ++++++++++++------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/purchase_packaging/__manifest__.py b/purchase_packaging/__manifest__.py index b2fcef78b..e2cce75d3 100755 --- a/purchase_packaging/__manifest__.py +++ b/purchase_packaging/__manifest__.py @@ -3,7 +3,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { "name": "Purchase Packaging", - "version": "10.0.1.0.2", + "version": "10.0.1.0.3", "author": 'ACSONE SA/NV, ' 'Odoo Community Association (OCA)', "category": "Warehouse", diff --git a/purchase_packaging/models/purchase_order_line.py b/purchase_packaging/models/purchase_order_line.py index 52311e90a..ebcef05fc 100644 --- a/purchase_packaging/models/purchase_order_line.py +++ b/purchase_packaging/models/purchase_order_line.py @@ -48,38 +48,48 @@ class PurchaseOrderLine(models.Model): uom_id=self.product_uom) @api.multi - @api.depends('product_purchase_uom_id', 'product_purchase_qty') + @api.depends('product_purchase_uom_id', + 'product_purchase_qty', + 'product_purchase_uom_id.category_id') def _compute_product_qty(self): """ Compute the total quantity """ + uom_categories = self.mapped("product_purchase_uom_id.category_id") + uom_obj = self.env['product.uom'] + to_uoms = uom_obj.search( + [('category_id', + 'in', + uom_categories.ids), + ('uom_type', '=', 'reference')]) + uom_by_category = {to_uom.category_id: to_uom for to_uom in to_uoms} for line in self: - uom_obj = self.env['product.uom'] - to_uom = uom_obj.search( - [('category_id', - '=', - line.product_purchase_uom_id.category_id.id), - ('uom_type', '=', 'reference')], limit=1) if not line.product_purchase_uom_id: - return + continue line.product_qty = line.product_purchase_uom_id._compute_quantity( line.product_purchase_qty, - to_uom) + uom_by_category.get(line.product_purchase_uom_id.category_id)) @api.multi def _inverse_product_qty(self): """ If product_quantity is set compute the purchase_qty """ + uom_categories = self.mapped("product_purchase_uom_id.category_id") + uom_obj = self.env['product.uom'] + from_uoms = uom_obj.search( + [('category_id', + 'in', + uom_categories.ids), + ('uom_type', '=', 'reference')]) + uom_by_category = { + from_uom.category_id: from_uom for from_uom in from_uoms} for line in self: if line.product_id: supplier = line._get_product_seller() if supplier: product_purchase_uom = supplier.min_qty_uom_id - uom_obj = self.env['product.uom'] - from_uom = uom_obj.search( - [('category_id', '=', - product_purchase_uom.category_id.id), - ('uom_type', '=', 'reference')], limit=1) + from_uom = uom_by_category.get( + line.product_purchase_uom_id.category_id) line.product_purchase_qty = from_uom._compute_quantity( line.product_qty, product_purchase_uom)