diff --git a/addons/hr_work_entry_contract/models/hr_contract.py b/addons/hr_work_entry_contract/models/hr_contract.py index d3c4eff144f..bcbe9701d51 100644 --- a/addons/hr_work_entry_contract/models/hr_contract.py +++ b/addons/hr_work_entry_contract/models/hr_contract.py @@ -90,6 +90,22 @@ class HrContract(models.Model): )) return result + def _get_lunch_intervals(self, start_dt, end_dt): + # {resource: intervals} + employees_by_calendar = defaultdict(lambda: self.env['hr.employee']) + for contract in self: + employees_by_calendar[contract.resource_calendar_id] |= contract.employee_id + result = {} + for calendar, employees in employees_by_calendar.items(): + result.update(calendar._attendance_intervals_batch( + start_dt, + end_dt, + resources=employees.resource_id, + tz=pytz.timezone(calendar.tz), + lunch=True, + )) + return result + def _get_interval_work_entry_type(self, interval): self.ensure_one() if 'work_entry_type_id' in interval[2] and interval[2].work_entry_type_id[:1]: diff --git a/addons/resource/models/resource_calendar.py b/addons/resource/models/resource_calendar.py index 1449499e522..16fcfee5068 100644 --- a/addons/resource/models/resource_calendar.py +++ b/addons/resource/models/resource_calendar.py @@ -269,7 +269,7 @@ class ResourceCalendar(models.Model): # Computation API # -------------------------------------------------- - def _attendance_intervals_batch(self, start_dt, end_dt, resources=None, domain=None, tz=None): + def _attendance_intervals_batch(self, start_dt, end_dt, resources=None, domain=None, tz=None, lunch=False): assert start_dt.tzinfo and end_dt.tzinfo self.ensure_one() @@ -284,7 +284,7 @@ class ResourceCalendar(models.Model): ('calendar_id', '=', self.id), ('resource_id', 'in', resource_ids), ('display_type', '=', False), - ('day_period', '!=', 'lunch'), + ('day_period', '!=' if not lunch else '=', 'lunch'), ]]) attendances = self.env['resource.calendar.attendance'].search(domain)