From 85268e1ae7b49afc211fb25531d9e4729c62dec0 Mon Sep 17 00:00:00 2001 From: "Audric Onockx (auon)" Date: Thu, 3 Feb 2022 16:38:43 +0000 Subject: [PATCH] [FIX] hr_holidays : allow company leave second allocation Steps : Create a Leave Allocation : Mode : "By Company" (just to give it to every employee). Duration : 6 days Create a Leave for 2 Employees A and B for week W. Approve it. Create a Leave for another Employee C for week W and next moday. Issue: Duration is 1. As a side effect, employee C still has 5 days left. Cause: At validation, requests with multpile employee create one leave per employee. Then, a resource.calendar.leave is created fro eachone, including the firstone. When creating the next request, _leave_intervals_batch looks for resource.calendar.leaves with resource_id = C or False (which means several resources), that has been taken. It finds the leaves taken by A and B, so it considers C is off too. Fix: We don't create a resource.calendar.leave for the multiple employee request. opw:2739324 closes odoo/odoo#84078 X-original-commit: 4e3af83cdd455ae6cb82439d9e260c3f9ff0b564 Signed-off-by: Kevin Baptiste --- addons/hr_holidays/models/hr_leave.py | 2 +- .../hr_holidays/tests/test_leave_requests.py | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/addons/hr_holidays/models/hr_leave.py b/addons/hr_holidays/models/hr_leave.py index a0206269bce..32c757202a2 100644 --- a/addons/hr_holidays/models/hr_leave.py +++ b/addons/hr_holidays/models/hr_leave.py @@ -1046,7 +1046,7 @@ class HolidaysRequest(models.Model): def _validate_leave_request(self): """ Validate time off requests (holiday_type='employee') by creating a calendar event and a resource time off. """ - holidays = self.filtered(lambda request: request.holiday_type == 'employee') + holidays = self.filtered(lambda request: request.holiday_type == 'employee' and request.employee_id) holidays._create_resource_leave() meeting_holidays = holidays.filtered(lambda l: l.holiday_status_id.create_calendar_meeting) if meeting_holidays: diff --git a/addons/hr_holidays/tests/test_leave_requests.py b/addons/hr_holidays/tests/test_leave_requests.py index b8979791a4a..c0cabc9ccdc 100644 --- a/addons/hr_holidays/tests/test_leave_requests.py +++ b/addons/hr_holidays/tests/test_leave_requests.py @@ -531,3 +531,34 @@ class TestLeaveRequests(TestHrHolidaysCommon): 'date_to': '2021-09-08', 'number_of_days': 3, }) + + def test_company_leaves(self): + # First expired allocation + allocation = self.env['hr.leave.allocation'].create({ + 'name': 'Allocation', + 'holiday_type': 'company', + 'mode_company_id': self.env.company.id, + 'holiday_status_id': self.holidays_type_1.id, + 'number_of_days': 20, + 'state': 'confirm', + 'date_from': '2021-01-01', + }) + allocation.action_validate() + + req1_form = Form(self.env['hr.leave'].sudo()) + req1_form.employee_ids.add(self.employee_emp) + req1_form.employee_ids.add(self.employee_hrmanager) + req1_form.holiday_status_id = self.holidays_type_1 + req1_form.request_date_from = fields.Date.to_date('2021-12-06') + req1_form.request_date_to = fields.Date.to_date('2021-12-08') + + self.assertEqual(req1_form.number_of_days, 3) + req1_form.save().action_approve() + + req2_form = Form(self.env['hr.leave'].sudo()) + req2_form.employee_ids.add(self.employee_hruser) + req2_form.holiday_status_id = self.holidays_type_1 + req2_form.request_date_from = fields.Date.to_date('2021-12-06') + req2_form.request_date_to = fields.Date.to_date('2021-12-08') + + self.assertEqual(req2_form.number_of_days, 3)