diff --git a/mrp_analytic_cost_material/__manifest__.py b/mrp_analytic_cost_material/__manifest__.py
index 3babe9e4e..c8fa68292 100644
--- a/mrp_analytic_cost_material/__manifest__.py
+++ b/mrp_analytic_cost_material/__manifest__.py
@@ -10,7 +10,7 @@
"author": "Open Source Integrators, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/manufacture",
"license": "AGPL-3",
- "depends": ["mrp_analytic", "account"],
+ "depends": ["mrp_analytic"],
"data": ["views/account_analytic_line_view.xml", "views/mrp_production_views.xml"],
"maintainer": "dreispt",
"development_status": "Alpha",
diff --git a/mrp_analytic_cost_material/models/__init__.py b/mrp_analytic_cost_material/models/__init__.py
index b4221a567..9d34c7c3d 100644
--- a/mrp_analytic_cost_material/models/__init__.py
+++ b/mrp_analytic_cost_material/models/__init__.py
@@ -3,3 +3,4 @@
from . import account_analytic_line
from . import mrp_production
+from . import stock_move
diff --git a/mrp_analytic_cost_material/models/account_analytic_line.py b/mrp_analytic_cost_material/models/account_analytic_line.py
index b9fc0a87f..0044ff010 100644
--- a/mrp_analytic_cost_material/models/account_analytic_line.py
+++ b/mrp_analytic_cost_material/models/account_analytic_line.py
@@ -15,8 +15,3 @@ class AccountAnalyticLine(models.Model):
"mrp.production",
string="Related Manufacturing Order",
)
- product_category_id = fields.Many2one(
- related="product_id.categ_id",
- string="Product Category",
- store=True,
- )
diff --git a/mrp_analytic_cost_material/models/mrp_production.py b/mrp_analytic_cost_material/models/mrp_production.py
index c9017349d..5d407804c 100644
--- a/mrp_analytic_cost_material/models/mrp_production.py
+++ b/mrp_analytic_cost_material/models/mrp_production.py
@@ -7,38 +7,6 @@ from odoo import models
class MrpProduction(models.Model):
_inherit = "mrp.production"
- def _prepare_material_analytic_line(self):
- self.ensure_one()
- order = self.raw_material_production_id
- return {
- "name": self.product_id.default_code or "",
- "account_id": order.analytic_account_id.id or False,
- "ref": order.name,
- "unit_amount": self.product_uom_qty,
- "company_id": order.company_id.id,
- "manufacturing_order_id": order.id,
- "product_id": self.product_id.id or False,
- "stock_move_id": self.id,
- }
-
- def generate_analytic_line(self):
- """Generate Analytic Lines Manually."""
- # FIXME: this is a placeholder for final logic
- # TODO: when should Analytic Items generation be triggered?
- # TODO: what to do if prevous items were already generated?
- AnalyticLine = self.env["account.analytic.line"].sudo()
- order_raw_moves = self.mapped("move_raw_ids")
- existing_items = AnalyticLine.search(
- [("stock_move_id ", "in", order_raw_moves.ids)]
- )
- for order in self.filtered("analytic_account_id"):
- for line in order.move_raw_ids:
- line_vals = line._prepare_material_analytic_line()
- if line in existing_items:
- analytic_line = existing_items.filter(
- lambda x: x.stock_move_id == line
- )
- analytic_line.write(line_vals)
- else:
- analytic_line = AnalyticLine.create(line_vals)
- analytic_line.on_change_unit_amount()
+ def generate_analytic_lines(self):
+ """ Generate Analytic Lines for a MO """
+ return self.mapped("move_raw_ids").generate_mrp_raw_analytic_line()
diff --git a/mrp_analytic_cost_material/models/stock_move.py b/mrp_analytic_cost_material/models/stock_move.py
new file mode 100644
index 000000000..d984bc73f
--- /dev/null
+++ b/mrp_analytic_cost_material/models/stock_move.py
@@ -0,0 +1,68 @@
+# Copyright (C) 2021 Open Source Integrators
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import api, models
+
+
+class StockMove(models.Model):
+ _inherit = "stock.move"
+
+ def _prepare_mrp_raw_material_analytic_line(self):
+ self.ensure_one()
+ move = self
+ mrp_order = move.raw_material_production_id
+ return {
+ "date": move.date,
+ "name": "{} / {}".format(mrp_order.name, move.product_id.display_name),
+ "ref": mrp_order.name,
+ "account_id": mrp_order.analytic_account_id.id,
+ "manufacturing_order_id": mrp_order.id,
+ "company_id": mrp_order.company_id.id,
+ "stock_move_id": move.id,
+ "product_id": move.product_id.id,
+ "unit_amount": move.quantity_done,
+ }
+
+ def generate_mrp_raw_analytic_line(self):
+ """Generate Analytic Lines"""
+ # FIXME: consumed products coming from child MOs
+ # should not generate Analytic Items, to avoid duplicating costs!
+ AnalyticLine = self.env["account.analytic.line"].sudo()
+ existing_items = AnalyticLine.search([("stock_move_id", "in", self.ids)])
+ for move in self.filtered("raw_material_production_id.analytic_account_id"):
+ line_vals = move._prepare_mrp_raw_material_analytic_line()
+ if move in existing_items.mapped("stock_move_id"):
+ analytic_line = existing_items.filtered(
+ lambda x: x.stock_move_id == move
+ )
+ analytic_line.write(line_vals)
+ analytic_line.on_change_unit_amount()
+ elif line_vals.get("unit_amount"):
+ analytic_line = AnalyticLine.create(line_vals)
+ analytic_line.on_change_unit_amount()
+
+ def write(self, vals):
+ """ When material is consumed, generate Analytic Items """
+ res = super().write(vals)
+ if vals.get("qty_done"):
+ self.generate_mrp_raw_analytic_line()
+ return res
+
+
+class StockMoveLine(models.Model):
+ _inherit = "stock.move.line"
+
+ def write(self, vals):
+ qty_done = vals.get("qty_done")
+ res = super().write(vals)
+ if qty_done:
+ self.mapped("move_id").generate_mrp_raw_analytic_line()
+ return res
+
+ @api.model
+ def create(self, vals):
+ qty_done = vals.get("qty_done")
+ res = super().create(vals)
+ if qty_done:
+ res.mapped("move_id").generate_mrp_raw_analytic_line()
+ return res
diff --git a/mrp_analytic_cost_material/views/account_analytic_line_view.xml b/mrp_analytic_cost_material/views/account_analytic_line_view.xml
index 9d44d7c4e..0f709438f 100644
--- a/mrp_analytic_cost_material/views/account_analytic_line_view.xml
+++ b/mrp_analytic_cost_material/views/account_analytic_line_view.xml
@@ -9,7 +9,6 @@
-
@@ -31,12 +30,6 @@
domain="[]"
context="{'group_by': 'manufacturing_order_id'}"
/>
-
diff --git a/mrp_analytic_cost_material/views/mrp_production_views.xml b/mrp_analytic_cost_material/views/mrp_production_views.xml
index 4e09e562d..d1e99addd 100644
--- a/mrp_analytic_cost_material/views/mrp_production_views.xml
+++ b/mrp_analytic_cost_material/views/mrp_production_views.xml
@@ -5,12 +5,13 @@
mrp.production
-
+