From 3ee10159dbc21202ce3367b34b00a5ce0d9a72e7 Mon Sep 17 00:00:00 2001 From: William Henrotin Date: Tue, 7 Sep 2021 07:44:39 +0000 Subject: [PATCH] [FIX] mrp: backorder sequence fallback In case a production order loses its procurement group. The backorder generation process do not have access to the last backorder sequence used. This commit set a default value to avoid any traceback. The new backorder name will not be guaranteed exact related to the production sequence but will be unique in any cases. closes odoo/odoo#76091 X-original-commit: aae07e88a8166cf26a8c81bb8ee37d630fd6672c Signed-off-by: William Henrotin --- addons/mrp/models/mrp_production.py | 2 +- addons/mrp/tests/test_backorder.py | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/addons/mrp/models/mrp_production.py b/addons/mrp/models/mrp_production.py index c9e4ca35346..2d196731d62 100644 --- a/addons/mrp/models/mrp_production.py +++ b/addons/mrp/models/mrp_production.py @@ -1441,7 +1441,7 @@ class MrpProduction(models.Model): def _get_backorder_mo_vals(self): self.ensure_one() - next_seq = max(self.procurement_group_id.mrp_production_ids.mapped("backorder_sequence")) + next_seq = max(self.procurement_group_id.mrp_production_ids.mapped("backorder_sequence"), default=1) return { 'name': self._get_name_backorder(self.name, next_seq + 1), 'backorder_sequence': next_seq + 1, diff --git a/addons/mrp/tests/test_backorder.py b/addons/mrp/tests/test_backorder.py index aed6fa0af14..e7c9c7b8d0b 100644 --- a/addons/mrp/tests/test_backorder.py +++ b/addons/mrp/tests/test_backorder.py @@ -312,6 +312,24 @@ class TestMrpProductionBackorder(TestMrpCommon): self.assertEqual(new_backorder.name, initial_mo_name + "-" + str(seq + 1)) backorder = new_backorder + def test_backorder_name_without_procurement_group(self): + production = self.generate_mo(qty_final=5)[0] + mo_form = Form(production) + mo_form.qty_producing = 1 + mo = mo_form.save() + + # Remove pg to trigger fallback on backorder name + mo.procurement_group_id = False + action = mo.button_mark_done() + backorder_form = Form(self.env['mrp.production.backorder'].with_context(**action['context'])) + backorder_form.save().action_backorder() + + # The pg is back + self.assertTrue(production.procurement_group_id) + backorder_ids = production.procurement_group_id.mrp_production_ids[1] + self.assertEqual(production.name.split('-')[0], backorder_ids.name.split('-')[0]) + self.assertEqual(int(production.name.split('-')[1]) + 1, int(backorder_ids.name.split('-')[1])) + class TestMrpWorkorderBackorder(TransactionCase): @classmethod