From 09eedbd489ca6be6e407b5f1b6985abcac0c63fd Mon Sep 17 00:00:00 2001 From: Miquel Rosell Date: Wed, 20 May 2026 16:51:24 +0200 Subject: [PATCH 1/2] [FIX] maintenance_equipment_sequence: convert create to api.model_create_multi Converts MaintenanceEquipmentCategory.create() and MaintenanceEquipment.create() to batch-compatible api.model_create_multi for Odoo 17 best practice. Browse calls are batched outside loops to avoid repeated database queries when creating records in bulk. --- .../models/maintenance.py | 50 +++++++++++-------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/maintenance_equipment_sequence/models/maintenance.py b/maintenance_equipment_sequence/models/maintenance.py index 42eb29066..2546e8996 100644 --- a/maintenance_equipment_sequence/models/maintenance.py +++ b/maintenance_equipment_sequence/models/maintenance.py @@ -63,16 +63,23 @@ def _inverse_seq_number_next(self): sequence = category.sequence_id._get_current_sequence() sequence.sudo().number_next = category.sequence_number_next - @api.model - def create(self, vals): - if not vals.get("sequence_id", False): - if vals.get("sequence_prefix", False): - vals["sequence_id"] = self.sudo()._create_sequence(vals).id - else: - vals["sequence_prefix"] = ( - self.env["ir.sequence"].browse(vals["sequence_id"]).prefix - ) - result = super().create(vals) + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + if not vals.get("sequence_id"): + if vals.get("sequence_prefix"): + vals["sequence_id"] = self.sudo()._create_sequence(vals).id + # Batch-read prefixes for provided sequence IDs + sequence_ids = { + vals["sequence_id"] for vals in vals_list if vals.get("sequence_id") + } + if sequence_ids: + sequences = self.env["ir.sequence"].browse(list(sequence_ids)) + prefix_map = {seq.id: seq.prefix for seq in sequences} + for vals in vals_list: + if vals.get("sequence_id"): + vals["sequence_prefix"] = prefix_map.get(vals["sequence_id"]) + result = super().create(vals_list) self._compute_equipment_code() return result @@ -107,18 +114,19 @@ def _compute_equipment_code(self): class MaintenanceEquipment(models.Model): _inherit = "maintenance.equipment" - @api.model - def create(self, vals): - equipment = super().create(vals) - if equipment.category_id and not equipment.serial_no: - sequence_id = ( - self.env["maintenance.equipment.category"] - .browse(vals["category_id"]) - .sequence_id + @api.model_create_multi + def create(self, vals_list): + equipments = super().create(vals_list) + category_ids = {eq.category_id.id for eq in equipments if eq.category_id} + if category_ids: + categories = self.env["maintenance.equipment.category"].browse( + list(category_ids) ) - if sequence_id: - equipment.serial_no = sequence_id._next() - return equipment + seq_map = {cat.id: cat.sequence_id for cat in categories if cat.sequence_id} + for equipment in equipments: + if not equipment.serial_no and equipment.category_id.id in seq_map: + equipment.serial_no = seq_map[equipment.category_id.id]._next() + return equipments def write(self, vals): result = super().write(vals) From abd0e44ee1a86897e0c3eab2e113a0e2f696ee6c Mon Sep 17 00:00:00 2001 From: Miquel Rosell <38435442+miquelrosell99@users.noreply.github.com> Date: Tue, 30 Jun 2026 14:17:26 +0200 Subject: [PATCH 2/2] Update maintenance_equipment_sequence/models/maintenance.py MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Carlos GarcĂ­a --- maintenance_equipment_sequence/models/maintenance.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maintenance_equipment_sequence/models/maintenance.py b/maintenance_equipment_sequence/models/maintenance.py index 2546e8996..cc3401779 100644 --- a/maintenance_equipment_sequence/models/maintenance.py +++ b/maintenance_equipment_sequence/models/maintenance.py @@ -80,7 +80,7 @@ def create(self, vals_list): if vals.get("sequence_id"): vals["sequence_prefix"] = prefix_map.get(vals["sequence_id"]) result = super().create(vals_list) - self._compute_equipment_code() + result._compute_equipment_code() return result def write(self, vals):