diff --git a/hr_holidays_credit/README.rst b/hr_holidays_credit/README.rst new file mode 100644 index 00000000..fe3cefc2 --- /dev/null +++ b/hr_holidays_credit/README.rst @@ -0,0 +1,84 @@ +============ +Leave Credit +============ + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:938aee0bf51e9b55127b2f4f5981ae659ebde9ab8d55a1af3b0463f1e28e4bd4 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fhr--holidays-lightgray.png?logo=github + :target: https://github.com/OCA/hr-holidays/tree/16.0/hr_holidays_credit + :alt: OCA/hr-holidays +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/hr-holidays-16-0/hr-holidays-16-0-hr_holidays_credit + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/hr-holidays&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +With this module installed, HR Officer can configure specific leave types to +allow negative balance, or allow employees take leave credit. + +**Table of contents** + +.. contents:: + :local: + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* CorporateHub + +Contributors +~~~~~~~~~~~~ + +* `CorporateHub `__ + + * Alexey Pelykh + +* `Ecosoft `__ + + * Watcharaporn Charamrum + * Tharathip Chaweewongphan + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/hr-holidays `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/hr_holidays_credit/__init__.py b/hr_holidays_credit/__init__.py new file mode 100644 index 00000000..4b76c7b2 --- /dev/null +++ b/hr_holidays_credit/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/hr_holidays_credit/__manifest__.py b/hr_holidays_credit/__manifest__.py new file mode 100644 index 00000000..c41b23d3 --- /dev/null +++ b/hr_holidays_credit/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright (C) 2018 Brainbean Apps (https://brainbeanapps.com) +# Copyright 2020 CorporateHub (https://corporatehub.eu) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +{ + "name": "Leave Credit", + "version": "16.0.1.0.0", + "category": "Human Resources", + "website": "https://github.com/OCA/hr-holidays", + "author": "CorporateHub, Odoo Community Association (OCA)", + "license": "AGPL-3", + "installable": True, + "application": False, + "summary": "Enable negative leave balance for employees", + "depends": ["hr_holidays"], + "data": [ + "views/hr_leave_type.xml", + "views/hr_leave_views.xml", + ], +} diff --git a/hr_holidays_credit/i18n/es.po b/hr_holidays_credit/i18n/es.po new file mode 100644 index 00000000..75cfca0b --- /dev/null +++ b/hr_holidays_credit/i18n/es.po @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_holidays_credit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-03-19 08:36+0000\n" +"Last-Translator: Ivorra78 \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" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: hr_holidays_credit +#. odoo-python +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid " + credit" +msgstr " + crédito" + +#. module: hr_holidays_credit +#. odoo-python +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid " available" +msgstr " disponibles" + +#. module: hr_holidays_credit +#. odoo-python +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid " days" +msgstr " días" + +#. module: hr_holidays_credit +#. odoo-python +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid " hours" +msgstr " horas" + +#. module: hr_holidays_credit +#. odoo-python +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid " used in credit" +msgstr " utilizados en crédito" + +#. module: hr_holidays_credit +#. odoo-python +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%(name)s (%(extra)s)" +msgstr "%(name)s (%(extra)s)" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__allow_credit +msgid "Allow Credit" +msgstr "Permitir Crédito" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_department_ids +msgid "Creditable Departments" +msgstr "Departamentos Acreditables" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_employee_category_ids +msgid "Creditable Employee Tags" +msgstr "Etiquetas de Empleado Acreditable" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_employee_ids +msgid "Creditable Employees" +msgstr "Empleados Acreditados" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__allow_credit +msgid "" +"If set to true, employees would be able to make requests for this leave type" +" even if allocated amount is insufficient." +msgstr "" +"Si se establece en true, los empleados podrán solicitar este tipo de permiso" +" aunque la cantidad asignada sea insuficiente." + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_department_ids +msgid "If set, limits credit allowance to employees of specified departments" +msgstr "" +"Si se establece, limita la concesión de créditos a los empleados de " +"determinados departamentos" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_employee_category_ids +msgid "" +"If set, limits credit allowance to employees with at least one of specified " +"tags" +msgstr "" +"Si se establece, limita la concesión de créditos a los empleados que tengan " +"al menos una de las etiquetas especificadas" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_employee_ids +msgid "If set, limits credit allowance to specified employees" +msgstr "Si se fija, limita la concesión de créditos a determinados empleados" + +#. module: hr_holidays_credit +#: model:ir.model,name:hr_holidays_credit.model_hr_leave +msgid "Time Off" +msgstr "Tiempo Libre" + +#. module: hr_holidays_credit +#: model:ir.model,name:hr_holidays_credit.model_hr_leave_allocation +msgid "Time Off Allocation" +msgstr "Asignación de ausencias" + +#. module: hr_holidays_credit +#: model:ir.model,name:hr_holidays_credit.model_hr_leave_type +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave__holiday_status_id +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_allocation__holiday_status_id +msgid "Time Off Type" +msgstr "Tipo de Tiempo Libre" diff --git a/hr_holidays_credit/i18n/fr.po b/hr_holidays_credit/i18n/fr.po new file mode 100644 index 00000000..e8d2f2fe --- /dev/null +++ b/hr_holidays_credit/i18n/fr.po @@ -0,0 +1,125 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_holidays_credit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2019-05-23 23:19+0000\n" +"Last-Translator: Kévin Allard \n" +"Language-Team: none\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.6.1\n" + +#. module: hr_holidays_credit +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%(name)s (%(extra)s)" +msgstr "%(name)s (%(extra)s)" + +#. module: hr_holidays_credit +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%g available" +msgstr "%g disponible" + +#. module: hr_holidays_credit +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%g available + credit" +msgstr "%g disponible + credit" + +#. module: hr_holidays_credit +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%g used in credit" +msgstr "%g utilisé en crédit" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__allow_credit +msgid "Allow Credit" +msgstr "Autoriser le crédit" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_department_ids +msgid "Creditable Departments" +msgstr "Départements admissibles" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_employee_category_ids +msgid "Creditable Employee Tags" +msgstr "Mots-clés du personnel admissibles" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_employee_ids +msgid "Creditable Employees" +msgstr "Employé(e)s admissibles" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave__display_name +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__display_name +msgid "Display Name" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave__id +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__id +msgid "ID" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__allow_credit +msgid "" +"If set to true, employees would be able to make requests for this leave type " +"even if allocated amount is insufficient." +msgstr "" +"Si la valeur est « true », les employés pourront demander ce type de congé " +"même si le montant alloué est insuffisant." + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_department_ids +msgid "If set, limits credit allowance to employees of specified departments" +msgstr "" +"Si défini, limite l'allocation de crédit aux employés des départements " +"spécifiés" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_employee_category_ids +msgid "" +"If set, limits credit allowance to employees with at least one of specified " +"tags" +msgstr "" +"Si défini, limite l’allocation de crédit aux employés ayant au moins une des " +"étiquettes spécifiées" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_employee_ids +msgid "If set, limits credit allowance to specified employees" +msgstr "Si défini, limite l'allocation de crédit à certains employés" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave____last_update +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type____last_update +msgid "Last Modified on" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model,name:hr_holidays_credit.model_hr_leave +msgid "Time Off" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model,name:hr_holidays_credit.model_hr_leave_type +msgid "Time Off Type" +msgstr "" + +#~ msgid "Leave" +#~ msgstr "Congé" + +#~ msgid "Leave Type" +#~ msgstr "Type de congé" diff --git a/hr_holidays_credit/i18n/hr.po b/hr_holidays_credit/i18n/hr.po new file mode 100644 index 00000000..f1e47b50 --- /dev/null +++ b/hr_holidays_credit/i18n/hr.po @@ -0,0 +1,114 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_holidays_credit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-08-23 12:07+0000\n" +"Last-Translator: Bole \n" +"Language-Team: none\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: hr_holidays_credit +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%(name)s (%(extra)s)" +msgstr "%(name)s (%(extra)s)" + +#. module: hr_holidays_credit +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%g available" +msgstr "%g raspoloživo" + +#. module: hr_holidays_credit +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%g available + credit" +msgstr "%g raspoloživo + unaprijed" + +#. module: hr_holidays_credit +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%g used in credit" +msgstr "%g korišteno unaprijed" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__allow_credit +msgid "Allow Credit" +msgstr "Odobri korištenje unaprijed" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_department_ids +msgid "Creditable Departments" +msgstr "Odjeli koji mogu koristiti unaprijed" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_employee_category_ids +msgid "Creditable Employee Tags" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_employee_ids +msgid "Creditable Employees" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave__display_name +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__display_name +msgid "Display Name" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave__id +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__id +msgid "ID" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__allow_credit +msgid "" +"If set to true, employees would be able to make requests for this leave type " +"even if allocated amount is insufficient." +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_department_ids +msgid "If set, limits credit allowance to employees of specified departments" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_employee_category_ids +msgid "" +"If set, limits credit allowance to employees with at least one of specified " +"tags" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_employee_ids +msgid "If set, limits credit allowance to specified employees" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave____last_update +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type____last_update +msgid "Last Modified on" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model,name:hr_holidays_credit.model_hr_leave +msgid "Time Off" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model,name:hr_holidays_credit.model_hr_leave_type +msgid "Time Off Type" +msgstr "" diff --git a/hr_holidays_credit/i18n/hr_holidays_credit.pot b/hr_holidays_credit/i18n/hr_holidays_credit.pot new file mode 100644 index 00000000..6ef75a73 --- /dev/null +++ b/hr_holidays_credit/i18n/hr_holidays_credit.pot @@ -0,0 +1,119 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_holidays_credit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: hr_holidays_credit +#. odoo-python +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid " + credit" +msgstr "" + +#. module: hr_holidays_credit +#. odoo-python +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid " available" +msgstr "" + +#. module: hr_holidays_credit +#. odoo-python +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid " days" +msgstr "" + +#. module: hr_holidays_credit +#. odoo-python +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid " hours" +msgstr "" + +#. module: hr_holidays_credit +#. odoo-python +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid " used in credit" +msgstr "" + +#. module: hr_holidays_credit +#. odoo-python +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%(name)s (%(extra)s)" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__allow_credit +msgid "Allow Credit" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_department_ids +msgid "Creditable Departments" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_employee_category_ids +msgid "Creditable Employee Tags" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_employee_ids +msgid "Creditable Employees" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__allow_credit +msgid "" +"If set to true, employees would be able to make requests for this leave type" +" even if allocated amount is insufficient." +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_department_ids +msgid "If set, limits credit allowance to employees of specified departments" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_employee_category_ids +msgid "" +"If set, limits credit allowance to employees with at least one of specified " +"tags" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_employee_ids +msgid "If set, limits credit allowance to specified employees" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model,name:hr_holidays_credit.model_hr_leave +msgid "Time Off" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model,name:hr_holidays_credit.model_hr_leave_allocation +msgid "Time Off Allocation" +msgstr "" + +#. module: hr_holidays_credit +#: model:ir.model,name:hr_holidays_credit.model_hr_leave_type +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave__holiday_status_id +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_allocation__holiday_status_id +msgid "Time Off Type" +msgstr "" diff --git a/hr_holidays_credit/i18n/it.po b/hr_holidays_credit/i18n/it.po new file mode 100644 index 00000000..e3f2de20 --- /dev/null +++ b/hr_holidays_credit/i18n/it.po @@ -0,0 +1,119 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_holidays_credit +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-07-10 14:09+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\n" +"Language: it\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.17\n" + +#. module: hr_holidays_credit +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%(name)s (%(extra)s)" +msgstr "%(name)s (%(extra)s)" + +#. module: hr_holidays_credit +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%g available" +msgstr "%g disponibile" + +#. module: hr_holidays_credit +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%g available + credit" +msgstr "%g disponibile + crediti" + +#. module: hr_holidays_credit +#: code:addons/hr_holidays_credit/models/hr_leave_type.py:0 +#, python-format +msgid "%g used in credit" +msgstr "%g utilizzato nel credito" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__allow_credit +msgid "Allow Credit" +msgstr "Consenti credito" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_department_ids +msgid "Creditable Departments" +msgstr "Reparto accreditabile" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_employee_category_ids +msgid "Creditable Employee Tags" +msgstr "Etichette dipendente accreditabile" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__creditable_employee_ids +msgid "Creditable Employees" +msgstr "Dipendenti accreditabili" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave__display_name +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave__id +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type__id +msgid "ID" +msgstr "ID" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__allow_credit +msgid "" +"If set to true, employees would be able to make requests for this leave type " +"even if allocated amount is insufficient." +msgstr "" +"Se impostata a vero, i dipendenti saranno abilitati a fare richieste per " +"questo tipo di permesso anche se l'ammontare allocato è insufficiente." + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_department_ids +msgid "If set, limits credit allowance to employees of specified departments" +msgstr "" +"Se impostata, limita la concessione di credito ai dipendenti di reparti " +"specifici" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_employee_category_ids +msgid "" +"If set, limits credit allowance to employees with at least one of specified " +"tags" +msgstr "" +"Se impostata, limita la concessione di credito ai dipendenti con almeno una " +"etichetta specifica" + +#. module: hr_holidays_credit +#: model:ir.model.fields,help:hr_holidays_credit.field_hr_leave_type__creditable_employee_ids +msgid "If set, limits credit allowance to specified employees" +msgstr "Se impostata, limita la concessione di credito a dipendenti specifici" + +#. module: hr_holidays_credit +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave____last_update +#: model:ir.model.fields,field_description:hr_holidays_credit.field_hr_leave_type____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: hr_holidays_credit +#: model:ir.model,name:hr_holidays_credit.model_hr_leave +msgid "Time Off" +msgstr "Ferie" + +#. module: hr_holidays_credit +#: model:ir.model,name:hr_holidays_credit.model_hr_leave_type +msgid "Time Off Type" +msgstr "Tipo di ferie" diff --git a/hr_holidays_credit/models/__init__.py b/hr_holidays_credit/models/__init__.py new file mode 100644 index 00000000..8ce91fe6 --- /dev/null +++ b/hr_holidays_credit/models/__init__.py @@ -0,0 +1,5 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import hr_leave_type +from . import hr_leave_allocation +from . import hr_leave diff --git a/hr_holidays_credit/models/hr_leave.py b/hr_holidays_credit/models/hr_leave.py new file mode 100644 index 00000000..38387f7b --- /dev/null +++ b/hr_holidays_credit/models/hr_leave.py @@ -0,0 +1,61 @@ +# Copyright (C) 2018 Brainbean Apps (https://brainbeanapps.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class HrLeave(models.Model): + _inherit = "hr.leave" + + holiday_status_id = fields.Many2one( + domain=[ + "|", + ("has_valid_allocation", "=", True), + "|", + ("requires_allocation", "=", "no"), + ("allow_credit", "=", True), + ] + ) + + @api.constrains("state", "number_of_days", "holiday_status_id") + def _check_holidays(self): + uncreditable_requests = self.filtered( + lambda holiday: not holiday._is_holiday_credit_allowed() + ) + return super(HrLeave, uncreditable_requests)._check_holidays() + + def _check_overtime_deductible(self, leaves): + uncreditable_leaves = leaves.filtered( + lambda holiday: not holiday._is_holiday_credit_allowed() + ) + return super()._check_overtime_deductible(uncreditable_leaves) + + def _is_holiday_credit_allowed(self): + self.ensure_one() + leave_type = self.holiday_status_id + if not leave_type.allow_credit: + return False + + hr_leave_employees = set(self.employee_ids.ids) + hr_leave_type_employees = set(leave_type.creditable_employee_ids.ids) + same_employees = hr_leave_employees.issubset(hr_leave_type_employees) + if same_employees: + return True + hr_leave_type_cat_employees = set( + leave_type.creditable_employee_category_ids.mapped("employee_ids").ids + ) + same_employees_cat = hr_leave_employees.issubset(hr_leave_type_cat_employees) + if same_employees_cat: + return True + hr_leave_type_dpt_employees = set( + leave_type.creditable_department_ids.mapped("member_ids").ids + ) + same_employees_dpt = hr_leave_employees.issubset(hr_leave_type_dpt_employees) + if same_employees_dpt: + return True + + return ( + not leave_type.creditable_employee_ids + and not leave_type.creditable_employee_category_ids + and not leave_type.creditable_department_ids + ) diff --git a/hr_holidays_credit/models/hr_leave_allocation.py b/hr_holidays_credit/models/hr_leave_allocation.py new file mode 100644 index 00000000..a71b0ef9 --- /dev/null +++ b/hr_holidays_credit/models/hr_leave_allocation.py @@ -0,0 +1,17 @@ +# Copyright (C) 2018 Brainbean Apps (https://brainbeanapps.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models +from odoo.osv import expression + + +class HolidaysAllocation(models.Model): + _inherit = "hr.leave.allocation" + + def _domain_holiday_status_id(self): + res = super(HolidaysAllocation, self)._domain_holiday_status_id() + return expression.OR([[("allow_credit", "=", True)], res]) + + holiday_status_id = fields.Many2one( + "hr.leave.type", domain=_domain_holiday_status_id + ) diff --git a/hr_holidays_credit/models/hr_leave_type.py b/hr_holidays_credit/models/hr_leave_type.py new file mode 100644 index 00000000..ca30fc24 --- /dev/null +++ b/hr_holidays_credit/models/hr_leave_type.py @@ -0,0 +1,79 @@ +# Copyright (C) 2018 Brainbean Apps (https://brainbeanapps.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import _, api, fields, models +from odoo.tools.float_utils import float_round + + +class HrLeaveType(models.Model): + _inherit = "hr.leave.type" + + allow_credit = fields.Boolean( + help=( + "If set to true, employees would be able to make requests for this" + " leave type even if allocated amount is insufficient." + ), + ) + creditable_employee_ids = fields.Many2many( + string="Creditable Employees", + comodel_name="hr.employee", + help="If set, limits credit allowance to specified employees", + ) + creditable_employee_category_ids = fields.Many2many( + string="Creditable Employee Tags", + comodel_name="hr.employee.category", + help=( + "If set, limits credit allowance to employees with at least one of" + " specified tags" + ), + ) + creditable_department_ids = fields.Many2many( + string="Creditable Departments", + comodel_name="hr.department", + help="If set, limits credit allowance to employees of specified departments", + ) + + @api.onchange("requires_allocation", "allocation_validation_type") + def _onchange_allow_credit(self): + if self.requires_allocation == "no" or self.allocation_validation_type == "no": + self.allow_credit = False + + def name_get(self): + if not self.requested_name_get(): + return super().name_get() + res = [] + for record in self: + record_name = record.name + extra = False + if record.requires_allocation == "yes": + if record.virtual_remaining_leaves >= 0: + extra = _("%g") + extra += ( + _(" hours") if record.request_unit == "hour" else _(" days") + ) + extra += _(" available") + if record.allow_credit: + extra += _(" + credit") + extra = extra % ( + float_round(record.virtual_remaining_leaves, precision_digits=2) + or 0.0 + ) + elif record.allow_credit: + extra = _("%g") + extra += ( + _(" hours") if record.request_unit == "hour" else _(" days") + ) + extra += _(" used in credit") + extra = extra % ( + float_round( + -record.virtual_remaining_leaves, precision_digits=2 + ) + or 0.0 + ) + if extra: + record_name = _("%(name)s (%(extra)s)") % { + "name": record_name, + "extra": extra, + } + res.append((record.id, record_name)) + return res diff --git a/hr_holidays_credit/readme/CONTRIBUTORS.rst b/hr_holidays_credit/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..fc1ec734 --- /dev/null +++ b/hr_holidays_credit/readme/CONTRIBUTORS.rst @@ -0,0 +1,8 @@ +* `CorporateHub `__ + + * Alexey Pelykh + +* `Ecosoft `__ + + * Watcharaporn Charamrum + * Tharathip Chaweewongphan diff --git a/hr_holidays_credit/readme/DESCRIPTION.rst b/hr_holidays_credit/readme/DESCRIPTION.rst new file mode 100644 index 00000000..a538916e --- /dev/null +++ b/hr_holidays_credit/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +With this module installed, HR Officer can configure specific leave types to +allow negative balance, or allow employees take leave credit. diff --git a/hr_holidays_credit/static/description/icon.png b/hr_holidays_credit/static/description/icon.png new file mode 100644 index 00000000..3a0328b5 Binary files /dev/null and b/hr_holidays_credit/static/description/icon.png differ diff --git a/hr_holidays_credit/static/description/index.html b/hr_holidays_credit/static/description/index.html new file mode 100644 index 00000000..25da82f1 --- /dev/null +++ b/hr_holidays_credit/static/description/index.html @@ -0,0 +1,429 @@ + + + + + +Leave Credit + + + +
+

