From 898a8d9f0c2318c9afdeee48fa0bc1072144c284 Mon Sep 17 00:00:00 2001 From: Alexey Pelykh Date: Tue, 12 Nov 2019 20:31:57 +0000 Subject: [PATCH 01/21] [ADD] hr_timesheet_sheet: policies --- .../README.rst | 73 +++ .../__init__.py | 3 + .../__manifest__.py | 21 + ...esheet_sheet_policy_department_manager.pot | 61 +++ .../models/__init__.py | 4 + .../models/hr_timesheet_sheet.py | 69 +++ .../models/res_company.py | 14 + .../readme/CONTRIBUTORS.rst | 1 + .../readme/DESCRIPTION.rst | 1 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 419 ++++++++++++++++++ .../tests/__init__.py | 3 + ...mesheet_sheet_policy_department_manager.py | 115 +++++ .../views/hr_timesheet_sheet.xml | 25 ++ 14 files changed, 809 insertions(+) create mode 100644 hr_timesheet_sheet_policy_department_manager/README.rst create mode 100644 hr_timesheet_sheet_policy_department_manager/__init__.py create mode 100644 hr_timesheet_sheet_policy_department_manager/__manifest__.py create mode 100644 hr_timesheet_sheet_policy_department_manager/i18n/hr_timesheet_sheet_policy_department_manager.pot create mode 100644 hr_timesheet_sheet_policy_department_manager/models/__init__.py create mode 100644 hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py create mode 100644 hr_timesheet_sheet_policy_department_manager/models/res_company.py create mode 100644 hr_timesheet_sheet_policy_department_manager/readme/CONTRIBUTORS.rst create mode 100644 hr_timesheet_sheet_policy_department_manager/readme/DESCRIPTION.rst create mode 100644 hr_timesheet_sheet_policy_department_manager/static/description/icon.png create mode 100644 hr_timesheet_sheet_policy_department_manager/static/description/index.html create mode 100644 hr_timesheet_sheet_policy_department_manager/tests/__init__.py create mode 100644 hr_timesheet_sheet_policy_department_manager/tests/test_hr_timesheet_sheet_policy_department_manager.py create mode 100644 hr_timesheet_sheet_policy_department_manager/views/hr_timesheet_sheet.xml 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..6486b8a128 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/README.rst @@ -0,0 +1,73 @@ +============================================= +HR Timesheet Sheet: Department Manager Policy +============================================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/12.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-12-0/timesheet-12-0-hr_timesheet_sheet_policy_department_manager + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/117/12.0 + :alt: Try me on Runbot + +|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 smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Brainbean Apps + +Contributors +~~~~~~~~~~~~ + +* Alexey Pelykh + +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..24855134df --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/__manifest__.py @@ -0,0 +1,21 @@ +# Copyright 2019 Brainbean Apps (https://brainbeanapps.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +{ + 'name': 'HR Timesheet Sheet: Department Manager Policy', + 'version': '12.0.1.0.0', + 'author': + 'Brainbean Apps, ' + '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/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..186c8a85ef --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/i18n/hr_timesheet_sheet_policy_department_manager.pot @@ -0,0 +1,61 @@ +# 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" +"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 +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By Department Manager" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By Direct Manager" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By HR Manager/Officer" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By Project 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,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 +#: code:addons/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py:67 +#, 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/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..75acf9d930 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py @@ -0,0 +1,69 @@ +# Copyright 2019 Brainbean Apps (https://brainbeanapps.com) +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import api, models, _ +from odoo.exceptions import UserError + +import json +from lxml import etree + + +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 + + @api.multi + @api.depends('department_id.manager_id.user_id') + def _compute_department_manager_as_reviewer(self): + self._compute_possible_reviewer_ids() + + @api.multi + 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 + + @api.multi + def _get_possible_reviewers(self): + self.ensure_one() + if self.review_policy == 'department_manager': + return self.department_id.manager_id.user_id + return super()._get_possible_reviewers() + + @api.multi + def _check_can_review(self): + 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.' + )) 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..d22a7b1597 --- /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..1c6a35a1e3 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Alexey Pelykh 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 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z z?n?eq1XP>p-IM$Z^C;2L3itnbJZAip*Zo0aw2bs8@(s^~*8T9go!%dHcAz2lM;`yp zD=7&xjFV$S&5uDaiScyD?B-i1ze`+CoRtz`Wn+Zl&#s4&}MO{@N!ufrzjG$B79)Y2d3tBk&)TxUTw@QS0TEL_?njX|@vq?Uz(nBFK5Pq7*xj#u*R&i|?7+6# z+|r_n#SW&LXhtheZdah{ZVoqwyT{D>MC3nkFF#N)xLi{p7J1jXlmVeb;cP5?e(=f# zuT7fvjSbjS781v?7{)-X3*?>tq?)Yd)~|1{BDS(pqC zC}~H#WXlkUW*H5CDOo<)#x7%RY)A;ShGhI5s*#cRDA8YgqG(HeKDx+#(ZQ?386dv! zlXCO)w91~Vw4AmOcATuV653fa9R$fyK8ul%rG z-wfS zihugoZyr38Im?Zuh6@RcF~t1anQu7>#lPpb#}4cOA!EM11`%f*07RqOVkmX{p~KJ9 z^zP;K#|)$`^Rb{rnHGH{~>1(fawV0*Z#)}M`m8-?ZJV<+e}s9wE# z)l&az?w^5{)`S(%MRzxdNqrs1n*-=jS^_jqE*5XDrA0+VE`5^*p3CuM<&dZEeCjoz zR;uu_H9ZPZV|fQq`Cyw4nscrVwi!fE6ciMmX$!_hN7uF;jjKG)d2@aC4ropY)8etW=xJvni)8eHi`H$%#zn^WJ5NLc-rqk|u&&4Z6fD_m&JfSI1Bvb?b<*n&sfl0^t z=HnmRl`XrFvMKB%9}>PaA`m-fK6a0(8=qPkWS5bb4=v?XcWi&hRY?O5HdulRi4?fN zlsJ*N-0Qw+Yic@s0(2uy%F@ib;GjXt01Fmx5XbRo6+n|pP(&nodMoap^z{~q ziEeaUT@Mxe3vJSfI6?uLND(CNr=#^W<1b}jzW58bIfyWTDle$mmS(|x-0|2UlX+9k zQ^EX7Nw}?EzVoBfT(-LT|=9N@^hcn-_p&sqG z&*oVs2JSU+N4ZD`FhCAWaS;>|wH2G*Id|?pa#@>tyxX`+4HyIArWDvVrX)2WAOQff z0qyHu&-S@i^MS-+j--!pr4fPBj~_8({~e1bfcl0wI1kaoN>mJL6KUPQm5N7lB(ui1 zE-o%kq)&djzWJ}ob<-GfDlkB;F31j-VHKvQUGQ3sp`CwyGJk_i!y^sD0fqC@$9|jO zOqN!r!8-p==F@ZVP=U$qSpY(gQ0)59P1&t@y?5rvg<}E+GB}26NYPp4f2YFQrQtot5mn3wu_qprZ=>Ig-$ zbW26Ws~IgY>}^5w`vTB(G`PTZaDiGBo5o(tp)qli|NeV( z@H_=R8V39rt5J5YB2Ky?4eJJ#b`_iBe2ot~6%7mLt5t8Vwi^Jy7|jWXqa3amOIoRb zOr}WVFP--DsS`1WpN%~)t3R!arKF^Q$e12KEqU36AWwnCBICpH4XCsfnyrHr>$I$4 z!DpKX$OKLWarN7nv@!uIA+~RNO)l$$w}p(;b>mx8pwYvu;dD_unryX_NhT8*Tj>BTrTTL&!?O+%Rv;b?B??gSzdp?6Uug9{ zd@V08Z$BdI?fpoCS$)t4mg4rT8Q_I}h`0d-vYZ^|dOB*Q^S|xqTV*vIg?@fVFSmMpaw0qtTRbx} z({Pg?#{2`sc9)M5N$*N|4;^t$+QP?#mov zGVC@I*lBVrOU-%2y!7%)fAKjpEFsgQc4{amtiHb95KQEwvf<(3T<9-Zm$xIew#P22 zc2Ix|App^>v6(3L_MCU0d3W##AB0M~3D00EWoKZqsJYT(#@w$Y_H7G22M~ApVFTRHMI_3be)Lkn#0F*V8Pq zc}`Cjy$bE;FJ6H7p=0y#R>`}-m4(0F>%@P|?7fx{=R^uFdISRnZ2W_xQhD{YuR3t< z{6yxu=4~JkeA;|(J6_nv#>Nvs&FuLA&PW^he@t(UwFFE8)|a!R{`E`K`i^ZnyE4$k z;(749Ix|oi$c3QbEJ3b~D_kQsPz~fIUKym($a_7dJ?o+40*OLl^{=&oq$<#Q(yyrp z{J-FAniyAw9tPbe&IhQ|a`DqFTVQGQ&Gq3!C2==4x{6EJwiPZ8zub-iXoUtkJiG{} zPaR&}_fn8_z~(=;5lD-aPWD3z8PZS@AaUiomF!G8I}Mf>e~0g#BelA-5#`cj;O5>N Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 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..2f0909c6b7 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/static/description/index.html @@ -0,0 +1,419 @@ + + + + + + +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 Runbot

