diff --git a/addons/hr_holidays/models/hr_leave.py b/addons/hr_holidays/models/hr_leave.py index c148a278e49..6076404c5fa 100644 --- a/addons/hr_holidays/models/hr_leave.py +++ b/addons/hr_holidays/models/hr_leave.py @@ -547,7 +547,7 @@ class HolidaysRequest(models.Model): ('company_id', 'in', self.env.companies.ids + self.env.context.get('allowed_company_ids', [])), # When searching for resource leave intervals, we exclude the one that # is related to the leave we're currently trying to compute for. - ('holiday_id', '!=', self.id)] + '|', ('holiday_id', '=', False), ('holiday_id', '!=', self.id)] if self.leave_type_request_unit == 'day' and check_leave_type: # list of tuples (day, hours) work_time_per_day_list = self.employee_id.list_work_time_per_day(self.date_from, self.date_to, calendar=resource_calendar, domain=domain) diff --git a/addons/hr_holidays/tests/test_global_leaves.py b/addons/hr_holidays/tests/test_global_leaves.py index fe7ff421711..a81c7ff715d 100644 --- a/addons/hr_holidays/tests/test_global_leaves.py +++ b/addons/hr_holidays/tests/test_global_leaves.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from datetime import date, datetime +from datetime import date, datetime, timedelta from odoo.addons.hr_holidays.tests.common import TestHrHolidaysCommon from odoo.exceptions import ValidationError from freezegun import freeze_time @@ -130,3 +130,48 @@ class TestGlobalLeaves(TestHrHolidaysCommon): # Note: # The user in Europe/Brussels timezone see 4:30 and not 2:30 because he is in UTC +02:00. # The user in Asia/Calcutta timezone (determined via the browser) see 8:00 because he is in UTC +05:30 + + def test_global_leave_number_of_days_with_new(self): + """ + Check that leaves stored in memory (and not in the database) + take into account global leaves. + """ + global_leave = self.env['resource.calendar.leaves'].create({ + 'name': 'Global Time Off', + 'date_from': datetime(2024, 1, 3, 6, 0, 0), + 'date_to': datetime(2024, 1, 3, 19, 0, 0), + 'calendar_id': self.calendar_1.id, + }) + leave_type = self.env['hr.leave.type'].create({ + 'name': 'Paid Time Off', + 'time_type': 'leave', + 'requires_allocation': 'no', + }) + self.employee_emp.resource_calendar_id = self.calendar_1.id + + leave = self.env['hr.leave'].create({ + 'name': 'Test new leave', + 'employee_id': self.employee_emp.id, + 'holiday_status_id': leave_type.id, + 'request_date_from': global_leave.date_from, + 'request_date_to': global_leave.date_to, + }) + self.assertEqual(leave.number_of_days, 0, 'It is a global leave') + + leave = self.env['hr.leave'].new({ + 'name': 'Test new leave', + 'employee_id': self.employee_emp.id, + 'holiday_status_id': leave_type.id, + 'request_date_from': global_leave.date_from, + 'request_date_to': global_leave.date_to, + }) + self.assertEqual(leave.number_of_days, 0, 'It is a global leave') + + leave = self.env['hr.leave'].new({ + 'name': 'Test new leave', + 'employee_id': self.employee_emp.id, + 'holiday_status_id': leave_type.id, + 'request_date_from': global_leave.date_from - timedelta(days=1), + 'request_date_to': global_leave.date_to + timedelta(days=1), + }) + self.assertEqual(leave.number_of_days, 2, 'There is a global leave')