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'),