[FIX] analytic: check current company applicability
Have company A and company B With company B: - Create an analytic plan with default applicability 'Mandatory' - Add an applicability: domain 'Expense', applicability 'Mandatory' With company A: - Open the same analytic plan - Set default applicability 'Optional', no assigned applicability - Add an analytc account for the plan - Create an expense, add amount - Create report > Submit to Mananger > Approve Issue: Action will be blocked by Warning message "One or more lines require a 100% analytic distribution." This occurs because the system checks all applicabilities of the plan without taking into account the company opw-3709374 closes odoo/odoo#155195 Signed-off-by: William André (wan) <wan@odoo.com>
This commit is contained in:
@@ -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')
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user