Skip to content

Commit 17110cb

Browse files
committed
[FIX] contract_brand: combine analytic distribution defined by analytic distribution models with analytic on brands
Before this commit the analytic distribution was always erased on contract lines: if the contract is linked to a brand, only the analytic of the brand was considered. If the contract wasn't linked to a brand, the analytic was erased. After this commit: we consider analytic distribution models, to define the analytic distribution. And we combine it with the analytic distribution of the brand, if needed
1 parent 5ff8c5f commit 17110cb

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

contract_brand/models/contract_line.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,14 @@ def _get_analytic_distribution_arguments(self):
1818

1919
@api.depends("contract_id.brand_id")
2020
def _compute_analytic_distribution(self):
21-
return super()._compute_analytic_distribution()
21+
res = super()._compute_analytic_distribution()
22+
for rec in self.filtered(lambda line: line.contract_id.brand_id):
23+
brand_analytic_distribution = (
24+
rec.contract_id.brand_id.analytic_distribution or {}
25+
)
26+
if brand_analytic_distribution:
27+
line_analytic_distribution = rec.analytic_distribution or {}
28+
rec.analytic_distribution = (
29+
line_analytic_distribution | brand_analytic_distribution
30+
)
31+
return res

contract_brand/tests/test_contract.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,15 @@ def setUpClass(cls):
1818
"plan_id": cls.analytic_plan.id,
1919
}
2020
)
21+
cls.analytic_plan2 = cls.env["account.analytic.plan"].create(
22+
{"name": "analytic plan 2"}
23+
)
24+
cls.analytic_account2 = cls.env["account.analytic.account"].create(
25+
{
26+
"name": "analytic account 2",
27+
"plan_id": cls.analytic_plan2.id,
28+
}
29+
)
2130

2231
def test_contract_create_branded_move(self):
2332
"""It should create a branded move based on the contract brand"""
@@ -39,3 +48,27 @@ def test_contract_analytic_account_onchange_brand(self):
3948
self.contract.brand_id = self.brand_id
4049
for line in self.contract.contract_line_ids:
4150
self.assertEqual(line.analytic_distribution, analytic_distribution)
51+
52+
def test_contract_analytic_distribution_combined(self):
53+
"""
54+
Analytic distribution model for the product + analytic on the brand
55+
-> Combine both
56+
"""
57+
contract_line = self.contract.contract_line_ids[0]
58+
product = contract_line.product_id
59+
self.env["account.analytic.distribution.model"].create(
60+
{
61+
"product_id": product.id,
62+
"analytic_distribution": {str(self.analytic_account.id): 100},
63+
}
64+
)
65+
contract_line._compute_analytic_distribution()
66+
self.assertEqual(
67+
contract_line.analytic_distribution, {str(self.analytic_account.id): 100}
68+
)
69+
self.brand_id.analytic_distribution = {str(self.analytic_account2.id): 100}
70+
self.contract.brand_id = self.brand_id
71+
self.assertEqual(
72+
contract_line.analytic_distribution,
73+
{str(self.analytic_account.id): 100, str(self.analytic_account2.id): 100},
74+
)

0 commit comments

Comments
 (0)