From d2291a4f908ea69451bd854986655af8191e9136 Mon Sep 17 00:00:00 2001 From: Yannick Tivisse Date: Wed, 10 Aug 2022 13:35:36 +0000 Subject: [PATCH] [FIX] hr_work_entry_holidays: Fix work entry generation on company time off closes odoo/odoo#98058 X-original-commit: 6fd3c6640c3bb15ce181b14119aec7c2d851cf1d Signed-off-by: Yannick Tivisse (yti) --- .../hr_work_entry_holidays/models/hr_leave.py | 5 +-- .../tests/test_leave.py | 36 +++++++++++++++++-- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/addons/hr_work_entry_holidays/models/hr_leave.py b/addons/hr_work_entry_holidays/models/hr_leave.py index 39e562d57f7..c41bb3309df 100644 --- a/addons/hr_work_entry_holidays/models/hr_leave.py +++ b/addons/hr_work_entry_holidays/models/hr_leave.py @@ -9,6 +9,7 @@ from odoo.exceptions import ValidationError from odoo.osv.expression import AND from odoo.tools import format_date + class HrLeaveType(models.Model): _inherit = 'hr.leave.type' @@ -190,8 +191,8 @@ Contracts: return super()._get_leaves_on_public_holiday().filtered( lambda l: l.holiday_status_id.work_entry_type_id.code not in ['LEAVE110', 'LEAVE280']) - def action_validate(self): - super(HrLeave, self).action_validate() + def _validate_leave_request(self): + super(HrLeave, self)._validate_leave_request() self.sudo()._cancel_work_entry_conflict() # delete preexisting conflicting work_entries return True diff --git a/addons/hr_work_entry_holidays/tests/test_leave.py b/addons/hr_work_entry_holidays/tests/test_leave.py index 7a3eba9967e..e22ea53491a 100644 --- a/addons/hr_work_entry_holidays/tests/test_leave.py +++ b/addons/hr_work_entry_holidays/tests/test_leave.py @@ -1,15 +1,16 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from datetime import datetime +from datetime import datetime, date from dateutil.relativedelta import relativedelta from freezegun import freeze_time from odoo import SUPERUSER_ID from odoo.addons.hr_work_entry_holidays.tests.common import TestWorkEntryHolidaysBase +from odoo.tests import tagged - +@tagged('test_leave') class TestWorkEntryLeave(TestWorkEntryHolidaysBase): def test_resource_leave_has_work_entry_type(self): @@ -171,3 +172,34 @@ class TestWorkEntryLeave(TestWorkEntryHolidaysBase): leave.invalidate_recordset(['can_cancel']) # Work entries locked self.assertFalse(leave.can_cancel, "The leave should not be cancellable") + + def test_work_entry_generation_company_time_off(self): + existing_leaves = self.env['hr.leave'].search([]) + existing_leaves.action_refuse() + existing_leaves.action_draft() + existing_leaves.unlink() + start = date(2022, 8, 1) + end = date(2022, 8, 31) + self.contract_cdi._generate_work_entries(start, end) + work_entries = self.env['hr.work.entry'].search([ + ('employee_id', '=', self.jules_emp.id), + ('date_start', '>=', start), + ('date_stop', '<=', end), + ]) + self.assertEqual(len(work_entries.work_entry_type_id), 1) + leave = self.env['hr.leave'].create({ + 'name': 'Holiday !!!', + 'holiday_type': 'company', + 'mode_company_id': self.env.company.id, + 'holiday_status_id': self.leave_type.id, + 'date_from': datetime(2022, 8, 8, 9, 0), + 'date_to': datetime(2022, 8, 8, 18, 0), + 'number_of_days': 1, + }) + leave.action_validate() + work_entries = self.env['hr.work.entry'].search([ + ('employee_id', '=', self.jules_emp.id), + ('date_start', '>=', start), + ('date_stop', '<=', end), + ]) + self.assertEqual(len(work_entries.work_entry_type_id), 2)