Skip to content

Commit 88e2b33

Browse files
committed
[FEAT] mrp_stock_analytic: add analytic to new raw lines
Also add analytic distribution when manually adding raw lines to an MO with an analytic distribution set.
1 parent 6ed3b79 commit 88e2b33

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed

mrp_stock_analytic/models/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
from . import mrp_production
2+
from . import stock_move
+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from odoo import api, models
2+
3+
4+
class StockMove(models.Model):
5+
_inherit = "stock.move"
6+
7+
@api.model_create_multi
8+
def create(self, vals_list):
9+
"""
10+
Extend to copy the analytic distribution of the manufacturing order
11+
if a move is added as a raw material move to it.
12+
"""
13+
for vals in vals_list:
14+
if "analytic_distribution" in vals:
15+
continue
16+
raw_production = (
17+
self.env["mrp.production"]
18+
.browse(vals.get("raw_material_production_id"))
19+
.exists()
20+
)
21+
if not raw_production.analytic_distribution:
22+
continue
23+
vals["analytic_distribution"] = raw_production.analytic_distribution
24+
return super().create(vals_list)

mrp_stock_analytic/tests/test_mrp_stock_analytic.py

+35
Original file line numberDiff line numberDiff line change
@@ -146,3 +146,38 @@ def test_analytic_propagation_backorder(self):
146146
backorder.move_raw_ids.analytic_distribution,
147147
backorder.analytic_distribution,
148148
)
149+
150+
def _check_analytic_when_adding_new_line(self):
151+
self.production.analytic_distribution = self.analytic_distribution
152+
self.product_C = self.env["product.product"].create(
153+
{
154+
"name": "Product C",
155+
"type": "product",
156+
"categ_id": self.product_categ.id,
157+
"standard_price": 50.0,
158+
}
159+
)
160+
self.assertGreater(len(self.production.move_raw_ids), 0)
161+
edit_production = Form(self.production)
162+
with edit_production.move_raw_ids.new() as new_raw:
163+
new_raw.product_id = self.product_C
164+
production = edit_production.save()
165+
for raw_line in production.move_raw_ids:
166+
with self.subTest(
167+
raw_move=raw_line.display_name,
168+
raw_product=raw_line.product_id.display_name,
169+
):
170+
self.assertEqual(
171+
raw_line.analytic_distribution,
172+
self.analytic_distribution,
173+
msg="When a new raw line is added to a draft production, "
174+
"it should get the analytic distribution of the "
175+
"production",
176+
)
177+
178+
def test_analytic_added_to_new_lines_on_draft(self):
179+
self._check_analytic_when_adding_new_line()
180+
181+
def test_analytic_added_to_new_lines_on_confirmed(self):
182+
self.production.action_confirm()
183+
self._check_analytic_when_adding_new_line()

0 commit comments

Comments
 (0)