summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémy Voet (ryv) <ryv@odoo.com>2020-12-04 16:52:22 +0000
committerRémy Voet (ryv) <ryv@odoo.com>2020-12-22 14:32:12 +0000
commita5df0a31e643ab126dd483f77c243892ca0fcb7d (patch)
treeeededee4a36065e7d9a761ddcd3236e45b0e5722
parent0a3bf1811cfbfa49257bf1e63346d19acbdc8e1c (diff)
[FIX] stock: improve perf of `_compute_has_packages` of `stock.picking`
Use read_group instead of search count to batch the compute. opw-2371161 closes odoo/odoo#63691 Signed-off-by: Arnold Moyaux <amoyaux@users.noreply.github.com>
-rw-r--r--addons/stock/models/stock_picking.py5
1 files changed, 4 insertions, 1 deletions
diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py
index c3144c67494..e0408e7e99d 100644
--- a/addons/stock/models/stock_picking.py
+++ b/addons/stock/models/stock_picking.py
@@ -527,8 +527,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):