diff --git a/addons/analytic/models/analytic_mixin.py b/addons/analytic/models/analytic_mixin.py index 5577237923a..4f56de03a81 100644 --- a/addons/analytic/models/analytic_mixin.py +++ b/addons/analytic/models/analytic_mixin.py @@ -86,7 +86,7 @@ class AnalyticMixin(models.AbstractModel): def _validate_distribution(self, **kwargs): if self.env.context.get('validate_analytic', False): - mandatory_plans_ids = [plan['id'] for plan in self.env['account.analytic.plan'].sudo().get_relevant_plans(**kwargs) if plan['applicability'] == 'mandatory'] + mandatory_plans_ids = [plan['id'] for plan in self.env['account.analytic.plan'].sudo().with_company(self.company_id).get_relevant_plans(**kwargs) if plan['applicability'] == 'mandatory'] if not mandatory_plans_ids: return decimal_precision = self.env['decimal.precision'].precision_get('Percentage Analytic') diff --git a/addons/analytic/models/analytic_plan.py b/addons/analytic/models/analytic_plan.py index 8b63f8bc911..4d25a3fe9a1 100644 --- a/addons/analytic/models/analytic_plan.py +++ b/addons/analytic/models/analytic_plan.py @@ -233,7 +233,7 @@ class AccountAnalyticPlan(models.Model): else: score = 0 applicability = self.default_applicability - for applicability_rule in self.applicability_ids: + for applicability_rule in self.applicability_ids.filtered(lambda rule: rule.company_id == self.env.company): score_rule = applicability_rule._get_score(**kwargs) if score_rule > score: applicability = applicability_rule.applicability diff --git a/addons/analytic/tests/test_plan_operations.py b/addons/analytic/tests/test_plan_operations.py index 5a4a75f63c6..408afd28810 100644 --- a/addons/analytic/tests/test_plan_operations.py +++ b/addons/analytic/tests/test_plan_operations.py @@ -67,3 +67,28 @@ class TestAnalyticPlanOperations(TransactionCase): test_account.unlink() plan.unlink() distribution_model._validate_distribution() + + def test_validate_company_plans(self): + company_2 = self.env['res.company'].create({ + 'name': 'company_2', + }) + mandatory_plan = self.env['account.analytic.plan'].create([{ + 'name': 'Mandatory Plan', + 'default_applicability': 'optional', + }]) + mandatory_plan.with_company(company_2).write({'default_applicability': 'mandatory'}) + self.env['account.analytic.applicability'].create({ + 'business_domain': 'general', + 'analytic_plan_id': mandatory_plan.id, + 'applicability': 'mandatory', + 'company_id': company_2.id, + }) + self.env['account.analytic.account'].create([{ + 'name': 'Mandatory Account', + 'code': 'manda', + 'plan_id': mandatory_plan.id, + }]) + distribution_model = self.env['account.analytic.distribution.model'].create({}).with_context(validate_analytic=True) + + # only mandatory applicability is in company_2, should not raise + distribution_model._validate_distribution(business_domain='general')