diff --git a/hr_timesheet_sheet_policy_department_manager/README.rst b/hr_timesheet_sheet_policy_department_manager/README.rst new file mode 100644 index 0000000000..eacc6f4fb8 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/README.rst @@ -0,0 +1,81 @@ +============================================= +HR Timesheet Sheet: Department Manager Policy +============================================= + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:53a3750b8c095496ecede45f612df212f21d19499ca0260b12471f46bee98b45 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Ftimesheet-lightgray.png?logo=github + :target: https://github.com/OCA/timesheet/tree/15.0/hr_timesheet_sheet_policy_department_manager + :alt: OCA/timesheet +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/timesheet-15-0/timesheet-15-0-hr_timesheet_sheet_policy_department_manager + :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/timesheet&target_branch=15.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module allows setting Department Manager as Reviewer on Timesheet Sheets. + +**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 +* `Tecnativa `_ + + * Ernesto Tejeda + +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/timesheet `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/hr_timesheet_sheet_policy_department_manager/__init__.py b/hr_timesheet_sheet_policy_department_manager/__init__.py new file mode 100644 index 0000000000..31660d6a96 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import models diff --git a/hr_timesheet_sheet_policy_department_manager/__manifest__.py b/hr_timesheet_sheet_policy_department_manager/__manifest__.py new file mode 100644 index 0000000000..abae5448f9 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/__manifest__.py @@ -0,0 +1,20 @@ +# Copyright 2019 Brainbean Apps (https://brainbeanapps.com) +# Copyright 2020 CorporateHub (https://corporatehub.eu) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + "name": "HR Timesheet Sheet: Department Manager Policy", + "version": "15.0.1.0.0", + "author": "CorporateHub, Odoo Community Association (OCA)", + "website": "https://github.com/OCA/timesheet", + "license": "AGPL-3", + "category": "Human Resources", + "summary": "Allows setting Department Manager as Reviewer", + "depends": [ + "hr_timesheet_sheet", + ], + "data": [ + "views/hr_timesheet_sheet.xml", + ], + "installable": True, +} diff --git a/hr_timesheet_sheet_policy_department_manager/i18n/es.po b/hr_timesheet_sheet_policy_department_manager/i18n/es.po new file mode 100644 index 0000000000..2448547572 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/i18n/es.po @@ -0,0 +1,84 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_timesheet_sheet_policy_department_manager +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2020-05-18 20:19+0000\n" +"Last-Translator: Josep M \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 3.10\n" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields.selection,name:hr_timesheet_sheet_policy_department_manager.selection__res_company__timesheet_sheet_review_policy__department_manager +msgid "By Department Manager" +msgstr "Por el responsable del departamento" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model,name:hr_timesheet_sheet_policy_department_manager.model_res_company +msgid "Companies" +msgstr "Compañías" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_hr_timesheet_sheet__display_name +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company__display_name +msgid "Display Name" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,help:hr_timesheet_sheet_policy_department_manager.field_res_company__timesheet_sheet_review_policy +msgid "How Timesheet Sheets review is performed." +msgstr "Cómo ser realiza la revisión de Partes de horas." + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_hr_timesheet_sheet__id +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company__id +msgid "ID" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_hr_timesheet_sheet____last_update +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company____last_update +msgid "Last Modified on" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: code:addons/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py:0 +#, python-format +msgid "Only a Department's Manager can review the sheet." +msgstr "Solo el responsable de departamente puede revisar este parte." + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model,name:hr_timesheet_sheet_policy_department_manager.model_hr_timesheet_sheet +msgid "Timesheet Sheet" +msgstr "Parte de horas" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company__timesheet_sheet_review_policy +msgid "Timesheet Sheet Review Policy" +msgstr "Política de Revisión del Parte de horas" + +#~ msgid "By Direct Manager" +#~ msgstr "Por responsable directo" + +#, fuzzy +#~ msgid "By HR Managers" +#~ msgstr "Por Reponsable de RRHH" + +#, fuzzy +#~ msgid "By HR Officers" +#~ msgstr "Por Reponsable de RRHH" + +#~ msgid "By Project Manager" +#~ msgstr "Por responsable de proyecto" + +#, fuzzy +#~ msgid "By Timesheets Managers" +#~ msgstr "Por responsable directo" diff --git a/hr_timesheet_sheet_policy_department_manager/i18n/fr.po b/hr_timesheet_sheet_policy_department_manager/i18n/fr.po new file mode 100644 index 0000000000..920448ae51 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/i18n/fr.po @@ -0,0 +1,81 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_timesheet_sheet_policy_department_manager +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 12.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-01-27 15:21+0000\n" +"Last-Translator: Yann Papouin \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 4.3.2\n" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields.selection,name:hr_timesheet_sheet_policy_department_manager.selection__res_company__timesheet_sheet_review_policy__department_manager +msgid "By Department Manager" +msgstr "Par le responsable du département" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model,name:hr_timesheet_sheet_policy_department_manager.model_res_company +msgid "Companies" +msgstr "Sociétés" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_hr_timesheet_sheet__display_name +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company__display_name +msgid "Display Name" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,help:hr_timesheet_sheet_policy_department_manager.field_res_company__timesheet_sheet_review_policy +msgid "How Timesheet Sheets review is performed." +msgstr "Comment l'examen des relevés des feuilles de temps est effectué." + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_hr_timesheet_sheet__id +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company__id +msgid "ID" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_hr_timesheet_sheet____last_update +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company____last_update +msgid "Last Modified on" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: code:addons/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py:0 +#, python-format +msgid "Only a Department's Manager can review the sheet." +msgstr "Seul un responsable du département peut examiner cette feuille." + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model,name:hr_timesheet_sheet_policy_department_manager.model_hr_timesheet_sheet +msgid "Timesheet Sheet" +msgstr "Relevé de feuille de temps" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company__timesheet_sheet_review_policy +msgid "Timesheet Sheet Review Policy" +msgstr "Politique de révision des relevés de feuilles de temps" + +#~ msgid "By Direct Manager" +#~ msgstr "Par le responsable hiérarchique" + +#~ msgid "By HR Managers" +#~ msgstr "Par les responsables RH" + +#~ msgid "By HR Officers" +#~ msgstr "Par les agents RH" + +#~ msgid "By Project Manager" +#~ msgstr "Par le responsable de projet" + +#~ msgid "By Timesheets Managers" +#~ msgstr "Par les responsables des feuilles de temps" diff --git a/hr_timesheet_sheet_policy_department_manager/i18n/hr_timesheet_sheet_policy_department_manager.pot b/hr_timesheet_sheet_policy_department_manager/i18n/hr_timesheet_sheet_policy_department_manager.pot new file mode 100644 index 0000000000..d2edb073dd --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/i18n/hr_timesheet_sheet_policy_department_manager.pot @@ -0,0 +1,63 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_timesheet_sheet_policy_department_manager +# +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_timesheet_sheet_policy_department_manager +#: model:ir.model.fields.selection,name:hr_timesheet_sheet_policy_department_manager.selection__res_company__timesheet_sheet_review_policy__department_manager +msgid "By Department Manager" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model,name:hr_timesheet_sheet_policy_department_manager.model_res_company +msgid "Companies" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_hr_timesheet_sheet__display_name +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company__display_name +msgid "Display Name" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,help:hr_timesheet_sheet_policy_department_manager.field_res_company__timesheet_sheet_review_policy +msgid "How Timesheet Sheets review is performed." +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_hr_timesheet_sheet__id +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company__id +msgid "ID" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_hr_timesheet_sheet____last_update +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company____last_update +msgid "Last Modified on" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: code:addons/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py:0 +#, python-format +msgid "Only a Department's Manager can review the sheet." +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model,name:hr_timesheet_sheet_policy_department_manager.model_hr_timesheet_sheet +msgid "Timesheet Sheet" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company__timesheet_sheet_review_policy +msgid "Timesheet Sheet Review Policy" +msgstr "" diff --git a/hr_timesheet_sheet_policy_department_manager/i18n/it.po b/hr_timesheet_sheet_policy_department_manager/i18n/it.po new file mode 100644 index 0000000000..4a91d4f85d --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/i18n/it.po @@ -0,0 +1,66 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * hr_timesheet_sheet_policy_department_manager +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-10-10 16:36+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_timesheet_sheet_policy_department_manager +#: model:ir.model.fields.selection,name:hr_timesheet_sheet_policy_department_manager.selection__res_company__timesheet_sheet_review_policy__department_manager +msgid "By Department Manager" +msgstr "Da responsabile dipartimento" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model,name:hr_timesheet_sheet_policy_department_manager.model_res_company +msgid "Companies" +msgstr "Aziende" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_hr_timesheet_sheet__display_name +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,help:hr_timesheet_sheet_policy_department_manager.field_res_company__timesheet_sheet_review_policy +msgid "How Timesheet Sheets review is performed." +msgstr "Come viene eseguita la revisione dei prospetti fogli ore." + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_hr_timesheet_sheet__id +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company__id +msgid "ID" +msgstr "ID" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_hr_timesheet_sheet____last_update +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company____last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: hr_timesheet_sheet_policy_department_manager +#: code:addons/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py:0 +#, python-format +msgid "Only a Department's Manager can review the sheet." +msgstr "Solo un responsabile dipertimento può revisionare il prospetto." + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model,name:hr_timesheet_sheet_policy_department_manager.model_hr_timesheet_sheet +msgid "Timesheet Sheet" +msgstr "Prospetto foglio ore" + +#. module: hr_timesheet_sheet_policy_department_manager +#: model:ir.model.fields,field_description:hr_timesheet_sheet_policy_department_manager.field_res_company__timesheet_sheet_review_policy +msgid "Timesheet Sheet Review Policy" +msgstr "Politica revisione prospetto foglio ore" diff --git a/hr_timesheet_sheet_policy_department_manager/models/__init__.py b/hr_timesheet_sheet_policy_department_manager/models/__init__.py new file mode 100644 index 0000000000..10c2f5687b --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/models/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import hr_timesheet_sheet +from . import res_company diff --git a/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py b/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py new file mode 100644 index 0000000000..cdd7aa3bb0 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py @@ -0,0 +1,65 @@ +# Copyright 2019 Brainbean Apps (https://brainbeanapps.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +import json + +from lxml import etree + +from odoo import _, api, models +from odoo.exceptions import UserError + + +class HrTimesheetSheet(models.Model): + _inherit = "hr_timesheet.sheet" + + @api.model + def fields_view_get( + self, view_id=None, view_type="form", toolbar=False, submenu=False + ): + res = super().fields_view_get( + view_id=view_id, + view_type=view_type, + toolbar=toolbar, + submenu=submenu, + ) + review_policy = self.env.user.company_id.timesheet_sheet_review_policy + if review_policy == "department_manager" and view_type == "tree": + view = etree.XML(res["arch"]) + field = view.find(".//field[@name='department_id']") + if field is not None: + field.set("invisible", "0") + modifiers = json.loads(field.get("modifiers")) + modifiers.update( + { + "column_invisible": False, + } + ) + field.set("modifiers", json.dumps(modifiers)) + res["arch"] = etree.tostring( + view, + encoding="unicode", + ).replace("\t", "") + return res + + def _get_complete_name_components(self): + self.ensure_one() + result = super()._get_complete_name_components() + if self.review_policy == "department_manager": + result += [self.department_id.name_get()[0][1]] + return result + + def _get_possible_reviewers(self): + self.ensure_one() + res = super()._get_possible_reviewers() + if self.review_policy == "department_manager": + res |= self.department_id.manager_id.user_id + return res + + def _check_can_review(self): + res = super()._check_can_review() + if self.filtered( + lambda sheet: not sheet.can_review + and sheet.review_policy == "department_manager" + ): + raise UserError(_("Only a Department's Manager can review the sheet.")) + return res diff --git a/hr_timesheet_sheet_policy_department_manager/models/res_company.py b/hr_timesheet_sheet_policy_department_manager/models/res_company.py new file mode 100644 index 0000000000..f85ea70997 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/models/res_company.py @@ -0,0 +1,14 @@ +# Copyright 2019 Brainbean Apps (https://brainbeanapps.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + timesheet_sheet_review_policy = fields.Selection( + selection_add=[ + ("department_manager", "By Department Manager"), + ], + ) diff --git a/hr_timesheet_sheet_policy_department_manager/readme/CONTRIBUTORS.rst b/hr_timesheet_sheet_policy_department_manager/readme/CONTRIBUTORS.rst new file mode 100644 index 0000000000..4e1688ca57 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/readme/CONTRIBUTORS.rst @@ -0,0 +1,6 @@ +* `CorporateHub `__ + + * Alexey Pelykh +* `Tecnativa `_ + + * Ernesto Tejeda diff --git a/hr_timesheet_sheet_policy_department_manager/readme/DESCRIPTION.rst b/hr_timesheet_sheet_policy_department_manager/readme/DESCRIPTION.rst new file mode 100644 index 0000000000..baa48d5312 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +This module allows setting Department Manager as Reviewer on Timesheet Sheets. diff --git a/hr_timesheet_sheet_policy_department_manager/static/description/icon.png b/hr_timesheet_sheet_policy_department_manager/static/description/icon.png new file mode 100644 index 0000000000..3a0328b516 Binary files /dev/null and b/hr_timesheet_sheet_policy_department_manager/static/description/icon.png differ diff --git a/hr_timesheet_sheet_policy_department_manager/static/description/index.html b/hr_timesheet_sheet_policy_department_manager/static/description/index.html new file mode 100644 index 0000000000..a66251f48c --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/static/description/index.html @@ -0,0 +1,431 @@ + + + + + + +HR Timesheet Sheet: Department Manager Policy + + + +
+