Leave Credit

+ + +

Beta License: AGPL-3 OCA/hr-holidays Translate me on Weblate Try me on Runboat

+

With this module installed, HR Officer can configure specific leave types to +allow negative balance, or allow employees take leave credit.

+

Table of contents

+ +
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • CorporateHub
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use.

+

This module is part of the OCA/hr-holidays project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/hr_holidays_credit/tests/__init__.py b/hr_holidays_credit/tests/__init__.py new file mode 100644 index 00000000..9da576d1 --- /dev/null +++ b/hr_holidays_credit/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import test_hr_holidays_credit diff --git a/hr_holidays_credit/tests/test_hr_holidays_credit.py b/hr_holidays_credit/tests/test_hr_holidays_credit.py new file mode 100644 index 00000000..92fd636e --- /dev/null +++ b/hr_holidays_credit/tests/test_hr_holidays_credit.py @@ -0,0 +1,299 @@ +# Copyright (C) 2018 Brainbean Apps (https://brainbeanapps.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +import logging + +from odoo.exceptions import ValidationError +from odoo.tests import common + +_logger = logging.getLogger(__name__) + + +class TestHrHolidaysCredit(common.TransactionCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.Employee = cls.env["hr.employee"] + cls.SudoEmployee = cls.Employee.sudo() + cls.Department = cls.env["hr.department"] + cls.SudoDepartment = cls.Department.sudo() + + cls.LeaveType = cls.env["hr.leave.type"] + cls.SudoLeaveType = cls.LeaveType.sudo() + cls.Leave = cls.env["hr.leave"] + cls.SudoLeave = cls.Leave.sudo() + cls.Allocation = cls.env["hr.leave.allocation"] + cls.SudoAllocation = cls.Allocation.sudo() + + def test_1(self): + """ + Test that creating a leave without allowing credit raises a + ValidationError, and succeeds after enabling credit on the leave type. + """ + employee = self.SudoEmployee.create({"name": "Employee #1"}) + leave_type = self.SudoLeaveType.create( + { + "name": "Leave Type #1", + "requires_allocation": "yes", + "allocation_validation_type": "officer", + "allow_credit": False, + } + ) + + allocation = self.SudoAllocation.create( + { + "holiday_status_id": leave_type.id, + "number_of_days": 5, + "employee_id": employee.id, + "date_from": "2020-01-01", + "date_to": "2020-12-31", + } + ) + allocation.action_confirm() + allocation.action_validate() + + with self.assertRaises(ValidationError): + self.SudoLeave.create( + { + "holiday_status_id": leave_type.id, + "holiday_type": "employee", + "employee_id": employee.id, + "date_from": "2020-01-01", + "date_to": "2020-01-10", + } + ) + + leave_type.write({"allow_credit": True}) + self.SudoLeave.create( + { + "holiday_status_id": leave_type.id, + "holiday_type": "employee", + "employee_id": employee.id, + "date_from": "2020-01-01", + "date_to": "2020-01-10", + } + ) + + def test_2(self): + """ + Test that leave allocation validation respects department restrictions. + Leaves for employees in allowed departments succeed, while others + raise ValidationError. + """ + department = self.SudoDepartment.create({"name": "Department #2"}) + employee_1 = self.SudoEmployee.create( + {"name": "Employee #2-1", "department_id": department.id} + ) + employee_2 = self.SudoEmployee.create( + {"name": "Employee #2-2", "department_id": False} + ) + + leave_type = self.SudoLeaveType.create( + { + "name": "Leave Type #2", + "requires_allocation": "yes", + "allocation_validation_type": "officer", + "allow_credit": True, + "creditable_department_ids": [(6, False, [department.id])], + } + ) + + allocation_1 = self.SudoAllocation.create( + { + "holiday_status_id": leave_type.id, + "number_of_days": 5, + "employee_id": employee_1.id, + "date_from": "2020-01-01", + "date_to": "2020-12-31", + } + ) + allocation_2 = self.SudoAllocation.create( + { + "holiday_status_id": leave_type.id, + "number_of_days": 5, + "employee_id": employee_2.id, + "date_from": "2020-01-01", + "date_to": "2020-12-31", + } + ) + + allocation_1.action_confirm() + allocation_1.action_validate() + allocation_2.action_confirm() + allocation_2.action_validate() + + self.SudoLeave.create( + { + "holiday_status_id": leave_type.id, + "holiday_type": "employee", + "employee_id": employee_1.id, + "number_of_days": 1, + } + ) + with self.assertRaises(ValidationError): + self.SudoLeave.create( + { + "holiday_status_id": leave_type.id, + "holiday_type": "employee", + "employee_id": employee_2.id, + "number_of_days": 1, + } + ) + + def test_3(self): + """ + Test that leave allocation validation respects individual employee + credit restrictions. Leaves for employees with credit allowed succeed, + while others raise ValidationError. + """ + employee_1 = self.SudoEmployee.create({"name": "Employee #3-1"}) + employee_2 = self.SudoEmployee.create({"name": "Employee #3-2"}) + leave_type = self.SudoLeaveType.create( + { + "name": "Leave Type #3", + "requires_allocation": "yes", + "allocation_validation_type": "officer", + "allow_credit": True, + "creditable_employee_ids": [(6, False, [employee_1.id])], + } + ) + + allocation_1 = self.SudoAllocation.create( + { + "holiday_status_id": leave_type.id, + "number_of_days": 5, + "employee_id": employee_1.id, + "date_from": "2020-01-01", + "date_to": "2020-12-31", + } + ) + allocation_2 = self.SudoAllocation.create( + { + "holiday_status_id": leave_type.id, + "number_of_days": 5, + "employee_id": employee_2.id, + "date_from": "2020-01-01", + "date_to": "2020-12-31", + } + ) + + allocation_1.action_confirm() + allocation_1.action_validate() + allocation_2.action_confirm() + allocation_2.action_validate() + + self.SudoLeave.create( + { + "holiday_status_id": leave_type.id, + "holiday_type": "employee", + "employee_id": employee_1.id, + "number_of_days": 1, + } + ) + with self.assertRaises(ValidationError): + self.SudoLeave.create( + { + "holiday_status_id": leave_type.id, + "holiday_type": "employee", + "employee_id": employee_2.id, + "number_of_days": 1, + } + ) + + def test_4(self): + """ + Test the name_get method + """ + employee = self.SudoEmployee.create({"name": "Employee #4"}) + leave_type = self.SudoLeaveType.create( + { + "name": "Leave Type #4", + "requires_allocation": "yes", + "allocation_validation_type": "officer", + "allow_credit": False, + } + ) + + allocation = self.SudoAllocation.create( + { + "holiday_status_id": leave_type.id, + "number_of_days": 5, + "employee_id": employee.id, + "date_from": "2020-01-01", + "date_to": "2020-12-31", + } + ) + allocation.action_confirm() + allocation.action_validate() + + name = leave_type.with_context(employee_id=employee.id).name_get()[0][1] + self.assertTrue("available" in name) + self.assertTrue("credit" not in name) + + def test_5(self): + """ + Test that the name_get method includes 'available + credit' in the + leave type name when credit is allowed. + """ + employee = self.SudoEmployee.create({"name": "Employee #5"}) + leave_type = self.SudoLeaveType.create( + { + "name": "Leave Type #5", + "requires_allocation": "yes", + "allocation_validation_type": "officer", + "allow_credit": True, + } + ) + + allocation = self.SudoAllocation.create( + { + "holiday_status_id": leave_type.id, + "number_of_days": 5, + "employee_id": employee.id, + "date_from": "2020-01-01", + "date_to": "2020-12-31", + } + ) + allocation.action_confirm() + allocation.action_validate() + + name = leave_type.with_context(employee_id=employee.id).name_get()[0][1] + self.assertTrue("available + credit" in name) + + def test_6(self): + """ + Test that the name_get method includes 'used in credit' in the leave + type name when a leave consumes credit. + """ + employee = self.SudoEmployee.create({"name": "Employee #6"}) + leave_type = self.SudoLeaveType.create( + { + "name": "Leave Type #6", + "requires_allocation": "yes", + "allocation_validation_type": "officer", + "allow_credit": True, + } + ) + self.SudoLeave.create( + { + "holiday_status_id": leave_type.id, + "holiday_type": "employee", + "employee_id": employee.id, + "number_of_days": 1, + } + ) + + allocation = self.SudoAllocation.create( + { + "holiday_status_id": leave_type.id, + "number_of_days": 5, + "employee_id": employee.id, + "date_from": "2020-01-01", + "date_to": "2020-12-31", + } + ) + allocation.action_confirm() + allocation.action_validate() + + name = leave_type.with_context(employee_id=employee.id).name_get()[0][1] + self.assertTrue("used in credit" in name) diff --git a/hr_holidays_credit/views/hr_leave_type.xml b/hr_holidays_credit/views/hr_leave_type.xml new file mode 100644 index 00000000..bd93e9e1 --- /dev/null +++ b/hr_holidays_credit/views/hr_leave_type.xml @@ -0,0 +1,35 @@ + + + + + hr.leave.type.form + hr.leave.type + + + + + + + + + + + diff --git a/hr_holidays_credit/views/hr_leave_views.xml b/hr_holidays_credit/views/hr_leave_views.xml new file mode 100644 index 00000000..d0a957ea --- /dev/null +++ b/hr_holidays_credit/views/hr_leave_views.xml @@ -0,0 +1,20 @@ + + + + + hr.leave.view.form + hr.leave + + + + ['|', ('requires_allocation', '=', 'no'), '|', ("allow_credit", "=", True), '&', ('has_valid_allocation', '=', True), '&', ('max_leaves', '>', '0'), ('virtual_remaining_leaves', '>', 0)] + + + + + diff --git a/setup/hr_holidays_credit/odoo/addons/hr_holidays_credit b/setup/hr_holidays_credit/odoo/addons/hr_holidays_credit new file mode 120000 index 00000000..98f6887a --- /dev/null +++ b/setup/hr_holidays_credit/odoo/addons/hr_holidays_credit @@ -0,0 +1 @@ +../../../../hr_holidays_credit \ No newline at end of file diff --git a/setup/hr_holidays_credit/setup.py b/setup/hr_holidays_credit/setup.py new file mode 100644 index 00000000..28c57bb6 --- /dev/null +++ b/setup/hr_holidays_credit/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)