mrp_workcenter_cost: keep durations set by users

This commit is contained in:
Sébastien Alix
2023-05-16 15:26:21 +02:00
parent e21b65ef73
commit a331de548f
2 changed files with 12 additions and 5 deletions

View File

@@ -14,7 +14,15 @@ class MrpProduction(models.Model):
self.product_id.mrp_workcenter_cost == "theoretical"
and not any(t.cost_already_recorded for t in self.workorder_ids.time_ids)
)
duration_by_workorder = {}
if should_overwrite_duration:
for workorder in self.workorder_ids.filtered("duration_expected"):
workorders = self.workorder_ids.filtered("duration_expected")
for workorder in workorders:
duration_by_workorder[workorder.id] = workorder.duration
workorder.duration = workorder.duration_expected
return super()._cal_price(consumed_moves)
res = super()._cal_price(consumed_moves)
# Restore the durations set by users
if should_overwrite_duration:
for workorder in workorders:
workorder.duration = duration_by_workorder[workorder.id]
return res

View File

@@ -65,11 +65,10 @@ class TestMrp(TransactionCase):
def test_workcenter_cost_theoretical(self):
self.bom.product_tmpl_id.mrp_workcenter_cost = "theoretical"
# Duration will be reset on MO validation
self.production.workorder_ids.duration = 30
self._mrp_production_done(self.production)
self.assertNotEqual(self.production.workorder_ids.duration, 30)
self.assertEqual(
self.assertEqual(self.production.workorder_ids.duration, 30)
self.assertNotEqual(
self.production.workorder_ids.duration,
self.production.workorder_ids.duration_expected,
)