From 577eb10c0b74480c95571ada97d63a3741e16c4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 13 Jun 2017 10:54:17 +0200 Subject: [PATCH] [FIX] resource: return correct date when planning hours Planning hours can be done forwards or backwards. In first case the returned datetime should be the last one aka the date when the job is finished. In second case it should be the first one, aka the date when the job begins. Those are the dates user want to know and manipulate when programming working hours. --- addons/resource/models/resource.py | 6 +++++- addons/resource/tests/test_resource.py | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/addons/resource/models/resource.py b/addons/resource/models/resource.py index cb0270b7bfa..a29c8bdd2a5 100644 --- a/addons/resource/models/resource.py +++ b/addons/resource/models/resource.py @@ -474,7 +474,11 @@ class ResourceCalendar(models.Model): """ Wrapper on _schedule_hours: return the beginning/ending datetime of an hours scheduling. """ res = self._schedule_hours(hours, day_dt, compute_leaves, resource_id, default_interval) - return res and res[0][0] or False + if res and hours < 0.0: + return res[0][0] + elif res: + return res[-1][1] + return False @api.multi def schedule_hours(self, hours, day_dt=None, diff --git a/addons/resource/tests/test_resource.py b/addons/resource/tests/test_resource.py index a01bc7ec63f..9fd6dddf8a8 100644 --- a/addons/resource/tests/test_resource.py +++ b/addons/resource/tests/test_resource.py @@ -273,6 +273,9 @@ class TestResource(TestResourceCommon): td += item[1] - item[0] self.assertEqual(seconds(td) / 3600.0, 40.0, 'resource_calendar: wrong hours scheduling') + res = self.calendar.schedule_hours_get_date(-40, day_dt=self.date1.replace(minute=0, second=0)) + self.assertEqual(res, Datetime.from_string('2013-01-29 09:00:00')) + # -------------------------------------------------- # Test2: schedule hours forward # -------------------------------------------------- @@ -299,6 +302,9 @@ class TestResource(TestResourceCommon): td += item[1] - item[0] self.assertEqual(seconds(td) / 3600.0, 40.0, 'resource_calendar: wrong hours scheduling') + res = self.calendar.schedule_hours_get_date(40, day_dt=self.date1.replace(minute=0, second=0)) + self.assertEqual(res, Datetime.from_string('2013-02-26 09:00:00')) + res = self.calendar.schedule_hours( 40, day_dt=self.date1.replace(minute=0, second=0), compute_leaves=True, resource_id=self.resource1_id @@ -401,6 +407,11 @@ class TestResource(TestResourceCommon): # 7h30 -> 12h30 = 5 / 13h -> 14h = 1 / -> 6h self.assertEqual(res, 6, 'resource_calendar: wrong get_working_hours computation') + def test_45_calendar_hours_scheduling_minutes(self): + """ Testing minutes computation in calendar hours scheduling """ + res = self.calendar.schedule_hours_get_date(-39, day_dt=self.date1.replace(minute=25, second=20)) + self.assertEqual(res, Datetime.from_string('2013-01-29 10:25:20')) + def test_50_calendar_schedule_days(self): """ Testing calendar days scheduling """