diff --git a/addons/resource/models/resource.py b/addons/resource/models/resource.py index 86430822038..32da153366d 100644 --- a/addons/resource/models/resource.py +++ b/addons/resource/models/resource.py @@ -457,6 +457,16 @@ class ResourceCalendar(models.Model): if intervals: yield intervals + def _iter_work_hours_count(self, from_datetime, to_datetime, resource_id): + """ Lists the current resource's work hours count between the two provided + datetime expressed in naive UTC. """ + + for interval in self._iter_work_intervals(from_datetime, to_datetime, resource_id): + td = timedelta() + for work_interval in interval: + td += work_interval[1] - work_interval[0] + yield (interval[0][0].date(), td.total_seconds() / 3600.0) + def _iter_work_days(self, from_date, to_date, resource_id): """ Lists the current resource's work days between the two provided dates (inclusive) expressed in naive UTC. diff --git a/addons/resource/models/resource_mixin.py b/addons/resource/models/resource_mixin.py index bd9fcc2e640..de5a9b5ecb4 100644 --- a/addons/resource/models/resource_mixin.py +++ b/addons/resource/models/resource_mixin.py @@ -57,6 +57,10 @@ class ResourceMixin(models.AbstractModel): calendar = calendar or self.resource_calendar_id return calendar._iter_work_intervals(from_datetime, to_datetime, self.resource_id.id) + def iter_work_hours_count(self, from_datetime, to_datetime, calendar=None): + calendar = calendar or self.resource_calendar_id + return calendar._iter_work_hours_count(from_datetime, to_datetime, self.resource_id.id) + def get_leaves_day_count(self, from_datetime, to_datetime, calendar=None): """ Return the number of leave days for the resource, taking into account attendances. An optional calendar can be given in case multiple calendars