diff --git a/mrp_analytic_cost_material/models/mrp_production.py b/mrp_analytic_cost_material/models/mrp_production.py index 4d3e6471a..c9017349d 100644 --- a/mrp_analytic_cost_material/models/mrp_production.py +++ b/mrp_analytic_cost_material/models/mrp_production.py @@ -7,20 +7,38 @@ 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.""" - for order in self: - AccountAnalyticLine = self.env["account.analytic.line"].sudo() + # 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 = { - "name": line.product_id.default_code or "", - "account_id": order.analytic_account_id.id or False, - "ref": order.name, - "unit_amount": line.product_uom_qty, - "company_id": order.company_id.id, - "manufacturing_order_id": order.id, - "product_id": line.product_id.id or False, - "stock_move_id": line.raw_material_production_id.id, - } - analytic_line = AccountAnalyticLine.create(line_vals) + 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() diff --git a/mrp_analytic_cost_material/readme/CONTRIBUTORS.rst b/mrp_analytic_cost_material/readme/CONTRIBUTORS.rst index 88e8811fe..edcb34a12 100644 --- a/mrp_analytic_cost_material/readme/CONTRIBUTORS.rst +++ b/mrp_analytic_cost_material/readme/CONTRIBUTORS.rst @@ -1,2 +1,4 @@ -* Daniel Reis -* Chandresh Thakkar +* `Open Source Integrators `: + + * Daniel Reis + * Chandresh Thakkar diff --git a/mrp_analytic_cost_material/views/mrp_production_views.xml b/mrp_analytic_cost_material/views/mrp_production_views.xml index 294299a64..4e09e562d 100644 --- a/mrp_analytic_cost_material/views/mrp_production_views.xml +++ b/mrp_analytic_cost_material/views/mrp_production_views.xml @@ -10,7 +10,7 @@ name="generate_analytic_line" class="btn-primary" type="object" - string="Generate Analytic Items" + string="Generate Material Analytic Items" />