From fe70345ab077f4cd5a9f512a5ac2fb6ae25a9e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sun, 6 Mar 2022 18:13:01 +0100 Subject: [PATCH] Use Function fields to compute moves Using the Function field on stock move as relation field is not very efficient because of the sub-query it generates. issue11204 review395421008 --- purchase.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/purchase.py b/purchase.py index c5f2f4f6c8..5d4c3b63e5 100644 --- a/purchase.py +++ b/purchase.py @@ -217,7 +217,9 @@ class Purchase( shipment_returns = fields.Function(fields.Many2Many( 'stock.shipment.in.return', None, None, "Shipment Returns"), 'get_shipment_returns', searcher='search_shipment_returns') - moves = fields.One2Many('stock.move', 'purchase', 'Moves', readonly=True) + moves = fields.Function( + fields.Many2Many('stock.move', None, None, "Moves"), + 'get_moves', searcher='search_moves') quoted_by = employee_field( "Quoted By", @@ -602,6 +604,13 @@ class Purchase( return 'waiting' return 'none' + def get_moves(self, name): + return [m.id for l in self.lines for m in l.moves] + + @classmethod + def search_moves(cls, name, clause): + return [('lines.' + clause[0],) + tuple(clause[1:])] + @classmethod def _get_origin(cls): "Return list of Model names for origin Reference" @@ -692,7 +701,6 @@ class Purchase( default.setdefault('number', None) default.setdefault('invoice_state', 'none') default.setdefault('invoices_ignored', None) - default.setdefault('moves', None) default.setdefault('shipment_state', 'none') default.setdefault('purchase_date', None) default.setdefault('quoted_by')