[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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user