From 205cbe3fc599c50457834585132414b35eed54b1 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 18 Oct 2023 19:23:15 +0200 Subject: [PATCH] [ADD] #10 allow resetting future leaves for employees, all leaves for managers. --- verdigado_attendance/__manifest__.py | 1 + verdigado_attendance/models/__init__.py | 1 + verdigado_attendance/models/hr_leave.py | 33 +++++++++++++++++++++++++ verdigado_attendance/views/hr_leave.xml | 15 +++++++++++ 4 files changed, 50 insertions(+) create mode 100644 verdigado_attendance/models/hr_leave.py create mode 100644 verdigado_attendance/views/hr_leave.xml diff --git a/verdigado_attendance/__manifest__.py b/verdigado_attendance/__manifest__.py index 4329d78..62433c3 100644 --- a/verdigado_attendance/__manifest__.py +++ b/verdigado_attendance/__manifest__.py @@ -26,6 +26,7 @@ "views/hr_attendance_view.xml", "views/hr_attendance_report.xml", "views/hr_leave_type.xml", + "views/hr_leave.xml", "views/hr_menu_human_resources_configuration.xml", "views/menu.xml", ], diff --git a/verdigado_attendance/models/__init__.py b/verdigado_attendance/models/__init__.py index 05b9076..00bf257 100644 --- a/verdigado_attendance/models/__init__.py +++ b/verdigado_attendance/models/__init__.py @@ -4,4 +4,5 @@ from . import hr_attendance_break from . import hr_attendance_overtime from . import hr_attendance_report +from . import hr_leave from . import hr_leave_type diff --git a/verdigado_attendance/models/hr_leave.py b/verdigado_attendance/models/hr_leave.py new file mode 100644 index 0000000..0957b1b --- /dev/null +++ b/verdigado_attendance/models/hr_leave.py @@ -0,0 +1,33 @@ +# Copyright 2023 Hunki Enterprises BV +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class HrLeave(models.Model): + _inherit = "hr.leave" + + def _check_approval_update(self, state): + """Always allow to reset to draft for future leaves""" + if state == "draft": + self = self.filtered( + lambda x: not x.date_from + or x.date_from.date() <= fields.Date.today() + and self.env.user.employee_id + not in (x.manager_id | x.employee_id.leave_manager_id.employee_id) + ) + return super(HrLeave, self)._check_approval_update(state) + + def action_draft(self): + """Allow setting to draft from any state""" + # manipulate cache to make records look like being in state 'confirm' as + # super only allows it for this and 'refuse' + self.read([]) + for this in self: + this._cache["state"] = "confirm" + return super().action_draft() + + def unlink(self): + """Reset to draft before unlink to clean up dependent objects""" + self.action_draft() + return super().unlink() diff --git a/verdigado_attendance/views/hr_leave.xml b/verdigado_attendance/views/hr_leave.xml new file mode 100644 index 0000000..e301d31 --- /dev/null +++ b/verdigado_attendance/views/hr_leave.xml @@ -0,0 +1,15 @@ + + + + + hr.leave + + + + +