From 2ced9faf6b4dc86e236899a1ef91b3a858c1df58 Mon Sep 17 00:00:00 2001 From: abbhi-Odoo Date: Thu, 12 Feb 2026 18:41:33 +0530 Subject: [PATCH 1/2] [ADD] modular_types: add product modular types module - Add modular.type model and configuration menu in MRP - Store per-order-line modular configuration using One2many relation --- modular_types/__init__.py | 1 + modular_types/__manifest__.py | 20 +++++++++++++ modular_types/models/__init__.py | 4 +++ modular_types/models/modular_type.py | 8 ++++++ modular_types/models/mrp_bom_line.py | 7 +++++ modular_types/models/product.py | 7 +++++ modular_types/models/sale_order_line.py | 33 ++++++++++++++++++++++ modular_types/security/ir.model.access.csv | 2 ++ modular_types/views/modular_type_views.xml | 19 +++++++++++++ modular_types/views/mrp_bom_views.xml | 12 ++++++++ modular_types/views/product_views.xml | 12 ++++++++ modular_types/views/sale_order_views.xml | 12 ++++++++ 12 files changed, 137 insertions(+) create mode 100644 modular_types/__init__.py create mode 100644 modular_types/__manifest__.py create mode 100644 modular_types/models/__init__.py create mode 100644 modular_types/models/modular_type.py create mode 100644 modular_types/models/mrp_bom_line.py create mode 100644 modular_types/models/product.py create mode 100644 modular_types/models/sale_order_line.py create mode 100644 modular_types/security/ir.model.access.csv create mode 100644 modular_types/views/modular_type_views.xml create mode 100644 modular_types/views/mrp_bom_views.xml create mode 100644 modular_types/views/product_views.xml create mode 100644 modular_types/views/sale_order_views.xml diff --git a/modular_types/__init__.py b/modular_types/__init__.py new file mode 100644 index 00000000000..0650744f6bc --- /dev/null +++ b/modular_types/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/modular_types/__manifest__.py b/modular_types/__manifest__.py new file mode 100644 index 00000000000..2bb4f49f83e --- /dev/null +++ b/modular_types/__manifest__.py @@ -0,0 +1,20 @@ +{ + "name": "Modular Types", + "version": "1.0", + "category": "Manufacturing", + "author": "Abhi Bhingradiya(abbhi)", + "description": """ + This module allows adding modular types to products and BoM lines. + In Sales Orders, users can set values for these modular types, which + will then be used to multiply the quantities in the resulting Manufacturing Orders. + """, + "depends": ["sale_management", "mrp", "sale_mrp"], + "data": [ + "security/ir.model.access.csv", + "views/modular_type_views.xml", + "views/product_views.xml", + "views/mrp_bom_views.xml", + "views/sale_order_views.xml", + ], + "license": "LGPL-3", +} diff --git a/modular_types/models/__init__.py b/modular_types/models/__init__.py new file mode 100644 index 00000000000..fed0978db90 --- /dev/null +++ b/modular_types/models/__init__.py @@ -0,0 +1,4 @@ +from . import modular_type +from . import product +from . import mrp_bom_line +from . import sale_order_line diff --git a/modular_types/models/modular_type.py b/modular_types/models/modular_type.py new file mode 100644 index 00000000000..936a330274b --- /dev/null +++ b/modular_types/models/modular_type.py @@ -0,0 +1,8 @@ +from odoo import models, fields + + +class ModularType(models.Model): + _name = "modular.type" + _description = "Modular Type" + + name = fields.Char(string="Name", required=True) diff --git a/modular_types/models/mrp_bom_line.py b/modular_types/models/mrp_bom_line.py new file mode 100644 index 00000000000..570ea69b542 --- /dev/null +++ b/modular_types/models/mrp_bom_line.py @@ -0,0 +1,7 @@ +from odoo import fields, models + + +class MrpBomLine(models.Model): + _inherit = "mrp.bom.line" + + modular_type_id = fields.Many2one("modular.type", string="Module Type") diff --git a/modular_types/models/product.py b/modular_types/models/product.py new file mode 100644 index 00000000000..f346f40c457 --- /dev/null +++ b/modular_types/models/product.py @@ -0,0 +1,7 @@ +from odoo import models, fields + + +class ProductTemplate(models.Model): + _inherit = "product.template" + + modular_type_ids = fields.Many2many("modular.type", string="Module Types") diff --git a/modular_types/models/sale_order_line.py b/modular_types/models/sale_order_line.py new file mode 100644 index 00000000000..46c0ae07262 --- /dev/null +++ b/modular_types/models/sale_order_line.py @@ -0,0 +1,33 @@ +from odoo import api, models, fields + + +class SaleOrderLine(models.Model): + _inherit = "sale.order.line" + + has_modular_types = fields.Boolean(compute="_compute_has_modular_types", store=True) + + @api.depends("product_id.modular_type_ids") + def _compute_has_modular_types(self): + for line in self: + line.has_modular_types = bool(line.product_id.modular_type_ids) + + def action_open_modular_values_wizard(self): + self.ensure_one() + return { + "name": "set modular type values", + "type": "ir.actions.act_window", + "res_model": "set.modular.values.wizard", + "view_mode": "form", + "target": "new", + "context": { + "default_sale_line_id": self.id, + "default_line_ids": [ + ( + 0, + 0, + {"modular_type_id": m_type.id, "value": 1.0}, + ) + for m_type in self.product_id.modular_type_ids + ], + }, + } diff --git a/modular_types/security/ir.model.access.csv b/modular_types/security/ir.model.access.csv new file mode 100644 index 00000000000..38741c2f193 --- /dev/null +++ b/modular_types/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_modular_type,modular_type,model_modular_type,base.group_user,1,1,1,1 diff --git a/modular_types/views/modular_type_views.xml b/modular_types/views/modular_type_views.xml new file mode 100644 index 00000000000..34d8519844d --- /dev/null +++ b/modular_types/views/modular_type_views.xml @@ -0,0 +1,19 @@ + + + modular.type.list + modular.type + + + + + + + + + Modular Types + modular.type + list,form + + + + diff --git a/modular_types/views/mrp_bom_views.xml b/modular_types/views/mrp_bom_views.xml new file mode 100644 index 00000000000..8fc14a99066 --- /dev/null +++ b/modular_types/views/mrp_bom_views.xml @@ -0,0 +1,12 @@ + + + mrp.bom.form.inherit + mrp.bom + + + + + + + + diff --git a/modular_types/views/product_views.xml b/modular_types/views/product_views.xml new file mode 100644 index 00000000000..f57ecacb0f9 --- /dev/null +++ b/modular_types/views/product_views.xml @@ -0,0 +1,12 @@ + + + product.template.form.inherit + product.template + + + + + + + + diff --git a/modular_types/views/sale_order_views.xml b/modular_types/views/sale_order_views.xml new file mode 100644 index 00000000000..49ec7bc4ab4 --- /dev/null +++ b/modular_types/views/sale_order_views.xml @@ -0,0 +1,12 @@ + + + sale.order.form.inherit + sale.order + + + +