diff --git a/addons/mrp/models/mrp_production.py b/addons/mrp/models/mrp_production.py index bb4c303ed30..99b25f8f341 100644 --- a/addons/mrp/models/mrp_production.py +++ b/addons/mrp/models/mrp_production.py @@ -801,6 +801,18 @@ class MrpProduction(models.Model): if 'move_byproduct_ids' in vals and 'move_finished_ids' not in vals: vals['move_finished_ids'] = vals.get('move_finished_ids', []) + vals['move_byproduct_ids'] del vals['move_byproduct_ids'] + if 'bom_id' in vals and 'move_byproduct_ids' in vals and 'move_finished_ids' in vals: + # If byproducts are given, they take precedence over move_finished for byproduts definition + bom = self.env['mrp.bom'].browse(vals.get('bom_id')) + bom_product = bom.product_id or bom.product_tmpl_id.product_variant_id + joined_move_ids = vals.get('move_byproduct_ids', []) + for move_finished in vals.get('move_finished_ids', []): + # Remove CREATE lines from finished_ids as they do not reflect the form current state (nor the byproduct vals) + if move_finished[0] == Command.CREATE and move_finished[2].get('product_id') != bom_product.id: + continue + joined_move_ids.append(move_finished) + vals['move_finished_ids'] = joined_move_ids + del vals['move_byproduct_ids'] if 'workorder_ids' in self: production_to_replan = self.filtered(lambda p: p.is_planned) if 'move_raw_ids' in vals and self.state not in ['draft', 'cancel', 'done']: