diff --git a/addons/hr_holidays/models/hr_leave.py b/addons/hr_holidays/models/hr_leave.py index 090fa09c897..d2c7a78a8b3 100644 --- a/addons/hr_holidays/models/hr_leave.py +++ b/addons/hr_holidays/models/hr_leave.py @@ -770,7 +770,9 @@ class HolidaysRequest(models.Model): """ Returns a float equals to the timedelta between two dates given as string.""" if employee_id: employee = self.env['hr.employee'].browse(employee_id) - result = employee._get_work_days_data_batch(date_from, date_to)[employee.id] + # We force the company in the domain as we are more than likely in a compute_sudo + domain = [('company_id', 'in', self.env.company.ids + self.env.context.get('allowed_company_ids', []))] + result = employee._get_work_days_data_batch(date_from, date_to, domain=domain)[employee.id] if self.request_unit_half and result['hours'] > 0: result['days'] = 0.5 return result @@ -1516,4 +1518,4 @@ class HolidaysRequest(models.Model): @api.model def get_unusual_days(self, date_from, date_to=None): - return self.env.user.employee_id._get_unusual_days(date_from, date_to) + return self.env.user.employee_id.sudo(False)._get_unusual_days(date_from, date_to) diff --git a/addons/hr_holidays/tests/test_leave_requests.py b/addons/hr_holidays/tests/test_leave_requests.py index c0cabc9ccdc..53a9267c235 100644 --- a/addons/hr_holidays/tests/test_leave_requests.py +++ b/addons/hr_holidays/tests/test_leave_requests.py @@ -562,3 +562,24 @@ class TestLeaveRequests(TestHrHolidaysCommon): req2_form.request_date_to = fields.Date.to_date('2021-12-08') self.assertEqual(req2_form.number_of_days, 3) + + def test_leave_with_public_holiday_other_company(self): + other_company = self.env['res.company'].create({ + 'name': 'Test Company', + }) + # Create a public holiday for the second company + p_leave = self.env['resource.calendar.leaves'].create({ + 'date_from': datetime(2022, 3, 11), + 'date_to': datetime(2022, 3, 11, 23, 59, 59), + }) + p_leave.company_id = other_company + + leave = self.env['hr.leave'].with_user(self.user_employee_id).create({ + 'name': 'Holiday Request', + 'holiday_type': 'employee', + 'employee_id': self.employee_emp.id, + 'holiday_status_id': self.holidays_type_1.id, + 'date_from': datetime(2022, 3, 11), + 'date_to': datetime(2022, 3, 11, 23, 59, 59), + }) + self.assertEqual(leave.number_of_days, 1) diff --git a/addons/hr_work_entry_holidays/models/hr_leave.py b/addons/hr_work_entry_holidays/models/hr_leave.py index c0bfeb9ead8..d07485d9d10 100644 --- a/addons/hr_work_entry_holidays/models/hr_leave.py +++ b/addons/hr_work_entry_holidays/models/hr_leave.py @@ -203,7 +203,9 @@ class HrLeave(models.Model): contracts = employee.sudo()._get_contracts(date_from, date_to, states=['open']) contracts |= employee.sudo()._get_incoming_contracts(date_from, date_to) calendar = contracts[:1].resource_calendar_id if contracts else None # Note: if len(contracts)>1, the leave creation will crash because of unicity constaint - result = employee._get_work_days_data_batch(date_from, date_to, calendar=calendar)[employee.id] + # We force the company in the domain as we are more than likely in a compute_sudo + domain = [('company_id', 'in', self.env.company.ids + self.env.context.get('allowed_company_ids', []))] + result = employee._get_work_days_data_batch(date_from, date_to, calendar=calendar, domain=domain)[employee.id] if self.request_unit_half and result['hours'] > 0: result['days'] = 0.5 return result