diff --git a/addons/resource/models/resource.py b/addons/resource/models/resource.py index bd42f1b1e99..35d1e2cd9b4 100644 --- a/addons/resource/models/resource.py +++ b/addons/resource/models/resource.py @@ -295,7 +295,7 @@ class ResourceCalendar(models.Model): ) @api.multi - def plan_hours(self, hours, day_dt, compute_leaves=False, domain=None): + def plan_hours(self, hours, day_dt, compute_leaves=False, domain=None, resource=None): """ `compute_leaves` controls whether or not this method is taking into account the global leaves. @@ -309,11 +309,11 @@ class ResourceCalendar(models.Model): # which method to use for retrieving intervals if compute_leaves: - get_intervals = partial(self._work_intervals, domain=domain) + get_intervals = partial(self._work_intervals, domain=domain, resource=resource) else: get_intervals = self._attendance_intervals - if hours > 0: + if hours >= 0: delta = timedelta(days=14) for n in range(100): dt = day_dt + delta * n @@ -323,8 +323,7 @@ class ResourceCalendar(models.Model): return revert(start + timedelta(hours=hours)) hours -= interval_hours return False - - elif hours < 0: + else: hours = abs(hours) delta = timedelta(days=14) for n in range(100): @@ -336,9 +335,6 @@ class ResourceCalendar(models.Model): hours -= interval_hours return False - else: - return revert(day_dt) - @api.multi def plan_days(self, days, day_dt, compute_leaves=False, domain=None): """ diff --git a/addons/resource/tests/test_resource.py b/addons/resource/tests/test_resource.py index b7adce78f3e..2e12ba7b28a 100644 --- a/addons/resource/tests/test_resource.py +++ b/addons/resource/tests/test_resource.py @@ -260,9 +260,11 @@ class TestCalendar(TestResourceCommon): time = self.calendar_jean.plan_hours(-10, datetime_tz(2018, 4, 10, 0, 0, 0, tzinfo=self.jean.tz), compute_leaves=True) self.assertEqual(time, datetime_tz(2018, 4, 6, 14, 0, 0, tzinfo=self.jean.tz)) - # zero planning - time = self.calendar_jean.plan_hours(0, datetime_tz(2018, 4, 10, 0, 0, 0, tzinfo=self.jean.tz), compute_leaves=True) - self.assertEqual(time, datetime_tz(2018, 4, 10, 0, 0, 0, tzinfo=self.jean.tz)) + # zero planning with holidays + time = self.calendar_jean.plan_hours(0, datetime_tz(2018, 4, 11, 0, 0, 0, tzinfo=self.jean.tz), compute_leaves=True) + self.assertEqual(time, datetime_tz(2018, 4, 12, 8, 0, 0, tzinfo=self.jean.tz)) + time = self.calendar_jean.plan_hours(0, datetime_tz(2018, 4, 10, 0, 0, 0, tzinfo=self.jean.tz), compute_leaves=False) + self.assertEqual(time, datetime_tz(2018, 4, 10, 8, 0, 0, tzinfo=self.jean.tz)) # very small planning time = self.calendar_jean.plan_hours(0.0002, datetime_tz(2018, 4, 10, 0, 0, 0, tzinfo=self.jean.tz), compute_leaves=True)