HR Timesheet Sheet: Department Manager Policy

+ + +

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

+

This module allows setting Department Manager as Reviewer on Timesheet Sheets.

+

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/timesheet project on GitHub.

+

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

+
+
+
+ + diff --git a/hr_timesheet_sheet_policy_department_manager/tests/__init__.py b/hr_timesheet_sheet_policy_department_manager/tests/__init__.py new file mode 100644 index 0000000000..da3a456dd8 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from . import test_hr_timesheet_sheet_policy_department_manager diff --git a/hr_timesheet_sheet_policy_department_manager/tests/test_hr_timesheet_sheet_policy_department_manager.py b/hr_timesheet_sheet_policy_department_manager/tests/test_hr_timesheet_sheet_policy_department_manager.py new file mode 100644 index 0000000000..bd5328a931 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/tests/test_hr_timesheet_sheet_policy_department_manager.py @@ -0,0 +1,141 @@ +# Copyright 2019 Brainbean Apps (https://brainbeanapps.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.exceptions import UserError +from odoo.tests import common + + +class TestHrTimesheetSheetPolicyDepartmentManager(common.TransactionCase): + def setUp(self): + super().setUp() + + self.ResCompany = self.env["res.company"] + self.ResUsers = self.env["res.users"] + self.HrTimesheetSheet = self.env["hr_timesheet.sheet"] + self.HrEmployee = self.env["hr.employee"] + self.HrDepartment = self.env["hr.department"] + + self.group_hr_user = self.env.ref("hr.group_hr_user") + self.group_multi_company = self.env.ref("base.group_multi_company") + self.group_hr_timesheet_user = self.env.ref( + "hr_timesheet.group_hr_timesheet_user" + ) + self.group_project_user = self.env.ref("project.group_project_user") + + self.company = self.ResCompany.create( + { + "name": "Company", + } + ) + self.env.user.company_ids += self.company + self.department_manager_user = self.ResUsers.with_context( + no_reset_password=True + ).create( + { + "name": "Department Manager User", + "login": "department_manager_user", + "email": "department_manager_user@example.com", + "groups_id": [ + ( + 6, + 0, + [ + self.group_hr_timesheet_user.id, + self.group_project_user.id, + self.group_multi_company.id, + ], + ) + ], + "company_id": self.company.id, + "company_ids": [(4, self.company.id)], + } + ) + self.employee_user = self.ResUsers.with_context(no_reset_password=True).create( + { + "name": "Employee User", + "login": "employee_user", + "email": "employee_user@example.com", + "groups_id": [ + ( + 6, + 0, + [ + self.group_hr_user.id, + self.group_hr_timesheet_user.id, + self.group_project_user.id, + self.group_multi_company.id, + ], + ) + ], + "company_id": self.company.id, + "company_ids": [(4, self.company.id)], + } + ) + self.employee = self.HrEmployee.create( + { + "name": "Employee", + "user_id": self.employee_user.id, + "company_id": self.company.id, + } + ) + self.department_manager = self.HrEmployee.create( + { + "name": "Department Manager", + "user_id": self.department_manager_user.id, + "company_id": self.company.id, + } + ) + self.department = self.HrDepartment.create( + { + "name": "Department", + "company_id": self.company.id, + "manager_id": self.department_manager.id, + } + ) + + def test_review_policy_capture(self): + self.company.timesheet_sheet_review_policy = "department_manager" + sheet = self.HrTimesheetSheet.with_user(self.employee_user).create( + { + "company_id": self.company.id, + "department_id": self.department.id, + } + ) + self.assertEqual(sheet.review_policy, "department_manager") + self.company.timesheet_sheet_review_policy = "hr" + self.assertEqual(sheet.review_policy, "department_manager") + sheet.unlink() + + def test_department_manager_review_policy(self): + self.company.timesheet_sheet_review_policy = "department_manager" + + self.HrTimesheetSheet.with_user(self.employee_user).fields_view_get( + view_type="form", + ) + self.HrTimesheetSheet.with_user(self.employee_user).fields_view_get( + view_type="tree", + ) + + sheet = self.HrTimesheetSheet.with_user(self.employee_user).create( + { + "company_id": self.company.id, + "department_id": self.department.id, + } + ) + self.company.timesheet_sheet_review_policy = "hr" + + sheet._compute_complete_name() + + sheet.action_timesheet_confirm() + self.assertFalse(sheet.with_user(self.employee_user).can_review) + self.assertEqual( + self.HrTimesheetSheet.with_user(self.employee_user).search_count( + [("can_review", "=", True)] + ), + 0, + ) + with self.assertRaises(UserError): + sheet.with_user(self.employee_user).action_timesheet_done() + sheet.with_user(self.department_manager_user).action_timesheet_done() + sheet.with_user(self.department_manager_user).action_timesheet_draft() + sheet.unlink() diff --git a/hr_timesheet_sheet_policy_department_manager/views/hr_timesheet_sheet.xml b/hr_timesheet_sheet_policy_department_manager/views/hr_timesheet_sheet.xml new file mode 100644 index 0000000000..e1bc65a4a2 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/views/hr_timesheet_sheet.xml @@ -0,0 +1,28 @@ + + + + + + hr_timesheet.sheet.form + hr_timesheet.sheet + + + + False + + { + 'invisible': [('review_policy', '!=', 'department_manager')], + 'required': [('review_policy', '=', 'department_manager')], + } + + + + + + diff --git a/setup/hr_timesheet_sheet_policy_department_manager/odoo/addons/hr_timesheet_sheet_policy_department_manager b/setup/hr_timesheet_sheet_policy_department_manager/odoo/addons/hr_timesheet_sheet_policy_department_manager new file mode 120000 index 0000000000..88d287da2f --- /dev/null +++ b/setup/hr_timesheet_sheet_policy_department_manager/odoo/addons/hr_timesheet_sheet_policy_department_manager @@ -0,0 +1 @@ +../../../../hr_timesheet_sheet_policy_department_manager \ No newline at end of file diff --git a/setup/hr_timesheet_sheet_policy_department_manager/setup.py b/setup/hr_timesheet_sheet_policy_department_manager/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/hr_timesheet_sheet_policy_department_manager/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)