[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:
Rémy Voet (ryv)
2020-01-22 12:31:40 +00:00
parent 4246e5b5b0
commit eee5c6443b
2 changed files with 8 additions and 3 deletions
+2 -1
View File
@@ -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)
+6 -2
View File
@@ -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)")