[FIX] mrp: truncate millisecond to check overlaps
In some flows, a planned_datetime_start/finished will contains milliseconds. In these cases, we can detect overlaps/conflicts between workorders but these conflicts can't be see in the web interface (because datetime is truncate when it is display). Then, change the conflicts computation to remove milliseconds in search of conflicts. task-2169447 closes odoo/odoo#43013 Signed-off-by: Simon Lejeune (sle) <sle@openerp.com>
This commit is contained in:
@@ -767,7 +767,8 @@ class MrpWorkorder(models.Model):
|
||||
AND wo2.state IN ('pending','ready')
|
||||
AND wo1.id != wo2.id
|
||||
AND wo1.workcenter_id = wo2.workcenter_id
|
||||
AND (wo2.date_planned_start, wo2.date_planned_finished) OVERLAPS (wo1.date_planned_start, wo1.date_planned_finished)
|
||||
AND (DATE_TRUNC('second', wo2.date_planned_start), DATE_TRUNC('second', wo2.date_planned_finished))
|
||||
OVERLAPS (DATE_TRUNC('second', wo1.date_planned_start), DATE_TRUNC('second', wo1.date_planned_finished))
|
||||
"""
|
||||
self.env.cr.execute(sql, [tuple(self.ids)])
|
||||
res = defaultdict(list)
|
||||
|
||||
@@ -1447,13 +1447,17 @@ class TestWorkOrderProcess(TestWorkOrderProcessCommon):
|
||||
self.assertEqual(wo2.state, 'pending')
|
||||
self.assertEqual(wo3.state, 'pending')
|
||||
|
||||
self.assertFalse(wo1.id in wo1._get_conflicted_workorder_ids(), "Shouldn't conflict")
|
||||
self.assertFalse(wo2.id in wo2._get_conflicted_workorder_ids(), "Shouldn't conflict")
|
||||
self.assertFalse(wo3.id in wo3._get_conflicted_workorder_ids(), "Shouldn't conflict")
|
||||
|
||||
# Conflicted with wo1
|
||||
wo2.write({'date_planned_start': wo1.date_planned_start, 'date_planned_finished': wo1.date_planned_finished})
|
||||
# Bad order of workorders (wo3-wo1-wo2) + Late
|
||||
wo3.write({'date_planned_start': wo1.date_planned_start - timedelta(weeks=1), 'date_planned_finished': wo1.date_planned_finished - timedelta(weeks=1)})
|
||||
|
||||
self.assertEqual(wo2.id in wo2._get_conflicted_workorder_ids(), True, "Should conflict with wo1")
|
||||
self.assertEqual(wo1.id in wo1._get_conflicted_workorder_ids(), True, "Should conflict with wo2")
|
||||
self.assertTrue(wo2.id in wo2._get_conflicted_workorder_ids(), "Should conflict with wo1")
|
||||
self.assertTrue(wo1.id in wo1._get_conflicted_workorder_ids(), "Should conflict with wo2")
|
||||
|
||||
self.assertTrue('text-danger' in wo2.json_popover, "Popover should in be in red (due to conflict)")
|
||||
self.assertTrue('text-danger' in wo3.json_popover, "Popover should in be in red (due to bad order of wo)")
|
||||
|
||||
Reference in New Issue
Block a user