From 69e5b8100d5b89745375897a9d2014e5bf8aa3f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Mart=C3=ADnez?= Date: Wed, 4 Jan 2023 11:09:56 +0100 Subject: [PATCH 1/3] [IMP] hr_attendance_reason: Show reasons on attendance screen TT40897 --- hr_attendance_reason/README.rst | 5 + hr_attendance_reason/__manifest__.py | 13 ++- .../data/hr_attendance_reason_data.xml | 3 + hr_attendance_reason/i18n/es.po | 103 ++++++++++++++++-- .../i18n/hr_attendance_reason.pot | 87 ++++++++++++++- hr_attendance_reason/models/__init__.py | 4 + .../models/hr_attendance_reason.py | 3 + hr_attendance_reason/models/hr_employee.py | 16 +++ .../models/hr_employee_base.py | 23 ++++ hr_attendance_reason/models/res_company.py | 15 +++ .../models/res_config_settings.py | 15 +++ hr_attendance_reason/readme/CONTRIBUTORS.rst | 4 + .../static/description/index.html | 7 +- ...hr_attendance_reason_context_legacy.esm.js | 25 +++++ .../static/src/js/kiosk_confirm.esm.js | 64 +++++++++++ hr_attendance_reason/static/src/js/legacy.js | 21 ++++ .../static/src/js/my_attendances.esm.js | 58 ++++++++++ .../static/src/scss/hr_attendance_reason.scss | 7 ++ .../static/src/xml/attendance.xml | 55 ++++++++++ .../tests/test_hr_attendance_reason.py | 70 ++++++++++-- .../views/hr_attendance_reason_view.xml | 6 + .../views/res_config_settings_view.xml | 34 ++++++ 22 files changed, 613 insertions(+), 25 deletions(-) create mode 100644 hr_attendance_reason/models/hr_employee.py create mode 100644 hr_attendance_reason/models/hr_employee_base.py create mode 100644 hr_attendance_reason/models/res_company.py create mode 100644 hr_attendance_reason/models/res_config_settings.py create mode 100644 hr_attendance_reason/static/src/js/hr_attendance_reason_context_legacy.esm.js create mode 100644 hr_attendance_reason/static/src/js/kiosk_confirm.esm.js create mode 100644 hr_attendance_reason/static/src/js/legacy.js create mode 100644 hr_attendance_reason/static/src/js/my_attendances.esm.js create mode 100644 hr_attendance_reason/static/src/scss/hr_attendance_reason.scss create mode 100644 hr_attendance_reason/static/src/xml/attendance.xml create mode 100644 hr_attendance_reason/views/res_config_settings_view.xml diff --git a/hr_attendance_reason/README.rst b/hr_attendance_reason/README.rst index 1e240a0a..95fd1548 100644 --- a/hr_attendance_reason/README.rst +++ b/hr_attendance_reason/README.rst @@ -62,6 +62,7 @@ Authors ~~~~~~~ * Odoo S.A. +* Tecnativa Contributors ~~~~~~~~~~~~ @@ -73,6 +74,10 @@ Contributors * David Alonso * Juany Davila +* `Tecnativa `_: + + * Víctor Martínez + Maintainers ~~~~~~~~~~~ diff --git a/hr_attendance_reason/__manifest__.py b/hr_attendance_reason/__manifest__.py index 5767d90e..990acf8d 100644 --- a/hr_attendance_reason/__manifest__.py +++ b/hr_attendance_reason/__manifest__.py @@ -7,7 +7,7 @@ "version": "15.0.1.1.0", "category": "Human Resources", "website": "https://github.com/OCA/hr-attendance", - "author": "Odoo S.A., Odoo Community Association (OCA)", + "author": "Odoo S.A., Tecnativa, Odoo Community Association (OCA)", "license": "LGPL-3", "installable": True, "depends": ["hr_attendance"], @@ -17,5 +17,16 @@ "security/security.xml", "views/hr_attendance_reason_view.xml", "views/hr_attendance_view.xml", + "views/res_config_settings_view.xml", ], + "assets": { + "web.assets_backend": [ + "hr_attendance_reason/static/src/js/hr_attendance_reason_context_legacy.esm.js", + "hr_attendance_reason/static/src/js/legacy.js", + "hr_attendance_reason/static/src/js/my_attendances.esm.js", + "hr_attendance_reason/static/src/js/kiosk_confirm.esm.js", + "hr_attendance_reason/static/src/scss/hr_attendance_reason.scss", + ], + "web.assets_qweb": ["hr_attendance_reason/static/src/xml/**/*"], + }, } diff --git a/hr_attendance_reason/data/hr_attendance_reason_data.xml b/hr_attendance_reason/data/hr_attendance_reason_data.xml index 71f188d0..75996bb9 100644 --- a/hr_attendance_reason/data/hr_attendance_reason_data.xml +++ b/hr_attendance_reason/data/hr_attendance_reason_data.xml @@ -8,11 +8,13 @@ Felt Sick FS sign_out + Visit Customer VS sign_in + Bad Weather @@ -22,5 +24,6 @@ Public Transport Strike PTS sign_in + diff --git a/hr_attendance_reason/i18n/es.po b/hr_attendance_reason/i18n/es.po index ada99027..7a99b0b3 100644 --- a/hr_attendance_reason/i18n/es.po +++ b/hr_attendance_reason/i18n/es.po @@ -6,13 +6,14 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 11.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2023-01-24 14:45+0000\n" -"Last-Translator: Víctor Martínez \n" +"POT-Creation-Date: 2023-04-10 11:29+0000\n" +"PO-Revision-Date: 2023-04-10 13:30+0200\n" +"Last-Translator: Jaime Arroyo \n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" +"Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.14.1\n" @@ -37,6 +38,21 @@ msgstr "Motivo de alerta de asistencia" msgid "Attendance Reasons" msgstr "Motivos de alerta de asistencia" +#. module: hr_attendance_reason +#: model_terms:ir.ui.view,arch_db:hr_attendance_reason.hr_attendance_reason_view_tree +msgid "Attendance reasons" +msgstr "Motivos de alerta de asistencia" + +#. module: hr_attendance_reason +#: model:hr.attendance.reason,name:hr_attendance_reason.hr_act_reason_4 +msgid "Bad Weather" +msgstr "" + +#. module: hr_attendance_reason +#: model:ir.model,name:hr_attendance_reason.model_hr_employee_base +msgid "Basic Employee" +msgstr "Empleado Básico" + #. module: hr_attendance_reason #: model:ir.model.constraint,message:hr_attendance_reason.constraint_hr_attendance_reason_unique_code msgid "Code must be unique" @@ -45,7 +61,17 @@ msgstr "El código debe ser único" #. module: hr_attendance_reason #: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason__company_id msgid "Company" -msgstr "" +msgstr "Compañía" + +#. module: hr_attendance_reason +#: model:ir.model,name:hr_attendance_reason.model_res_company +msgid "Companies" +msgstr "Empresas" + +#. module: hr_attendance_reason +#: model:ir.model,name:hr_attendance_reason.model_res_config_settings +msgid "Config Settings" +msgstr "Ajustes de configuración" #. module: hr_attendance_reason #: model:ir.ui.menu,name:hr_attendance_reason.hr_attendance_settings_redefinition_menu @@ -69,16 +95,25 @@ msgstr "Definir un motivo de alerta de asistencia" #. module: hr_attendance_reason #: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason__display_name +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_base__display_name +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_company__display_name +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_config_settings__display_name msgid "Display Name" msgstr "Nombre a mostrar" #. module: hr_attendance_reason #: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason__id +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_base__id +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_company__id +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_config_settings__id msgid "ID" msgstr "ID" #. module: hr_attendance_reason #: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason____last_update +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_base____last_update +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_company____last_update +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_config_settings____last_update msgid "Last Modified on" msgstr "Última modificación en" @@ -98,7 +133,28 @@ msgid "Leave empty if it is independent" msgstr "Dejar vacío si es independiente" #. module: hr_attendance_reason +#: model:hr.attendance.reason,name:hr_attendance_reason.hr_act_reason_1 +msgid "Manager Manual Amend" +msgstr "" + +#. module: hr_attendance_reason +#. openerp-web +#: code:addons/hr_attendance_reason/static/src/js/kiosk_confirm.js:0 +#: code:addons/hr_attendance_reason/static/src/js/my_attendances.js:0 +#, python-format +msgid "Please, select a reason" +msgstr "Por favor, selecciona un motivo" + +#. module: hr_attendance_reason +#: model:hr.attendance.reason,name:hr_attendance_reason.hr_act_reason_5 +msgid "Public Transport Strike" +msgstr "" + +#. module: hr_attendance_reason +#. openerp-web +#: code:addons/hr_attendance_reason/static/src/xml/attendance.xml:0 #: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason__name +#, python-format msgid "Reason" msgstr "" @@ -112,6 +168,36 @@ msgstr "Código del motivo" msgid "Reasons" msgstr "Motivos" +#. module: hr_attendance_reason +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee__required_reason_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_base__required_reason_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_public__required_reason_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_company__required_reason_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_config_settings__required_reason_on_attendance_screen +#: model_terms:ir.ui.view,arch_db:hr_attendance_reason.res_config_settings_view_form +msgid "Required reason on attendance screen" +msgstr "¿Motivo obligatorio en pantalla de asistencia?" + +#. module: hr_attendance_reason +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason__sequence +msgid "Sequence" +msgstr "Secuencia" + +#. module: hr_attendance_reason +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason__show_on_attendance_screen +msgid "Show on attendance screen?" +msgstr "¿Mostrar en pantalla de asistencia?" + +#. module: hr_attendance_reason +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee__show_reasons_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_base__show_reasons_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_public__show_reasons_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_company__show_reasons_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_config_settings__show_reasons_on_attendance_screen +#: model_terms:ir.ui.view,arch_db:hr_attendance_reason.res_config_settings_view_form +msgid "Show reasons on attendance screen" +msgstr "¿Mostrar motivos en pantalla de asistencia?" + #. module: hr_attendance_reason #: model:ir.model.fields.selection,name:hr_attendance_reason.selection__hr_attendance_reason__action_type__sign_in msgid "Sign in" @@ -134,8 +220,7 @@ msgstr "Especifica la razón de entrada/salida inusual." msgid "Specifies the reason leaving soon or arriving late" msgstr "Especifica la razón por salir antes o llegar tarde" -#~ msgid "Attendance reasons" -#~ msgstr "Motivos de alerta de asistencia" - -#~ msgid "Name" -#~ msgstr "Nombre" +#. module: hr_attendance_reason +#: model:hr.attendance.reason,name:hr_attendance_reason.hr_act_reason_3 +msgid "Visit Customer" +msgstr "" diff --git a/hr_attendance_reason/i18n/hr_attendance_reason.pot b/hr_attendance_reason/i18n/hr_attendance_reason.pot index f3629740..e10b695a 100644 --- a/hr_attendance_reason/i18n/hr_attendance_reason.pot +++ b/hr_attendance_reason/i18n/hr_attendance_reason.pot @@ -6,6 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 12:36+0000\n" +"PO-Revision-Date: 2023-01-17 12:36+0000\n" "Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -34,14 +36,34 @@ msgstr "" msgid "Attendance Reasons" msgstr "" +#. module: hr_attendance_reason +#: model_terms:ir.ui.view,arch_db:hr_attendance_reason.hr_attendance_reason_view_tree +msgid "Attendance reasons" +msgstr "" + +#. module: hr_attendance_reason +#: model:hr.attendance.reason,name:hr_attendance_reason.hr_act_reason_4 +msgid "Bad Weather" +msgstr "" + +#. module: hr_attendance_reason +#: model:ir.model,name:hr_attendance_reason.model_hr_employee_base +msgid "Basic Employee" +msgstr "" + #. module: hr_attendance_reason #: model:ir.model.constraint,message:hr_attendance_reason.constraint_hr_attendance_reason_unique_code msgid "Code must be unique" msgstr "" #. module: hr_attendance_reason -#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason__company_id -msgid "Company" +#: model:ir.model,name:hr_attendance_reason.model_res_company +msgid "Companies" +msgstr "" + +#. module: hr_attendance_reason +#: model:ir.model,name:hr_attendance_reason.model_res_config_settings +msgid "Config Settings" msgstr "" #. module: hr_attendance_reason @@ -66,16 +88,25 @@ msgstr "" #. module: hr_attendance_reason #: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason__display_name +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_base__display_name +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_company__display_name +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_config_settings__display_name msgid "Display Name" msgstr "" #. module: hr_attendance_reason #: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason__id +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_base__id +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_company__id +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_config_settings__id msgid "ID" msgstr "" #. module: hr_attendance_reason #: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason____last_update +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_base____last_update +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_company____last_update +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_config_settings____last_update msgid "Last Modified on" msgstr "" @@ -95,7 +126,29 @@ msgid "Leave empty if it is independent" msgstr "" #. module: hr_attendance_reason +#: model:hr.attendance.reason,name:hr_attendance_reason.hr_act_reason_1 +msgid "Manager Manual Amend" +msgstr "" + +#. module: hr_attendance_reason +#. openerp-web +#: code:addons/hr_attendance_reason/static/src/js/kiosk_confirm.js:0 +#: code:addons/hr_attendance_reason/static/src/js/my_attendances.js:0 +#, python-format +msgid "Please, select a reason" +msgstr "" + +#. module: hr_attendance_reason +#: model:hr.attendance.reason,name:hr_attendance_reason.hr_act_reason_5 +msgid "Public Transport Strike" +msgstr "" + +#. module: hr_attendance_reason +#. openerp-web +#: code:addons/hr_attendance_reason/static/src/xml/attendance.xml:0 +#: code:addons/hr_attendance_reason/static/src/xml/attendance.xml:0 #: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason__name +#, python-format msgid "Reason" msgstr "" @@ -109,6 +162,36 @@ msgstr "" msgid "Reasons" msgstr "" +#. module: hr_attendance_reason +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee__required_reason_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_base__required_reason_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_public__required_reason_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_company__required_reason_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_config_settings__required_reason_on_attendance_screen +#: model_terms:ir.ui.view,arch_db:hr_attendance_reason.res_config_settings_view_form +msgid "Required reason on attendance screen" +msgstr "" + +#. module: hr_attendance_reason +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason__sequence +msgid "Sequence" +msgstr "" + +#. module: hr_attendance_reason +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_attendance_reason__show_on_attendance_screen +msgid "Show on attendance screen?" +msgstr "" + +#. module: hr_attendance_reason +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee__show_reasons_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_base__show_reasons_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_hr_employee_public__show_reasons_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_company__show_reasons_on_attendance_screen +#: model:ir.model.fields,field_description:hr_attendance_reason.field_res_config_settings__show_reasons_on_attendance_screen +#: model_terms:ir.ui.view,arch_db:hr_attendance_reason.res_config_settings_view_form +msgid "Show reasons on attendance screen" +msgstr "" + #. module: hr_attendance_reason #: model:ir.model.fields.selection,name:hr_attendance_reason.selection__hr_attendance_reason__action_type__sign_in msgid "Sign in" diff --git a/hr_attendance_reason/models/__init__.py b/hr_attendance_reason/models/__init__.py index a97a0826..7f512eb5 100644 --- a/hr_attendance_reason/models/__init__.py +++ b/hr_attendance_reason/models/__init__.py @@ -1,2 +1,6 @@ from . import hr_attendance_reason from . import hr_attendance +from . import hr_employee +from . import hr_employee_base +from . import res_company +from . import res_config_settings diff --git a/hr_attendance_reason/models/hr_attendance_reason.py b/hr_attendance_reason/models/hr_attendance_reason.py index 9cab20dc..35b135df 100644 --- a/hr_attendance_reason/models/hr_attendance_reason.py +++ b/hr_attendance_reason/models/hr_attendance_reason.py @@ -8,9 +8,11 @@ class HrAttendanceReason(models.Model): _name = "hr.attendance.reason" _description = "Attendance Reason" + _order = "sequence,id" _sql_constraints = [("unique_code", "UNIQUE(code)", "Code must be unique")] + sequence = fields.Integer() company_id = fields.Many2one( comodel_name="res.company", string="Company", @@ -26,3 +28,4 @@ class HrAttendanceReason(models.Model): [("sign_in", "Sign in"), ("sign_out", "Sign out")], help="Leave empty if it is independent", ) + show_on_attendance_screen = fields.Boolean(string="Show on attendance screen?") diff --git a/hr_attendance_reason/models/hr_employee.py b/hr_attendance_reason/models/hr_employee.py new file mode 100644 index 00000000..31bf275a --- /dev/null +++ b/hr_attendance_reason/models/hr_employee.py @@ -0,0 +1,16 @@ +# Copyright 2023 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import models + + +class HrEmployee(models.Model): + _inherit = "hr.employee" + + def _attendance_action_change(self): + attendance = super()._attendance_action_change() + if self.env.context.get("attendance_reason_id"): + attendance.attendance_reason_ids = [ + (4, self.env.context.get("attendance_reason_id")) + ] + return attendance diff --git a/hr_attendance_reason/models/hr_employee_base.py b/hr_attendance_reason/models/hr_employee_base.py new file mode 100644 index 00000000..98d54185 --- /dev/null +++ b/hr_attendance_reason/models/hr_employee_base.py @@ -0,0 +1,23 @@ +# Copyright 2023 Tecnativa - Víctor Martínez +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class HrEmployeeBase(models.AbstractModel): + _inherit = "hr.employee.base" + + show_reasons_on_attendance_screen = fields.Boolean( + related="company_id.show_reasons_on_attendance_screen", store=True + ) + required_reason_on_attendance_screen = fields.Boolean( + related="company_id.required_reason_on_attendance_screen", store=True + ) + + @api.model + def search_read(self, domain=None, fields=None, offset=0, limit=None, order=None): + fields = fields or [] + fields += self.env.context.get("extra_fields", []) + return super().search_read( + domain=domain, fields=fields, offset=offset, limit=limit, order=order + ) diff --git a/hr_attendance_reason/models/res_company.py b/hr_attendance_reason/models/res_company.py new file mode 100644 index 00000000..a01dbf1e --- /dev/null +++ b/hr_attendance_reason/models/res_company.py @@ -0,0 +1,15 @@ +# Copyright 2023 Tecnativa - Víctor Martínez +# License LGPL-3 - See http://www.gnu.org/licenses/lgpl-3.0.html + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + show_reasons_on_attendance_screen = fields.Boolean( + string="Show reasons on attendance screen" + ) + required_reason_on_attendance_screen = fields.Boolean( + string="Required reason on attendance screen" + ) diff --git a/hr_attendance_reason/models/res_config_settings.py b/hr_attendance_reason/models/res_config_settings.py new file mode 100644 index 00000000..91dc2b81 --- /dev/null +++ b/hr_attendance_reason/models/res_config_settings.py @@ -0,0 +1,15 @@ +# Copyright 2023 Tecnativa - Víctor Martínez +# License LGPL-3 - See http://www.gnu.org/licenses/lgpl-3.0.html + +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + show_reasons_on_attendance_screen = fields.Boolean( + related="company_id.show_reasons_on_attendance_screen", readonly=False + ) + required_reason_on_attendance_screen = fields.Boolean( + related="company_id.required_reason_on_attendance_screen", readonly=False + ) diff --git a/hr_attendance_reason/readme/CONTRIBUTORS.rst b/hr_attendance_reason/readme/CONTRIBUTORS.rst index 42619052..37142d3e 100644 --- a/hr_attendance_reason/readme/CONTRIBUTORS.rst +++ b/hr_attendance_reason/readme/CONTRIBUTORS.rst @@ -4,3 +4,7 @@ * Saran Lim. * David Alonso * Juany Davila + +* `Tecnativa `_: + + * Víctor Martínez diff --git a/hr_attendance_reason/static/description/index.html b/hr_attendance_reason/static/description/index.html index a078b141..b07d7158 100644 --- a/hr_attendance_reason/static/description/index.html +++ b/hr_attendance_reason/static/description/index.html @@ -3,7 +3,7 @@ - + HR Attendance Reason