+

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 smashing it by providing a detailed and welcomed +feedback.

+

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

+
+
+

Credits

+
+

Authors

+
    +
  • Brainbean Apps
  • +
+
+ +
+

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..a064e874a4 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/tests/test_hr_timesheet_sheet_policy_department_manager.py @@ -0,0 +1,115 @@ +# 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.sudo(self.employee_user).create({ + 'company_id': self.company.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.sudo(self.employee_user).fields_view_get( + view_type='form', + ) + self.HrTimesheetSheet.sudo(self.employee_user).fields_view_get( + view_type='tree', + ) + + sheet = self.HrTimesheetSheet.sudo(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.sudo(self.employee_user).can_review) + self.assertEqual( + self.HrTimesheetSheet.sudo(self.employee_user).search_count( + [('can_review', '=', True)] + ), + 0 + ) + with self.assertRaises(UserError): + sheet.sudo(self.employee_user).action_timesheet_done() + sheet.sudo(self.department_manager_user).action_timesheet_done() + sheet.sudo(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..454b052a10 --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/views/hr_timesheet_sheet.xml @@ -0,0 +1,25 @@ + + + + + + hr_timesheet.sheet.form + hr_timesheet.sheet + + + + False + + { + 'invisible': [('review_policy', '!=', 'department_manager')], + 'required': [('review_policy', '=', 'department_manager')], + } + + + + + + From 35271384b438ef02fe8782fde48d8c724801a454 Mon Sep 17 00:00:00 2001 From: Andrea Date: Mon, 23 Dec 2019 16:25:07 +0100 Subject: [PATCH 02/21] [FIX] hr_timesheet_sheet_policy*: admin always reviewer --- hr_timesheet_sheet_policy_department_manager/__manifest__.py | 2 +- .../i18n/hr_timesheet_sheet_policy_department_manager.pot | 2 +- .../models/hr_timesheet_sheet.py | 5 +++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/hr_timesheet_sheet_policy_department_manager/__manifest__.py b/hr_timesheet_sheet_policy_department_manager/__manifest__.py index 24855134df..a5ee98afd8 100644 --- a/hr_timesheet_sheet_policy_department_manager/__manifest__.py +++ b/hr_timesheet_sheet_policy_department_manager/__manifest__.py @@ -3,7 +3,7 @@ { 'name': 'HR Timesheet Sheet: Department Manager Policy', - 'version': '12.0.1.0.0', + 'version': '12.0.1.1.0', 'author': 'Brainbean Apps, ' 'Odoo Community Association (OCA)', 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 index 186c8a85ef..5504e19859 100644 --- 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 @@ -44,7 +44,7 @@ msgid "How Timesheet Sheets review is performed." msgstr "" #. module: hr_timesheet_sheet_policy_department_manager -#: code:addons/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py:67 +#: code:addons/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py:68 #, python-format msgid "Only a Department's Manager can review the sheet." msgstr "" 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 index 75acf9d930..e4d8a7cec8 100644 --- a/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py +++ b/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py @@ -54,9 +54,10 @@ def _get_complete_name_components(self): @api.multi def _get_possible_reviewers(self): self.ensure_one() + res = super()._get_possible_reviewers() if self.review_policy == 'department_manager': - return self.department_id.manager_id.user_id - return super()._get_possible_reviewers() + res |= self.department_id.manager_id.user_id + return res @api.multi def _check_can_review(self): From ed7c21ddbd9653edf6c3937d887db2b5419ee6d0 Mon Sep 17 00:00:00 2001 From: Alexey Pelykh Date: Thu, 6 Feb 2020 12:32:30 -0800 Subject: [PATCH 03/21] [ADD] hr_timesheet_sheet_activity: automatic activities --- .../tests/test_hr_timesheet_sheet_policy_department_manager.py | 1 + 1 file changed, 1 insertion(+) 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 index a064e874a4..0145642c5c 100644 --- 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 @@ -76,6 +76,7 @@ def test_review_policy_capture(self): self.company.timesheet_sheet_review_policy = 'department_manager' sheet = self.HrTimesheetSheet.sudo(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' From 9270ed12c8b8fbca6a7bea957820d7c3e1fcc380 Mon Sep 17 00:00:00 2001 From: Josep M Date: Mon, 18 May 2020 14:50:50 +0000 Subject: [PATCH 04/21] Added translation using Weblate (Spanish) --- .../i18n/es.po | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 hr_timesheet_sheet_policy_department_manager/i18n/es.po 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..d96d654f8a --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/i18n/es.po @@ -0,0 +1,61 @@ +# 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" +"Last-Translator: Automatically generated\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" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By Department Manager" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By Direct Manager" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By HR Manager/Officer" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By Project 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,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 +#: code:addons/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py:68 +#, 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 "" From 8fff790b9d6ebea186da940361e08b1e506c1ec7 Mon Sep 17 00:00:00 2001 From: Josep M Date: Mon, 18 May 2020 14:51:05 +0000 Subject: [PATCH 05/21] Translated using Weblate (Spanish) Currently translated at 100.0% (9 of 9 strings) Translation: timesheet-12.0/timesheet-12.0-hr_timesheet_sheet_policy_department_manager Translate-URL: https://translation.odoo-community.org/projects/timesheet-12-0/timesheet-12-0-hr_timesheet_sheet_policy_department_manager/es/ --- .../i18n/es.po | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/hr_timesheet_sheet_policy_department_manager/i18n/es.po b/hr_timesheet_sheet_policy_department_manager/i18n/es.po index d96d654f8a..1f2f8d16ca 100644 --- a/hr_timesheet_sheet_policy_department_manager/i18n/es.po +++ b/hr_timesheet_sheet_policy_department_manager/i18n/es.po @@ -6,56 +6,58 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\n" +"PO-Revision-Date: 2020-05-18 17: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 #: selection:res.company,timesheet_sheet_review_policy:0 msgid "By Department Manager" -msgstr "" +msgstr "Por el responsable del departamento" #. module: hr_timesheet_sheet_policy_department_manager #: selection:res.company,timesheet_sheet_review_policy:0 msgid "By Direct Manager" -msgstr "" +msgstr "Por responsable directo" #. module: hr_timesheet_sheet_policy_department_manager #: selection:res.company,timesheet_sheet_review_policy:0 msgid "By HR Manager/Officer" -msgstr "" +msgstr "Por Reponsable de RRHH" #. module: hr_timesheet_sheet_policy_department_manager #: selection:res.company,timesheet_sheet_review_policy:0 msgid "By Project Manager" -msgstr "" +msgstr "Por responsable de proyecto" #. module: hr_timesheet_sheet_policy_department_manager #: model:ir.model,name:hr_timesheet_sheet_policy_department_manager.model_res_company msgid "Companies" -msgstr "" +msgstr "Compañias" #. 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 "" +msgstr "Cómo ser realiza la revisión de Partes de horas." #. module: hr_timesheet_sheet_policy_department_manager #: code:addons/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py:68 #, python-format msgid "Only a Department's Manager can review the sheet." -msgstr "" +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 "" +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 "" +msgstr "Política de Revisión del Parte de horas" From 0b5ee7fef66a25d18eef078274ef1a83982fa27d Mon Sep 17 00:00:00 2001 From: Josep M Date: Mon, 18 May 2020 18:11:51 +0000 Subject: [PATCH 06/21] Translated using Weblate (Spanish) Currently translated at 100.0% (9 of 9 strings) Translation: timesheet-12.0/timesheet-12.0-hr_timesheet_sheet_policy_department_manager Translate-URL: https://translation.odoo-community.org/projects/timesheet-12-0/timesheet-12-0-hr_timesheet_sheet_policy_department_manager/es/ --- .../i18n/es.po | 24 +++++++++++++++---- ...esheet_sheet_policy_department_manager.pot | 12 +++++++++- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/hr_timesheet_sheet_policy_department_manager/i18n/es.po b/hr_timesheet_sheet_policy_department_manager/i18n/es.po index 1f2f8d16ca..2908c1e4ae 100644 --- a/hr_timesheet_sheet_policy_department_manager/i18n/es.po +++ b/hr_timesheet_sheet_policy_department_manager/i18n/es.po @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * hr_timesheet_sheet_policy_department_manager +# * 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 17:19+0000\n" +"PO-Revision-Date: 2020-05-18 20:19+0000\n" "Last-Translator: Josep M \n" "Language-Team: none\n" "Language: es\n" @@ -28,7 +28,16 @@ msgstr "Por responsable directo" #. module: hr_timesheet_sheet_policy_department_manager #: selection:res.company,timesheet_sheet_review_policy:0 -msgid "By HR Manager/Officer" +#, fuzzy +#| msgid "By HR Manager/Officer" +msgid "By HR Managers" +msgstr "Por Reponsable de RRHH" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +#, fuzzy +#| msgid "By HR Manager/Officer" +msgid "By HR Officers" msgstr "Por Reponsable de RRHH" #. module: hr_timesheet_sheet_policy_department_manager @@ -36,10 +45,17 @@ msgstr "Por Reponsable de RRHH" msgid "By Project Manager" msgstr "Por responsable de proyecto" +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +#, fuzzy +#| msgid "By Direct Manager" +msgid "By Timesheets Managers" +msgstr "Por responsable directo" + #. module: hr_timesheet_sheet_policy_department_manager #: model:ir.model,name:hr_timesheet_sheet_policy_department_manager.model_res_company msgid "Companies" -msgstr "Compañias" +msgstr "Compañías" #. 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 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 index 5504e19859..d680fd7637 100644 --- 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 @@ -25,7 +25,12 @@ msgstr "" #. module: hr_timesheet_sheet_policy_department_manager #: selection:res.company,timesheet_sheet_review_policy:0 -msgid "By HR Manager/Officer" +msgid "By HR Managers" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By HR Officers" msgstr "" #. module: hr_timesheet_sheet_policy_department_manager @@ -33,6 +38,11 @@ msgstr "" msgid "By Project Manager" msgstr "" +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By Timesheets Managers" +msgstr "" + #. module: hr_timesheet_sheet_policy_department_manager #: model:ir.model,name:hr_timesheet_sheet_policy_department_manager.model_res_company msgid "Companies" From f062d4bb65549e02b86fc4a53fc5b8f0af63409f Mon Sep 17 00:00:00 2001 From: Alexey Pelykh Date: Wed, 4 Nov 2020 12:44:34 +0200 Subject: [PATCH 07/21] [UPD] Brainbean Apps => CorporateHub --- hr_timesheet_sheet_policy_department_manager/README.rst | 6 ++++-- .../__manifest__.py | 3 ++- hr_timesheet_sheet_policy_department_manager/i18n/es.po | 3 --- .../readme/CONTRIBUTORS.rst | 4 +++- .../static/description/index.html | 7 +++++-- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/hr_timesheet_sheet_policy_department_manager/README.rst b/hr_timesheet_sheet_policy_department_manager/README.rst index 6486b8a128..2802489fe1 100644 --- a/hr_timesheet_sheet_policy_department_manager/README.rst +++ b/hr_timesheet_sheet_policy_department_manager/README.rst @@ -48,12 +48,14 @@ Credits Authors ~~~~~~~ -* Brainbean Apps +* CorporateHub Contributors ~~~~~~~~~~~~ -* Alexey Pelykh +* `CorporateHub `__ + + * Alexey Pelykh Maintainers ~~~~~~~~~~~ diff --git a/hr_timesheet_sheet_policy_department_manager/__manifest__.py b/hr_timesheet_sheet_policy_department_manager/__manifest__.py index a5ee98afd8..5a41fe2014 100644 --- a/hr_timesheet_sheet_policy_department_manager/__manifest__.py +++ b/hr_timesheet_sheet_policy_department_manager/__manifest__.py @@ -1,11 +1,12 @@ # 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': '12.0.1.1.0', 'author': - 'Brainbean Apps, ' + 'CorporateHub, ' 'Odoo Community Association (OCA)', 'website': 'https://github.com/OCA/timesheet/', 'license': 'AGPL-3', diff --git a/hr_timesheet_sheet_policy_department_manager/i18n/es.po b/hr_timesheet_sheet_policy_department_manager/i18n/es.po index 2908c1e4ae..14fb750915 100644 --- a/hr_timesheet_sheet_policy_department_manager/i18n/es.po +++ b/hr_timesheet_sheet_policy_department_manager/i18n/es.po @@ -29,14 +29,12 @@ msgstr "Por responsable directo" #. module: hr_timesheet_sheet_policy_department_manager #: selection:res.company,timesheet_sheet_review_policy:0 #, fuzzy -#| msgid "By HR Manager/Officer" msgid "By HR Managers" msgstr "Por Reponsable de RRHH" #. module: hr_timesheet_sheet_policy_department_manager #: selection:res.company,timesheet_sheet_review_policy:0 #, fuzzy -#| msgid "By HR Manager/Officer" msgid "By HR Officers" msgstr "Por Reponsable de RRHH" @@ -48,7 +46,6 @@ msgstr "Por responsable de proyecto" #. module: hr_timesheet_sheet_policy_department_manager #: selection:res.company,timesheet_sheet_review_policy:0 #, fuzzy -#| msgid "By Direct Manager" msgid "By Timesheets Managers" msgstr "Por responsable directo" diff --git a/hr_timesheet_sheet_policy_department_manager/readme/CONTRIBUTORS.rst b/hr_timesheet_sheet_policy_department_manager/readme/CONTRIBUTORS.rst index 1c6a35a1e3..724bc1d03a 100644 --- a/hr_timesheet_sheet_policy_department_manager/readme/CONTRIBUTORS.rst +++ b/hr_timesheet_sheet_policy_department_manager/readme/CONTRIBUTORS.rst @@ -1 +1,3 @@ -* Alexey Pelykh +* `CorporateHub `__ + + * Alexey Pelykh diff --git a/hr_timesheet_sheet_policy_department_manager/static/description/index.html b/hr_timesheet_sheet_policy_department_manager/static/description/index.html index 2f0909c6b7..36ac7830e1 100644 --- a/hr_timesheet_sheet_policy_department_manager/static/description/index.html +++ b/hr_timesheet_sheet_policy_department_manager/static/description/index.html @@ -394,13 +394,16 @@

