diff --git a/addons/mrp/models/mrp_production.py b/addons/mrp/models/mrp_production.py index 7f84efbf104..068e1d23a33 100644 --- a/addons/mrp/models/mrp_production.py +++ b/addons/mrp/models/mrp_production.py @@ -109,6 +109,7 @@ class MrpProduction(models.Model): 'stock.picking.type', 'Operation Type', domain="[('code', '=', 'mrp_operation'), ('company_id', '=', company_id)]", default=_get_default_picking_type, required=True, check_company=True) + use_create_components_lots = fields.Boolean(related='picking_type_id.use_create_components_lots') location_src_id = fields.Many2one( 'stock.location', 'Components Location', default=_get_default_location_src_id, @@ -668,6 +669,22 @@ class MrpProduction(models.Model): def _onchange_producing(self): self._set_qty_producing() + @api.onchange('lot_producing_id') + def _onchange_lot_producing(self): + if self.product_id.tracking == 'serial': + if self.env['stock.move.line'].search_count([ + ('company_id', '=', self.company_id.id), + ('product_id', '=', self.product_id.id), + ('lot_id', '=', self.lot_producing_id.id), + ('state', '!=', 'cancel') + ]): + return { + 'warning': { + 'title': _('Warning'), + 'message': _('Existing Serial number (%s). Please correct the serial numbers encoded.') % self.lot_producing_id.name + } + } + @api.onchange('bom_id') def _onchange_workorder_ids(self): if self.bom_id: diff --git a/addons/mrp/tests/test_order.py b/addons/mrp/tests/test_order.py index 3dfa1500625..a7e024f146e 100644 --- a/addons/mrp/tests/test_order.py +++ b/addons/mrp/tests/test_order.py @@ -976,7 +976,8 @@ class TestMrpOrder(TestMrpCommon): mo2.action_confirm() mo_form = Form(mo2) - mo_form.lot_producing_id = sn + with self.assertLogs(level="WARNING"): + mo_form.lot_producing_id = sn mo2 = mo_form.save() with self.assertRaises(UserError): mo2.button_mark_done() diff --git a/addons/mrp/views/mrp_production_views.xml b/addons/mrp/views/mrp_production_views.xml index c0a86603c16..400dafccf5d 100644 --- a/addons/mrp/views/mrp_production_views.xml +++ b/addons/mrp/views/mrp_production_views.xml @@ -143,6 +143,7 @@ + @@ -270,6 +271,13 @@ attrs="{'column_invisible': [('parent.state', '=', 'draft')], 'readonly': [('show_details_visible', '=', True)]}"/> +