diff --git a/addons/crm/models/res_partner.py b/addons/crm/models/res_partner.py
index 2e52405aff9..3582b398f56 100644
--- a/addons/crm/models/res_partner.py
+++ b/addons/crm/models/res_partner.py
@@ -8,7 +8,11 @@ class Partner(models.Model):
_name = 'res.partner'
_inherit = 'res.partner'
- team_id = fields.Many2one('crm.team', string='Sales Team', ondelete="set null")
+ team_id = fields.Many2one(
+ 'crm.team', string='Sales Team',
+ compute='_compute_team_id',
+ precompute=True, # avoid queries post-create
+ ondelete='set null', readonly=False, store=True)
opportunity_ids = fields.One2many('crm.lead', 'partner_id', string='Opportunities', domain=[('type', '=', 'opportunity')])
opportunity_count = fields.Integer("Opportunity", compute='_compute_opportunity_count')
@@ -34,6 +38,11 @@ class Partner(models.Model):
)
return rec
+ @api.depends('parent_id')
+ def _compute_team_id(self):
+ for partner in self.filtered(lambda partner: not partner.team_id and partner.company_type == 'person' and partner.parent_id.team_id):
+ partner.team_id = partner.parent_id.team_id
+
def _compute_opportunity_count(self):
# retrieve all children partners and prefetch 'parent_id' on them
all_partners = self.with_context(active_test=False).search([('id', 'child_of', self.ids)])
diff --git a/addons/crm/tests/__init__.py b/addons/crm/tests/__init__.py
index e5d7f8d6aec..22d65ecef45 100644
--- a/addons/crm/tests/__init__.py
+++ b/addons/crm/tests/__init__.py
@@ -15,3 +15,4 @@ from . import test_crm_lead_smart_calendar
from . import test_crm_ui
from . import test_crm_pls
from . import test_performances
+from . import test_res_partner
diff --git a/addons/crm/tests/test_res_partner.py b/addons/crm/tests/test_res_partner.py
new file mode 100644
index 00000000000..e8b5c295496
--- /dev/null
+++ b/addons/crm/tests/test_res_partner.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.addons.crm.tests.common import TestCrmCommon
+from odoo.tests.common import Form
+from odoo.tests import tagged, users
+
+
+@tagged('res_partner')
+class TestPartner(TestCrmCommon):
+
+ @users('user_sales_leads')
+ def test_parent_sync_sales_rep(self):
+ """ Test team_id / user_id sync from parent to children if the contact
+ is a person. Company children are not updated. """
+ contact_company = self.contact_company.with_env(self.env)
+ contact_company_1 = self.contact_company_1.with_env(self.env)
+ self.assertFalse(contact_company.team_id)
+ self.assertFalse(contact_company.user_id)
+ self.assertFalse(contact_company_1.team_id)
+ self.assertFalse(contact_company_1.user_id)
+
+ child = self.contact_1.with_env(self.env)
+ self.assertEqual(child.parent_id, self.contact_company_1)
+ self.assertFalse(child.team_id)
+ self.assertFalse(child.user_id)
+
+ # update comppany sales rep info
+ contact_company.user_id = self.env.uid
+ contact_company.team_id = self.sales_team_1.id
+
+ # change child parent: shold update sales rep info
+ child.parent_id = contact_company.id
+ self.assertEqual(child.user_id, self.env.user)
+
+ # test form tool
+ partner_form = Form(self.env['res.partner'], 'base.view_partner_form')
+ partner_form.parent_id = contact_company
+ partner_form.company_type = 'person'
+ partner_form.name = 'Hermes Conrad'
+ self.assertEqual(partner_form.team_id, self.sales_team_1)
+ self.assertEqual(partner_form.user_id, self.env.user)
+ partner_form.parent_id = contact_company_1
+ self.assertEqual(partner_form.team_id, self.sales_team_1)
+ self.assertEqual(partner_form.user_id, self.env.user)
+
+ # test form tool
+ partner_form = Form(self.env['res.partner'], 'base.view_partner_form')
+ partner_form.company_type = 'company'
+ partner_form.parent_id = contact_company
+ partner_form.name = 'Mom Corp'
+ self.assertFalse(partner_form.team_id)
+ self.assertFalse(partner_form.user_id)
diff --git a/addons/crm/views/res_partner_views.xml b/addons/crm/views/res_partner_views.xml
index 187b51a49e2..518f92cf298 100644
--- a/addons/crm/views/res_partner_views.xml
+++ b/addons/crm/views/res_partner_views.xml
@@ -44,6 +44,9 @@