From 27fa1653f5cf6ef58d85b9c2530df31cc5edc00c Mon Sep 17 00:00:00 2001 From: Nicolas Seinlet Date: Wed, 22 Nov 2017 15:26:26 +0100 Subject: [PATCH] [PERF] Improve performance of contact creation when the parent have thousands of childs --- odoo/addons/base/res/res_partner.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/odoo/addons/base/res/res_partner.py b/odoo/addons/base/res/res_partner.py index 8e91a0b3ebdfc..2b54da7b3f3ee 100644 --- a/odoo/addons/base/res/res_partner.py +++ b/odoo/addons/base/res/res_partner.py @@ -451,16 +451,15 @@ def _fields_sync(self, values): self.update_address(onchange_vals) # 2. To DOWNSTREAM: sync children - if self.child_ids: + if self.search_count([('parent_id', '=', self.id)])>0: # 2a. Commercial Fields: sync if commercial entity if self.commercial_partner_id == self: commercial_fields = self._commercial_fields() if any(field in values for field in commercial_fields): self._commercial_sync_to_children() - for child in self.child_ids.filtered(lambda c: not c.is_company): - if child.commercial_partner_id != self.commercial_partner_id : - self._commercial_sync_to_children() - break + for child in self.search_count([('parent_id', '=', self.id), ('is_company', '=', False), ('commercial_partner_id', '!=', self.commercial_partner_id.id)])>0: + self._commercial_sync_to_children() + # 2b. Address fields: sync if address changed address_fields = self._address_fields() if any(field in values for field in address_fields): @@ -473,7 +472,7 @@ def _handle_first_contact_creation(self): was meant to be company address """ parent = self.parent_id address_fields = self._address_fields() - if (parent.is_company or not parent.parent_id) and len(parent.child_ids) == 1 and \ + if (parent.is_company or not parent.parent_id) and self.search_count([('parent_id', '=', parent.id)])==1 and \ any(self[f] for f in address_fields) and not any(parent[f] for f in address_fields): addr_vals = self._update_fields_values(address_fields) parent.update_address(addr_vals)