From 843ce6030e8349299a8e74562c0dc653a8e5a87b Mon Sep 17 00:00:00 2001 From: Nikos Tsirintanis Date: Fri, 20 Feb 2026 12:38:48 +0100 Subject: [PATCH] [UPD]: mrp: pregen and autoassign serials --- addons/mrp/__manifest__.py | 1 + addons/mrp/models/mrp_production.py | 37 ++++++++++++++ addons/mrp/security/ir.model.access.csv | 1 + addons/mrp/views/mrp_production_views.xml | 20 ++++++++ addons/mrp/wizard/__init__.py | 1 + addons/mrp/wizard/mrp_batch_produce.py | 30 ++++++++++++ addons/mrp/wizard/mrp_generate_serials.py | 49 +++++++++++++++++++ .../mrp/wizard/mrp_generate_serials_views.xml | 20 ++++++++ 8 files changed, 159 insertions(+) create mode 100644 addons/mrp/wizard/mrp_generate_serials.py create mode 100644 addons/mrp/wizard/mrp_generate_serials_views.xml diff --git a/addons/mrp/__manifest__.py b/addons/mrp/__manifest__.py index 8291233478565..731e6ccf8aaf1 100644 --- a/addons/mrp/__manifest__.py +++ b/addons/mrp/__manifest__.py @@ -24,6 +24,7 @@ 'wizard/mrp_consumption_warning_views.xml', 'wizard/mrp_batch_produce.xml', 'wizard/mrp_production_split.xml', + 'wizard/mrp_generate_serials_views.xml', 'views/mrp_views_menus.xml', 'views/stock_move_views.xml', 'views/mrp_workorder_views.xml', diff --git a/addons/mrp/models/mrp_production.py b/addons/mrp/models/mrp_production.py index d49f6de62e9b0..43b9b921865c9 100644 --- a/addons/mrp/models/mrp_production.py +++ b/addons/mrp/models/mrp_production.py @@ -272,6 +272,20 @@ def _get_default_is_locked(self): string='Date Category', store=False, search='_search_date_category', readonly=True ) + lot_ids = fields.Many2many( + 'stock.lot', + 'mrp_production_lot_rel', + 'production_id', + 'lot_id', + string='Pre-generated Serials', + copy=False, + help="Serial/Lot numbers pre-generated for this MO. Used to prefill the Batch Produce wizard.", + ) + + lot_serial_count = fields.Integer( + string="Generated Serials", + compute="_compute_lot_serial_count", + ) _sql_constraints = [ ('name_uniq', 'unique(name, company_id)', 'Reference must be unique per Company!'), @@ -339,6 +353,11 @@ def _compute_locations(self): fallback_loc = self.env['stock.warehouse'].search([('company_id', '=', company_id)], limit=1).lot_stock_id production.location_src_id = production.picking_type_id.default_location_src_id.id or fallback_loc.id production.location_dest_id = production.picking_type_id.default_location_dest_id.id or fallback_loc.id + + @api.depends("lot_ids") + def _compute_lot_serial_count(self): + for mo in self: + mo.lot_serial_count = len(mo.lot_ids) @api.model def _search_components_availability_state(self, operator, value): @@ -1142,6 +1161,24 @@ def action_update_bom(self): if production.bom_id: production._link_bom(production.bom_id) self.is_outdated_bom = False + + def action_view_pregenerated_serials(self): + self.ensure_one() + action = self.env["ir.actions.actions"]._for_xml_id("stock.action_production_lot_form") + action["domain"] = [("id", "in", self.lot_ids.ids)] + action["context"] = {} + return action + + def action_open_generate_serials_wizard(self): + self.ensure_one() + return { + "type": "ir.actions.act_window", + "name": _("Generate Serials"), + "res_model": "mrp.generate.serials", + "view_mode": "form", + "target": "new", + "context": {"active_id": self.id}, + } def _get_bom_values(self, ratio=1): """ Returns the BoM lines, by-products and operations values needed to diff --git a/addons/mrp/security/ir.model.access.csv b/addons/mrp/security/ir.model.access.csv index 7f38f01710a89..4a278615945b4 100644 --- a/addons/mrp/security/ir.model.access.csv +++ b/addons/mrp/security/ir.model.access.csv @@ -63,3 +63,4 @@ access_mrp_workcenter_capacity_manager,mrp.workcenter.capacity.manager,model_mrp access_mrp_workcenter_capacity_group_user,mrp.workcenter.capacity,model_mrp_workcenter_capacity,mrp.group_mrp_user,1,0,0,0 access_mrp_batch_produce,access.mrp_batch_produce,model_mrp_batch_produce,mrp.group_mrp_user,1,1,1,0 access_stock_move_mrp_user,stock.move mrp_user,stock.model_stock_move,mrp.group_mrp_user,1,1,1,1 +access_mrp_generate_serials,access.mrp.generate.serials,model_mrp_generate_serials,mrp.group_mrp_user,1,1,1,0 diff --git a/addons/mrp/views/mrp_production_views.xml b/addons/mrp/views/mrp_production_views.xml index 3c625160fbd72..bed8d670ff852 100644 --- a/addons/mrp/views/mrp_production_views.xml +++ b/addons/mrp/views/mrp_production_views.xml @@ -218,11 +218,31 @@ +
+