diff --git a/addons/repair/models/repair.py b/addons/repair/models/repair.py index 5cc21077a33..1f25ff0ddbb 100644 --- a/addons/repair/models/repair.py +++ b/addons/repair/models/repair.py @@ -436,7 +436,7 @@ class Repair(models.Model): if move_id: repair.move_id = move_id all_moves = self.move_ids + product_moves - all_moves._action_done() + all_moves._action_done(cancel_backorder=True) for sale_line in self.move_ids.sale_line_id: price_unit = sale_line.price_unit @@ -451,7 +451,14 @@ class Repair(models.Model): """ if self.filtered(lambda repair: repair.state != 'under_repair'): raise UserError(_("Repair must be under repair in order to end reparation.")) - if any(float_compare(move.quantity, move.product_uom_qty, precision_rounding=move.product_uom.rounding) < 0 for move in self.move_ids): + partial_moves = set() + picked_moves = set() + for move in self.move_ids: + if float_compare(move.quantity, move.product_uom_qty, precision_rounding=move.product_uom.rounding) < 0: + partial_moves.add(move.id) + if move.picked: + picked_moves.add(move.id) + if partial_moves or picked_moves and len(picked_moves) < len(self.move_ids): ctx = dict(self.env.context or {}) ctx['default_repair_ids'] = self.ids return { diff --git a/addons/repair/tests/test_repair.py b/addons/repair/tests/test_repair.py index 19b1824aaf3..82e65d2826c 100644 --- a/addons/repair/tests/test_repair.py +++ b/addons/repair/tests/test_repair.py @@ -303,8 +303,13 @@ class TestRepair(common.TransactionCase): self.assertEqual(lineD.state, 'assigned') num_of_lines = len(repair.move_ids) self.assertFalse(repair.move_id) - repair.action_repair_end() - + end_action = repair.action_repair_end() + self.assertEqual(end_action.get("res_model"), "repair.warn.uncomplete.move") + warn_uncomplete_wizard = Form( + self.env['repair.warn.uncomplete.move'] + .with_context(**end_action['context']) + ).save() + warn_uncomplete_wizard.action_validate() self.assertEqual(repair.state, "done") done_moves = repair.move_ids - lineD #line a,b,c are 'done', line d is 'cancel'