Skip to content

Commit

Permalink
[PERF] Improve performance of contact creation when the parent have t…
Browse files Browse the repository at this point in the history
…housands of childs
  • Loading branch information
nseinlet committed Nov 22, 2017
1 parent cc8f360 commit 27fa165
Showing 1 changed file with 5 additions and 6 deletions.
11 changes: 5 additions & 6 deletions odoo/addons/base/res/res_partner.py
Expand Up @@ -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):
Expand All @@ -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)
Expand Down

0 comments on commit 27fa165

Please sign in to comment.