From cdf2d5441c75e78a8268bc44045d889f136301a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Voet=20=28ryv=29?= Date: Fri, 4 Dec 2020 16:52:22 +0000 Subject: [PATCH] [FIX] stock: improve perf of `_compute_has_packages` of `stock.picking` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use read_group instead of search count to batch the compute. opw-2371161 closes odoo/odoo#63754 X-original-commit: b82d8a8456085ab700ef1ce1df4052fa6cefd7e0 Signed-off-by: Arnold Moyaux Signed-off-by: Rémy Voet --- addons/stock/models/stock_picking.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py index 406b7a03bb3..7e87cbe736d 100644 --- a/addons/stock/models/stock_picking.py +++ b/addons/stock/models/stock_picking.py @@ -526,8 +526,11 @@ class Picking(models.Model): picking.move_line_exist = bool(picking.move_line_ids) def _compute_has_packages(self): + domain = [('picking_id', 'in', self.ids), ('result_package_id', '!=', False)] + cnt_by_picking = self.env['stock.move.line'].read_group(domain, ['picking_id'], ['picking_id']) + cnt_by_picking = {d['picking_id'][0]: d['picking_id_count'] for d in cnt_by_picking} for picking in self: - picking.has_packages = bool(self.env['stock.move.line'].search_count([('picking_id', '=', picking.id), ('result_package_id', '!=', False)])) + picking.has_packages = bool(cnt_by_picking.get(picking.id, False)) @api.depends('immediate_transfer', 'state') def _compute_show_check_availability(self):