From 6baa42ed57e31d9c48ca2a3e0a33baf336cbf7ce 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. Manual forward port of 577eb10c0b74480c95571ada97d63a3741e16c4c . --- addons/resource/models/resource.py | 6 +++++- addons/resource/tests/test_resource.py | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/addons/resource/models/resource.py b/addons/resource/models/resource.py index 86430822038..b0de8819b03 100644 --- a/addons/resource/models/resource.py +++ b/addons/resource/models/resource.py @@ -552,7 +552,11 @@ class ResourceCalendar(models.Model): def plan_hours(self, hours, day_dt, compute_leaves=False, resource_id=None): """ Return datetime after having planned hours """ res = self._schedule_hours(hours, day_dt, compute_leaves, resource_id) - 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_days(self, days, day_dt, compute_leaves=False, resource_id=None): diff --git a/addons/resource/tests/test_resource.py b/addons/resource/tests/test_resource.py index 3a545f5feef..3398caa650c 100644 --- a/addons/resource/tests/test_resource.py +++ b/addons/resource/tests/test_resource.py @@ -276,6 +276,9 @@ class ResourceWorkingHours(TestResourceCommon): td += item[1] - item[0] self.assertEqual(td.total_seconds() / 3600.0, 40.0) + res = self.calendar.plan_hours(-40, day_dt=Datetime.from_string('2013-02-12 09:00:00')) + self.assertEqual(res, Datetime.from_string('2013-01-29 09:00:00')) + def test_calendar_hours_scheduling_forward(self): res = self.calendar._schedule_hours(40, day_dt=Datetime.from_string('2013-02-12 09:00:00')) self.assertEqual(res[0][:2], (Datetime.from_string('2013-02-12 09:00:00'), Datetime.from_string('2013-02-12 16:00:00'))) @@ -291,6 +294,9 @@ class ResourceWorkingHours(TestResourceCommon): td += item[1] - item[0] self.assertEqual(td.total_seconds() / 3600.0, 40.0) + res = self.calendar.plan_hours(40, day_dt=Datetime.from_string('2013-02-12 09:00:00')) + self.assertEqual(res, Datetime.from_string('2013-02-26 09:00:00')) + def test_calendar_hours_scheduling_forward_leaves_resource(self): res = self.calendar._schedule_hours( 40, day_dt=Datetime.from_string('2013-02-12 09:00:00'),