Credits

Authors

    -
  • Brainbean Apps
  • +
  • CorporateHub
From 4eea22e05bf5ac978968d0b7188267de51eac109 Mon Sep 17 00:00:00 2001 From: Yann Papouin Date: Wed, 27 Jan 2021 15:13:36 +0000 Subject: [PATCH 08/21] Added translation using Weblate (French) --- .../i18n/fr.po | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 hr_timesheet_sheet_policy_department_manager/i18n/fr.po 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..2fea0c8d0c --- /dev/null +++ b/hr_timesheet_sheet_policy_department_manager/i18n/fr.po @@ -0,0 +1,71 @@ +# 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" +"Last-Translator: Automatically generated\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" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By Department Manager" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By Direct Manager" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By HR Managers" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By HR Officers" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By Project Manager" +msgstr "" + +#. module: hr_timesheet_sheet_policy_department_manager +#: selection:res.company,timesheet_sheet_review_policy:0 +msgid "By Timesheets Managers" +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,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 +#: code:addons/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py:68 +#, 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 "" From d516cbdb4e090c9e5e09694b4bd4192fb59b358d Mon Sep 17 00:00:00 2001 From: Yann Papouin Date: Wed, 27 Jan 2021 15:15:06 +0000 Subject: [PATCH 09/21] Translated using Weblate (French) Currently translated at 100.0% (11 of 11 strings) Translation: timesheet-12.0/timesheet-12.0-hr_timesheet_sheet_policy_department_manager Translate-URL: https://translation.odoo-community.org/projects/timesheet-12-0/timesheet-12-0-hr_timesheet_sheet_policy_department_manager/fr/ --- .../i18n/fr.po | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/hr_timesheet_sheet_policy_department_manager/i18n/fr.po b/hr_timesheet_sheet_policy_department_manager/i18n/fr.po index 2fea0c8d0c..dc411eb95b 100644 --- a/hr_timesheet_sheet_policy_department_manager/i18n/fr.po +++ b/hr_timesheet_sheet_policy_department_manager/i18n/fr.po @@ -6,66 +6,68 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 12.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\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 #: selection:res.company,timesheet_sheet_review_policy:0 msgid "By Department Manager" -msgstr "" +msgstr "Par le responsable du département" #. module: hr_timesheet_sheet_policy_department_manager #: selection:res.company,timesheet_sheet_review_policy:0 msgid "By Direct Manager" -msgstr "" +msgstr "Par le responsable hiérarchique" #. module: hr_timesheet_sheet_policy_department_manager #: selection:res.company,timesheet_sheet_review_policy:0 msgid "By HR Managers" -msgstr "" +msgstr "Par les responsables RH" #. module: hr_timesheet_sheet_policy_department_manager #: selection:res.company,timesheet_sheet_review_policy:0 msgid "By HR Officers" -msgstr "" +msgstr "Par les agents RH" #. module: hr_timesheet_sheet_policy_department_manager #: selection:res.company,timesheet_sheet_review_policy:0 msgid "By Project Manager" -msgstr "" +msgstr "Par le responsable de projet" #. module: hr_timesheet_sheet_policy_department_manager #: selection:res.company,timesheet_sheet_review_policy:0 msgid "By Timesheets Managers" -msgstr "" +msgstr "Par les responsables des feuilles de temps" #. module: hr_timesheet_sheet_policy_department_manager #: model:ir.model,name:hr_timesheet_sheet_policy_department_manager.model_res_company msgid "Companies" -msgstr "" +msgstr "Sociétés" #. 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 "" +msgstr "Comment l'examen des relevés des feuilles de temps est effectué." #. module: hr_timesheet_sheet_policy_department_manager #: code:addons/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py:68 #, python-format msgid "Only a Department's Manager can review the sheet." -msgstr "" +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 "" +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 "" +msgstr "Politique de révision des relevés de feuilles de temps" From b0a0c68de9c735872a528ac7355034e3f1e33cd3 Mon Sep 17 00:00:00 2001 From: Ernesto Tejeda Date: Tue, 18 Jan 2022 23:00:13 -0500 Subject: [PATCH 10/21] [IMP] hr_timesheet_sheet_policy_department_manager: black, isort, prettier --- .../__manifest__.py | 26 ++- .../models/hr_timesheet_sheet.py | 54 +++--- .../models/res_company.py | 4 +- ...mesheet_sheet_policy_department_manager.py | 181 ++++++++++-------- .../views/hr_timesheet_sheet.xml | 9 +- 5 files changed, 154 insertions(+), 120 deletions(-) diff --git a/hr_timesheet_sheet_policy_department_manager/__manifest__.py b/hr_timesheet_sheet_policy_department_manager/__manifest__.py index 5a41fe2014..576ea135cf 100644 --- a/hr_timesheet_sheet_policy_department_manager/__manifest__.py +++ b/hr_timesheet_sheet_policy_department_manager/__manifest__.py @@ -3,20 +3,18 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). { - 'name': 'HR Timesheet Sheet: Department Manager Policy', - 'version': '12.0.1.1.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', + "name": "HR Timesheet Sheet: Department Manager Policy", + "version": "12.0.1.1.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', + "data": [ + "views/hr_timesheet_sheet.xml", ], - 'installable': True, + "installable": True, } 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 index e4d8a7cec8..84ec03723d 100644 --- a/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py +++ b/hr_timesheet_sheet_policy_department_manager/models/hr_timesheet_sheet.py @@ -1,20 +1,21 @@ # Copyright 2019 Brainbean Apps (https://brainbeanapps.com) # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from odoo import api, models, _ -from odoo.exceptions import UserError - import json + from lxml import etree +from odoo import _, api, models +from odoo.exceptions import UserError + class HrTimesheetSheet(models.Model): - _inherit = 'hr_timesheet.sheet' + _inherit = "hr_timesheet.sheet" @api.model - def fields_view_get(self, - view_id=None, view_type='form', toolbar=False, - submenu=False): + 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, @@ -22,24 +23,26 @@ def fields_view_get(self, 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']) + 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( + 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', '') + encoding="unicode", + ).replace("\t", "") return res @api.multi - @api.depends('department_id.manager_id.user_id') + @api.depends("department_id.manager_id.user_id") def _compute_department_manager_as_reviewer(self): self._compute_possible_reviewer_ids() @@ -47,7 +50,7 @@ def _compute_department_manager_as_reviewer(self): def _get_complete_name_components(self): self.ensure_one() result = super()._get_complete_name_components() - if self.review_policy == 'department_manager': + if self.review_policy == "department_manager": result += [self.department_id.name_get()[0][1]] return result @@ -55,7 +58,7 @@ def _get_complete_name_components(self): def _get_possible_reviewers(self): self.ensure_one() res = super()._get_possible_reviewers() - if self.review_policy == 'department_manager': + if self.review_policy == "department_manager": res |= self.department_id.manager_id.user_id return res @@ -63,8 +66,7 @@ def _get_possible_reviewers(self): def _check_can_review(self): 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.' - )) + lambda sheet: not sheet.can_review + and sheet.review_policy == "department_manager" + ): + raise UserError(_("Only a Department's Manager can review the sheet.")) diff --git a/hr_timesheet_sheet_policy_department_manager/models/res_company.py b/hr_timesheet_sheet_policy_department_manager/models/res_company.py index d22a7b1597..f85ea70997 100644 --- a/hr_timesheet_sheet_policy_department_manager/models/res_company.py +++ b/hr_timesheet_sheet_policy_department_manager/models/res_company.py @@ -5,10 +5,10 @@ class ResCompany(models.Model): - _inherit = 'res.company' + _inherit = "res.company" timesheet_sheet_review_policy = fields.Selection( selection_add=[ - ('department_manager', 'By Department Manager'), + ("department_manager", "By 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 index 0145642c5c..3083aa833c 100644 --- 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 @@ -6,98 +6,129 @@ 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.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_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' + "hr_timesheet.group_hr_timesheet_user" ) - self.group_project_user = self.env.ref('project.group_project_user') + self.group_project_user = self.env.ref("project.group_project_user") - self.company = self.ResCompany.create({ - 'name': 'Company', - }) + 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, - }) + 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.sudo(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') + self.company.timesheet_sheet_review_policy = "department_manager" + sheet = self.HrTimesheetSheet.sudo(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.company.timesheet_sheet_review_policy = "department_manager" self.HrTimesheetSheet.sudo(self.employee_user).fields_view_get( - view_type='form', + view_type="form", ) self.HrTimesheetSheet.sudo(self.employee_user).fields_view_get( - view_type='tree', + view_type="tree", ) - sheet = self.HrTimesheetSheet.sudo(self.employee_user).create({ - 'company_id': self.company.id, - 'department_id': self.department.id, - }) - self.company.timesheet_sheet_review_policy = 'hr' + sheet = self.HrTimesheetSheet.sudo(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() @@ -105,9 +136,9 @@ def test_department_manager_review_policy(self): self.assertFalse(sheet.sudo(self.employee_user).can_review) self.assertEqual( self.HrTimesheetSheet.sudo(self.employee_user).search_count( - [('can_review', '=', True)] + [("can_review", "=", True)] ), - 0 + 0, ) with self.assertRaises(UserError): sheet.sudo(self.employee_user).action_timesheet_done() 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 index 454b052a10..e1bc65a4a2 100644 --- a/hr_timesheet_sheet_policy_department_manager/views/hr_timesheet_sheet.xml +++ b/hr_timesheet_sheet_policy_department_manager/views/hr_timesheet_sheet.xml @@ -1,4 +1,4 @@ - + -

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

