diff --git a/hr_attendance_validation/README.rst b/hr_attendance_validation/README.rst index e9c4e3b09..d3c46fcff 100644 --- a/hr_attendance_validation/README.rst +++ b/hr_attendance_validation/README.rst @@ -7,7 +7,7 @@ Hr Attendance Validation !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:1996ce653eae83ec08b80a71833cd66791b5940ba7b519e5b523c94b05be5cc7 + !! source digest: sha256:2e79147e731da1ca237d66ae8153a50ebcf15571fb74a0bf7b554bfec0d9949c !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -66,6 +66,9 @@ Configuration * Ensure employee weeks are properly set * Set the leave type to use by generating compensatory hours from attendance review (to be done in hr attendance configuration) +* You can ignore some leaves in validation sheet by ticking the "Ignored in attendance validation" + (for instance it can be useful if you manage employee remote days using hr.leave + in such case you want to ignore those lines) * once all leaves and attendances has been recorded you can generate leave reviews by setting up a cron job running every monday morning to generate the previous week with the following code on `hr.attendance.validation.sheet` model:: diff --git a/hr_attendance_validation/__manifest__.py b/hr_attendance_validation/__manifest__.py index 85e49ffe8..f6cbecfef 100644 --- a/hr_attendance_validation/__manifest__.py +++ b/hr_attendance_validation/__manifest__.py @@ -21,6 +21,7 @@ "views/hr_attendance_validation.xml", "views/hr_attendance.xml", "views/res_config_settings_views.xml", + "views/hr_leave_type.xml", "security/ir.model.access.csv", "security/ir.rule.xml", "data/ir_cron.xml", diff --git a/hr_attendance_validation/i18n/fr.po b/hr_attendance_validation/i18n/fr.po index 7dc8a3551..d10412148 100644 --- a/hr_attendance_validation/i18n/fr.po +++ b/hr_attendance_validation/i18n/fr.po @@ -245,6 +245,7 @@ msgstr "Calendrier de l'employé." #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_attendance_validation_sheet__display_name #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_employee_base__display_name #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave__display_name +#: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave_type__display_name #: model:ir.model.fields,field_description:hr_attendance_validation.field_res_config_settings__display_name #: model:ir.model.fields,field_description:hr_attendance_validation.field_resource_calendar__display_name msgid "Display Name" @@ -280,11 +281,17 @@ msgstr "Heures effectuées cette semaine" #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_attendance_validation_sheet__id #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_employee_base__id #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave__id +#: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave_type__id #: model:ir.model.fields,field_description:hr_attendance_validation.field_res_config_settings__id #: model:ir.model.fields,field_description:hr_attendance_validation.field_resource_calendar__id msgid "ID" msgstr "" +#. module: hr_attendance_validation +#: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave_type__ignored_in_attendance_validation +msgid "Ignored In Attendance Validation" +msgstr "Ignoré dans les feuilles de revue de présences" + #. module: hr_attendance_validation #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_attendance__is_overtime_due msgid "Is overtime due" @@ -295,6 +302,7 @@ msgstr "Heure suplémentaire due" #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_attendance_validation_sheet____last_update #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_employee_base____last_update #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave____last_update +#: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave_type____last_update #: model:ir.model.fields,field_description:hr_attendance_validation.field_res_config_settings____last_update #: model:ir.model.fields,field_description:hr_attendance_validation.field_resource_calendar____last_update msgid "Last Modified on" @@ -440,6 +448,11 @@ msgstr "" msgid "Time Off" msgstr "Congés" +#. module: hr_attendance_validation +#: model:ir.model,name:hr_attendance_validation.model_hr_leave_type +msgid "Time Off Type" +msgstr "Type de congés" + #. module: hr_attendance_validation #: model:ir.model.fields.selection,name:hr_attendance_validation.selection__hr_attendance_validation_sheet__state__draft #: model_terms:ir.ui.view,arch_db:hr_attendance_validation.hr_attendance_validation_sheet_view_form @@ -528,6 +541,3 @@ msgid "" msgstr "" "Vous avez modifié un paramètre nécessitant de relancer la récupération des " "lignes de présence et congés." - -#~ msgid "Attendance validation sheets" -#~ msgstr "Revue des présences" diff --git a/hr_attendance_validation/i18n/hr_attendance_validation.pot b/hr_attendance_validation/i18n/hr_attendance_validation.pot index 2ed3dcdc8..0a688185f 100644 --- a/hr_attendance_validation/i18n/hr_attendance_validation.pot +++ b/hr_attendance_validation/i18n/hr_attendance_validation.pot @@ -224,6 +224,7 @@ msgstr "" #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_attendance_validation_sheet__display_name #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_employee_base__display_name #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave__display_name +#: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave_type__display_name #: model:ir.model.fields,field_description:hr_attendance_validation.field_res_config_settings__display_name #: model:ir.model.fields,field_description:hr_attendance_validation.field_resource_calendar__display_name msgid "Display Name" @@ -259,11 +260,17 @@ msgstr "" #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_attendance_validation_sheet__id #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_employee_base__id #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave__id +#: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave_type__id #: model:ir.model.fields,field_description:hr_attendance_validation.field_res_config_settings__id #: model:ir.model.fields,field_description:hr_attendance_validation.field_resource_calendar__id msgid "ID" msgstr "" +#. module: hr_attendance_validation +#: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave_type__ignored_in_attendance_validation +msgid "Ignored In Attendance Validation" +msgstr "" + #. module: hr_attendance_validation #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_attendance__is_overtime_due msgid "Is overtime due" @@ -274,6 +281,7 @@ msgstr "" #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_attendance_validation_sheet____last_update #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_employee_base____last_update #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave____last_update +#: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave_type____last_update #: model:ir.model.fields,field_description:hr_attendance_validation.field_res_config_settings____last_update #: model:ir.model.fields,field_description:hr_attendance_validation.field_resource_calendar____last_update msgid "Last Modified on" @@ -416,6 +424,11 @@ msgstr "" msgid "Time Off" msgstr "" +#. module: hr_attendance_validation +#: model:ir.model,name:hr_attendance_validation.model_hr_leave_type +msgid "Time Off Type" +msgstr "" + #. module: hr_attendance_validation #: model:ir.model.fields.selection,name:hr_attendance_validation.selection__hr_attendance_validation_sheet__state__draft #: model_terms:ir.ui.view,arch_db:hr_attendance_validation.hr_attendance_validation_sheet_view_form diff --git a/hr_attendance_validation/i18n/it.po b/hr_attendance_validation/i18n/it.po index 4967369e6..30aec5180 100644 --- a/hr_attendance_validation/i18n/it.po +++ b/hr_attendance_validation/i18n/it.po @@ -245,6 +245,7 @@ msgstr "Definire la schedulazione della risorsa" #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_attendance_validation_sheet__display_name #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_employee_base__display_name #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave__display_name +#: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave_type__display_name #: model:ir.model.fields,field_description:hr_attendance_validation.field_res_config_settings__display_name #: model:ir.model.fields,field_description:hr_attendance_validation.field_resource_calendar__display_name msgid "Display Name" @@ -280,11 +281,17 @@ msgstr "Ore settimana corrente" #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_attendance_validation_sheet__id #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_employee_base__id #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave__id +#: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave_type__id #: model:ir.model.fields,field_description:hr_attendance_validation.field_res_config_settings__id #: model:ir.model.fields,field_description:hr_attendance_validation.field_resource_calendar__id msgid "ID" msgstr "ID" +#. module: hr_attendance_validation +#: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave_type__ignored_in_attendance_validation +msgid "Ignored In Attendance Validation" +msgstr "" + #. module: hr_attendance_validation #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_attendance__is_overtime_due msgid "Is overtime due" @@ -295,6 +302,7 @@ msgstr "Straordinario dovuto" #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_attendance_validation_sheet____last_update #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_employee_base____last_update #: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave____last_update +#: model:ir.model.fields,field_description:hr_attendance_validation.field_hr_leave_type____last_update #: model:ir.model.fields,field_description:hr_attendance_validation.field_res_config_settings____last_update #: model:ir.model.fields,field_description:hr_attendance_validation.field_resource_calendar____last_update msgid "Last Modified on" @@ -439,6 +447,11 @@ msgstr "" msgid "Time Off" msgstr "Ferie" +#. module: hr_attendance_validation +#: model:ir.model,name:hr_attendance_validation.model_hr_leave_type +msgid "Time Off Type" +msgstr "" + #. module: hr_attendance_validation #: model:ir.model.fields.selection,name:hr_attendance_validation.selection__hr_attendance_validation_sheet__state__draft #: model_terms:ir.ui.view,arch_db:hr_attendance_validation.hr_attendance_validation_sheet_view_form @@ -523,6 +536,3 @@ msgid "" msgstr "" "È cambiato il dipendente e/o data: bisogna recuperare le presenze e\n" " permessi per queste nuove impostazioni." - -#~ msgid "Attendance validation sheets" -#~ msgstr "Prospetti validazione presenza" diff --git a/hr_attendance_validation/models/__init__.py b/hr_attendance_validation/models/__init__.py index 15783df23..b059e2911 100644 --- a/hr_attendance_validation/models/__init__.py +++ b/hr_attendance_validation/models/__init__.py @@ -1,5 +1,6 @@ from . import hr_attendance from . import hr_leave +from . import hr_leave_type from . import hr_attendance_validation_sheet from . import hr_employee from . import resource_calendar diff --git a/hr_attendance_validation/models/hr_attendance_validation_sheet.py b/hr_attendance_validation/models/hr_attendance_validation_sheet.py index da8f4c82d..40085e204 100644 --- a/hr_attendance_validation/models/hr_attendance_validation_sheet.py +++ b/hr_attendance_validation/models/hr_attendance_validation_sheet.py @@ -213,6 +213,11 @@ def _retrieve_leave(self): [ ("state", "in", ["validate", "validate1"]), ("employee_id", "=", record.employee_id.id), + ( + "holiday_status_id.ignored_in_attendance_validation", + "=", + False, + ), ], expression.OR( [ diff --git a/hr_attendance_validation/models/hr_leave_type.py b/hr_attendance_validation/models/hr_leave_type.py new file mode 100644 index 000000000..ca426b432 --- /dev/null +++ b/hr_attendance_validation/models/hr_leave_type.py @@ -0,0 +1,9 @@ +# Copyright 2023 Pierre Verkest +# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html +from odoo import fields, models + + +class HrLeaveType(models.Model): + _inherit = "hr.leave.type" + + ignored_in_attendance_validation = fields.Boolean() diff --git a/hr_attendance_validation/readme/CONFIGURE.rst b/hr_attendance_validation/readme/CONFIGURE.rst index 999e8f2a4..a21b9b10c 100644 --- a/hr_attendance_validation/readme/CONFIGURE.rst +++ b/hr_attendance_validation/readme/CONFIGURE.rst @@ -1,6 +1,9 @@ * Ensure employee weeks are properly set * Set the leave type to use by generating compensatory hours from attendance review (to be done in hr attendance configuration) +* You can ignore some leaves in validation sheet by ticking the "Ignored in attendance validation" + (for instance it can be useful if you manage employee remote days using hr.leave + in such case you want to ignore those lines) * once all leaves and attendances has been recorded you can generate leave reviews by setting up a cron job running every monday morning to generate the previous week with the following code on `hr.attendance.validation.sheet` model:: diff --git a/hr_attendance_validation/static/description/index.html b/hr_attendance_validation/static/description/index.html index bf6286ebd..492ad8e41 100644 --- a/hr_attendance_validation/static/description/index.html +++ b/hr_attendance_validation/static/description/index.html @@ -367,7 +367,7 @@
This add a validation mechanism to review employee attendance @@ -415,6 +415,10 @@
Set the leave type to use by generating compensatory hours from attendance review (to be done in hr attendance configuration)
You can ignore some leaves in validation sheet by ticking the “Ignored in attendance validation” +(for instance it can be useful if you manage employee remote days using hr.leave +in such case you want to ignore those lines)
+once all leaves and attendances has been recorded you can generate leave reviews by setting up a cron job running every monday morning to generate the previous week with the following code on hr.attendance.validation.sheet model:
diff --git a/hr_attendance_validation/tests/test_hr_attendance_validation.py b/hr_attendance_validation/tests/test_hr_attendance_validation.py index e2db186ed..039c31e53 100644 --- a/hr_attendance_validation/tests/test_hr_attendance_validation.py +++ b/hr_attendance_validation/tests/test_hr_attendance_validation.py @@ -91,6 +91,29 @@ def setup_employee_holidays(self): ) self.empl_leave_comp.action_validate() + def setup_employee_remote_days(self): + self.env["hr.leave.allocation"].create( + { + "employee_id": self.employee.id, + "holiday_status_id": self.leave_remote.id, + "number_of_days": 5, + "holiday_type": "employee", + "state": "validate", + "name": "5 days - Remote days", + } + ) + self.empl_remote = self.env["hr.leave"].create( + { + "employee_id": self.employee.id, + "holiday_status_id": self.leave_remote.id, + # overlap two weeks + "request_date_from": "2021-12-09", + "request_date_to": "2021-12-10", + "number_of_days": 1, + } + ) + self.empl_remote.action_validate() + def setup_employee_attendances(self): self.env["hr.attendance"].create( [ @@ -149,9 +172,22 @@ def setUp(self): self.HrAttendanceValidation = self.env["hr.attendance.validation.sheet"] self.leave_cl = self.env.ref("hr_holidays.holiday_status_cl") self.leave_comp = self.env.ref("hr_holidays.holiday_status_comp") + self.leave_remote = self.env["hr.leave.type"].create( + { + "name": "Remote test", + "code": "REM1", + "request_unit": "half_day", + "color_name": "blue", + "allocation_type": "fixed", + "leave_validation_type": "no_validation", + "create_calendar_meeting": True, + "ignored_in_attendance_validation": True, + } + ) self.setup_employee() self.setup_employee_allocation() self.setup_employee_holidays() + self.setup_employee_remote_days() self.setup_employee_attendances() def test_name_get_missing_employee(self): diff --git a/hr_attendance_validation/views/hr_leave_type.xml b/hr_attendance_validation/views/hr_leave_type.xml new file mode 100644 index 000000000..ae8c45529 --- /dev/null +++ b/hr_attendance_validation/views/hr_leave_type.xml @@ -0,0 +1,19 @@ + + +