diff --git a/addons/hr_attendance/models/hr_attendance.py b/addons/hr_attendance/models/hr_attendance.py index 37f3d43944e..3ca36e37116 100644 --- a/addons/hr_attendance/models/hr_attendance.py +++ b/addons/hr_attendance/models/hr_attendance.py @@ -264,7 +264,10 @@ class HrAttendance(models.Model): )[emp.resource_id.id] # Substract Global Leaves and Employee's Leaves leave_intervals = calendar._leave_intervals_batch( - start, stop, emp.resource_id, domain=self._get_overtime_leave_domain() + start, stop, emp.resource_id, domain=AND([ + self._get_overtime_leave_domain(), + [('company_id', 'in', [False, emp.company_id.id])], + ]) ) expected_attendances -= leave_intervals[False] | leave_intervals[emp.resource_id.id] diff --git a/addons/hr_holidays_attendance/tests/test_holidays_overtime.py b/addons/hr_holidays_attendance/tests/test_holidays_overtime.py index 0f4f8be92d0..4b2e82b955b 100644 --- a/addons/hr_holidays_attendance/tests/test_holidays_overtime.py +++ b/addons/hr_holidays_attendance/tests/test_holidays_overtime.py @@ -246,12 +246,25 @@ class TestHolidaysOvertime(TransactionCase): self.assertFalse(leave.overtime_id.exists()) def test_public_leave_overtime(self): - self.env['resource.calendar.leaves'].create([{ + leave = self.env['resource.calendar.leaves'].create([{ 'name': 'Public Holiday', 'date_from': datetime(2022, 5, 5, 6), 'date_to': datetime(2022, 5, 5, 18), - 'time_type': 'leave', }]) - self.new_attendance(check_in=datetime(2022, 5, 5, 8), check_out=datetime(2022, 5, 5, 16)) - self.assertEqual(self.employee.total_overtime, 7, 'Should have 7 hours of overtime (there is one hour of lunch)') + leave.company_id.write({ + 'hr_attendance_overtime': True, + 'overtime_start_date': datetime(2021, 1, 1), + }) + self.assertNotEqual(leave.company_id, self.employee.company_id) + self.manager.company_id = leave.company_id.id + + for emp in [self.employee, self.manager]: + self.env['hr.attendance'].create({ + 'employee_id': emp.id, + 'check_in': datetime(2022, 5, 5, 8), + 'check_out': datetime(2022, 5, 5, 17), + }) + + self.assertEqual(self.employee.total_overtime, 0, "Should have 0 hours of overtime as the public holiday doesn't impact his company") + self.assertEqual(self.manager.total_overtime, 8, 'Should have 8 hours of overtime (there is one hour of lunch)') diff --git a/addons/resource/models/resource_calendar.py b/addons/resource/models/resource_calendar.py index 1093dbc6ef1..d7c154b4cd1 100644 --- a/addons/resource/models/resource_calendar.py +++ b/addons/resource/models/resource_calendar.py @@ -401,7 +401,7 @@ class ResourceCalendar(models.Model): tz_dates = {} for leave in self.env['resource.calendar.leaves'].search(domain): for resource in resources_list: - if leave.resource_id.id not in [False, resource.id]: + if leave.resource_id.id not in [False, resource.id] or (not leave.resource_id and resource and resource.company_id != leave.company_id): continue tz = tz if tz else timezone((resource or self).tz) if (tz, start_dt) in tz_dates: