diff --git a/addons/hr_holidays_attendance/models/hr_leave.py b/addons/hr_holidays_attendance/models/hr_leave.py index ace82ae56c6..6468917212a 100644 --- a/addons/hr_holidays_attendance/models/hr_leave.py +++ b/addons/hr_holidays_attendance/models/hr_leave.py @@ -105,3 +105,7 @@ class HRLeave(models.Model): # TODO master change to ondelete self.sudo().overtime_id.unlink() return super().unlink() + + def _force_cancel(self, *args, **kwargs): + super()._force_cancel(*args, **kwargs) + self.sudo().overtime_id.unlink() diff --git a/addons/hr_holidays_attendance/static/src/xml/time_off_calendar.xml b/addons/hr_holidays_attendance/static/src/xml/time_off_calendar.xml index 93ae859d66a..6296e428f9c 100644 --- a/addons/hr_holidays_attendance/static/src/xml/time_off_calendar.xml +++ b/addons/hr_holidays_attendance/static/src/xml/time_off_calendar.xml @@ -8,6 +8,9 @@ + + props.data.request_unit == 'hour' || props.data['overtime_deductible'] + props.requires_allocation || props.data['overtime_deductible'] diff --git a/addons/hr_holidays_attendance/tests/test_holidays_overtime.py b/addons/hr_holidays_attendance/tests/test_holidays_overtime.py index 1cd68613bac..e3a3e02edc1 100644 --- a/addons/hr_holidays_attendance/tests/test_holidays_overtime.py +++ b/addons/hr_holidays_attendance/tests/test_holidays_overtime.py @@ -6,6 +6,8 @@ from odoo.tests import new_test_user from odoo.tests.common import TransactionCase, tagged from odoo.exceptions import AccessError, ValidationError + +from freezegun import freeze_time import time @tagged('post_install', '-at_install', 'holidays_attendance') @@ -226,3 +228,26 @@ class TestHolidaysOvertime(TransactionCase): alloc.number_of_days = 2 self.assertEqual(self.employee.total_overtime, 0) + + @freeze_time('2022-1-1') + def test_leave_check_cancel(self): + self.new_attendance(check_in=datetime(2021, 1, 2, 8), check_out=datetime(2021, 1, 2, 16)) + self.new_attendance(check_in=datetime(2021, 1, 3, 8), check_out=datetime(2021, 1, 3, 16)) + self.assertEqual(self.employee.total_overtime, 16) + + leave = self.env['hr.leave'].create({ + 'name': 'no overtime', + 'employee_id': self.employee.id, + 'holiday_status_id': self.leave_type_no_alloc.id, + 'number_of_days': 1, + 'date_from': datetime(2022, 1, 6), + 'date_to': datetime(2022, 1, 6), + }) + leave.with_user(self.user_manager).action_validate() + self.assertEqual(self.employee.total_overtime, 8) + + self.assertTrue(leave.with_user(self.user).can_cancel) + self.env['hr.holidays.cancel.leave'].with_user(self.user).with_context(default_leave_id=leave.id) \ + .new({'reason': 'Test remove holiday'}) \ + .action_cancel_leave() + self.assertFalse(leave.overtime_id.exists()) diff --git a/addons/hr_holidays_attendance/views/hr_leave_views.xml b/addons/hr_holidays_attendance/views/hr_leave_views.xml index 46b31a3dc2b..3b970a9850e 100644 --- a/addons/hr_holidays_attendance/views/hr_leave_views.xml +++ b/addons/hr_holidays_attendance/views/hr_leave_views.xml @@ -8,7 +8,21 @@
- Extra Hours Available + Extra Hours Available +
+ +
+ + + + hr.leave + + + + + +
+ Extra Hours Available