[FIX] mrp: fix duration expected

_split_productions wrongly compute duration expected for backorders.

Setting quantity on production adapt many things including workorders,
so adapt original production after copy_data for backorders.

closes odoo/odoo#96179

Task: 2884562
X-original-commit: 71b8531881ff6924762ec34db3f2ddf858383218
Signed-off-by: Tiffany Chang <tic@odoo.com>
This commit is contained in:
JF Aubert
2022-07-18 19:55:16 +02:00
parent e2aeb5fc23
commit 3ced21cf87
2 changed files with 5 additions and 2 deletions
+2 -2
View File
@@ -1571,9 +1571,9 @@ class MrpProduction(models.Model):
production.name = self._get_name_backorder(production.name, production.backorder_sequence)
(production.move_raw_ids | production.move_finished_ids).name = production.name
(production.move_raw_ids | production.move_finished_ids).origin = production._get_origin()
production.product_qty = amounts[production][0]
backorder_vals = production.copy_data(default=production._get_backorder_mo_vals())[0]
backorder_qtys = amounts[production][1:]
production.product_qty = amounts[production][0]
next_seq = max(production.procurement_group_id.mrp_production_ids.mapped("backorder_sequence"), default=1)
@@ -1725,7 +1725,7 @@ class MrpProduction(models.Model):
bo = production_to_backorders[production]
# Adapt duration
for workorder in (production | bo).workorder_ids:
for workorder in bo.workorder_ids:
workorder.duration_expected = workorder.duration_expected * workorder.production_id.product_qty / initial_qty
# Adapt quantities produced
+3
View File
@@ -2655,6 +2655,7 @@ class TestMrpOrder(TestMrpCommon):
wo_1, wo_2, wo_3 = mo.workorder_ids
self.assertEqual(mo.state, 'confirmed')
self.assertEqual(wo_1.state, 'ready')
self.assertEqual(wo_1.duration_expected, 20 * 60)
# produce 20 / 10 / 5 on workorders, create backorder
@@ -2687,6 +2688,7 @@ class TestMrpOrder(TestMrpCommon):
wo_4, wo_5, wo_6 = mo_2.workorder_ids
self.assertEqual(wo_4.state, 'cancel')
self.assertEqual(wo_5.duration_expected, 15 * 60)
# produce 10 / 5, create backorder
@@ -2716,6 +2718,7 @@ class TestMrpOrder(TestMrpCommon):
self.assertEqual(wo_7.state, 'cancel')
self.assertEqual(wo_8.state, 'cancel')
self.assertEqual(wo_9.duration_expected, 10 * 60)
# produce 10 and finish work