diff --git a/addons/resource/models/resource_calendar.py b/addons/resource/models/resource_calendar.py index a5aaad0cae8..1093dbc6ef1 100644 --- a/addons/resource/models/resource_calendar.py +++ b/addons/resource/models/resource_calendar.py @@ -488,7 +488,7 @@ class ResourceCalendar(models.Model): # take durations in days proportionally to what is left of the interval. interval_hours = (stop - start).total_seconds() / 3600 day_hours[start.date()] += interval_hours - day_days[start.date()] += meta.duration_days * interval_hours / meta.duration_hours + day_days[start.date()] += sum(meta.mapped('duration_days')) * interval_hours / sum(meta.mapped('duration_hours')) return { # Round the number of days to the closest 16th of a day. diff --git a/addons/test_resource/tests/common.py b/addons/test_resource/tests/common.py index a4f28f07a6d..c8411481b76 100644 --- a/addons/test_resource/tests/common.py +++ b/addons/test_resource/tests/common.py @@ -61,6 +61,8 @@ class TestResourceCommon(TransactionCase): cls.calendar_paul = cls._define_calendar('Morning and evening shifts', sum([((2, 7, i, 0.5), (10, 16, i, 0.5)) for i in range(5)], ()), 'Brazil/DeNoronha') + cls.calendar_bob = cls._define_calendar('Calendar with adjacent attendances', sum([((8, 12, i, 0.5), (12, 16, i, 0.5)) for i in range(5)], ()), 'Europe/Brussels') + # Employee is linked to a resource.resource via resource.mixin cls.jean = cls.env['resource.test'].create({ 'name': 'Jean', @@ -84,6 +86,12 @@ class TestResourceCommon(TransactionCase): 'resource_calendar_id': cls.calendar_paul.id, }) + cls.bob = cls.env['resource.test'].create({ + 'name': 'Bob', + 'resource_calendar_id': cls.calendar_bob.id, + }) + + cls.two_weeks_resource = cls._define_calendar_2_weeks( 'Two weeks resource', [ diff --git a/addons/test_resource/tests/test_resource.py b/addons/test_resource/tests/test_resource.py index e114ef1b86e..82ff87dc67c 100644 --- a/addons/test_resource/tests/test_resource.py +++ b/addons/test_resource/tests/test_resource.py @@ -668,6 +668,14 @@ class TestResMixin(TestResourceCommon): )[self.jean.id] self.assertEqual(data, {'days': 5, 'hours': 40}) + # Viewing it as Bob + data = self.bob._get_work_days_data_batch( + datetime_tz(2018, 4, 2, 0, 0, 0, tzinfo=self.bob.tz), + datetime_tz(2018, 4, 6, 16, 0, 0, tzinfo=self.bob.tz), + )[self.bob.id] + self.assertEqual(data, {'days': 5, 'hours': 40}) + + # Viewing it as Patel # Views from 2018/04/01 20:00:00 to 2018/04/06 12:00:00 data = self.jean._get_work_days_data_batch(