+

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

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

Table of contents

@@ -386,7 +386,7 @@

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 smashing it by providing a detailed and welcomed -feedback.

+feedback.

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

@@ -404,6 +404,10 @@

Contributors

  • Alexey Pelykh <alexey.pelykh@corphub.eu>
  • +
  • Tecnativa
      +
    • Ernesto Tejeda
    • +
    +
  • @@ -413,7 +417,7 @@

    Maintainers

    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.

    +

    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/test_hr_timesheet_sheet_policy_department_manager.py b/hr_timesheet_sheet_policy_department_manager/tests/test_hr_timesheet_sheet_policy_department_manager.py index 3083aa833c..c15d26ae2b 100644 --- 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 @@ -101,7 +101,7 @@ def setUp(self): def test_review_policy_capture(self): self.company.timesheet_sheet_review_policy = "department_manager" - sheet = self.HrTimesheetSheet.sudo(self.employee_user).create( + sheet = self.HrTimesheetSheet.with_user(self.employee_user).create( { "company_id": self.company.id, "department_id": self.department.id, @@ -115,14 +115,14 @@ def test_review_policy_capture(self): def test_department_manager_review_policy(self): self.company.timesheet_sheet_review_policy = "department_manager" - self.HrTimesheetSheet.sudo(self.employee_user).fields_view_get( + self.HrTimesheetSheet.with_user(self.employee_user).fields_view_get( view_type="form", ) - self.HrTimesheetSheet.sudo(self.employee_user).fields_view_get( + self.HrTimesheetSheet.with_user(self.employee_user).fields_view_get( view_type="tree", ) - sheet = self.HrTimesheetSheet.sudo(self.employee_user).create( + sheet = self.HrTimesheetSheet.with_user(self.employee_user).create( { "company_id": self.company.id, "department_id": self.department.id, @@ -133,15 +133,15 @@ def test_department_manager_review_policy(self): sheet._compute_complete_name() sheet.action_timesheet_confirm() - self.assertFalse(sheet.sudo(self.employee_user).can_review) + self.assertFalse(sheet.with_user(self.employee_user).can_review) self.assertEqual( - self.HrTimesheetSheet.sudo(self.employee_user).search_count( + self.HrTimesheetSheet.with_user(self.employee_user).search_count( [("can_review", "=", True)] ), 0, ) with self.assertRaises(UserError): - sheet.sudo(self.employee_user).action_timesheet_done() - sheet.sudo(self.department_manager_user).action_timesheet_done() - sheet.sudo(self.department_manager_user).action_timesheet_draft() + 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() From e5dc192908c75b55d0daeb8bc7c4e41cc97d6f89 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Thu, 20 Jan 2022 08:27:39 +0000 Subject: [PATCH 12/21] [UPD] Update hr_timesheet_sheet_policy_department_manager.pot --- ...esheet_sheet_policy_department_manager.pot | 44 ++++++++----------- 1 file changed, 18 insertions(+), 26 deletions(-) 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 index d680fd7637..d2edb073dd 100644 --- 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 @@ -1,12 +1,12 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * hr_timesheet_sheet_policy_department_manager +# * hr_timesheet_sheet_policy_department_manager # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 12.0\n" +"Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: <>\n" +"Last-Translator: \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -14,47 +14,40 @@ msgstr "" "Plural-Forms: \n" #. module: hr_timesheet_sheet_policy_department_manager -#: selection:res.company,timesheet_sheet_review_policy:0 +#: 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 -#: selection:res.company,timesheet_sheet_review_policy:0 -msgid "By Direct Manager" -msgstr "" - -#. module: hr_timesheet_sheet_policy_department_manager -#: selection:res.company,timesheet_sheet_review_policy:0 -msgid "By HR Managers" -msgstr "" - -#. module: hr_timesheet_sheet_policy_department_manager -#: selection:res.company,timesheet_sheet_review_policy:0 -msgid "By HR Officers" +#: model:ir.model,name:hr_timesheet_sheet_policy_department_manager.model_res_company +msgid "Companies" msgstr "" #. module: hr_timesheet_sheet_policy_department_manager -#: selection:res.company,timesheet_sheet_review_policy:0 -msgid "By Project 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 -#: selection:res.company,timesheet_sheet_review_policy:0 -msgid "By Timesheets Managers" +#: 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,name:hr_timesheet_sheet_policy_department_manager.model_res_company -msgid "Companies" +#: 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,help:hr_timesheet_sheet_policy_department_manager.field_res_company__timesheet_sheet_review_policy -msgid "How Timesheet Sheets review is performed." +#: 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:68 +#: 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 "" @@ -68,4 +61,3 @@ msgstr "" #: 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 "" - From 95b99e416696e4bb83a2713636fe6891b86240a7 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Thu, 20 Jan 2022 08:43:29 +0000 Subject: [PATCH 13/21] [UPD] README.rst --- .../static/description/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hr_timesheet_sheet_policy_department_manager/static/description/index.html b/hr_timesheet_sheet_policy_department_manager/static/description/index.html index 1396914897..dc7a3a862a 100644 --- a/hr_timesheet_sheet_policy_department_manager/static/description/index.html +++ b/hr_timesheet_sheet_policy_department_manager/static/description/index.html @@ -3,7 +3,7 @@ - + HR Timesheet Sheet: Department Manager Policy