From a83cf2bfeb460f5b7266e4bb5171f7d18b04744f Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Tue, 6 Oct 2020 11:53:45 -0700 Subject: [PATCH 1/5] [ADD] hr_timesheet_work_entry: for Odoo 13 --- hr_timesheet_work_entry/__init__.py | 15 ++++++++++ hr_timesheet_work_entry/__manifest__.py | 22 ++++++++++++++ .../data/hr_timesheet_work_entry_data.xml | 10 +++++++ .../data/hr_timesheet_work_entry_demo.xml | 10 +++++++ hr_timesheet_work_entry/models/__init__.py | 2 ++ hr_timesheet_work_entry/models/timesheet.py | 9 ++++++ hr_timesheet_work_entry/models/work_entry.py | 7 +++++ hr_timesheet_work_entry/tests/__init__.py | 1 + .../tests/test_timesheet_work_type.py | 19 ++++++++++++ .../views/timesheet_views.xml | 30 +++++++++++++++++++ .../views/work_entry_views.xml | 23 ++++++++++++++ 11 files changed, 148 insertions(+) create mode 100644 hr_timesheet_work_entry/__init__.py create mode 100755 hr_timesheet_work_entry/__manifest__.py create mode 100644 hr_timesheet_work_entry/data/hr_timesheet_work_entry_data.xml create mode 100644 hr_timesheet_work_entry/data/hr_timesheet_work_entry_demo.xml create mode 100644 hr_timesheet_work_entry/models/__init__.py create mode 100644 hr_timesheet_work_entry/models/timesheet.py create mode 100644 hr_timesheet_work_entry/models/work_entry.py create mode 100644 hr_timesheet_work_entry/tests/__init__.py create mode 100644 hr_timesheet_work_entry/tests/test_timesheet_work_type.py create mode 100644 hr_timesheet_work_entry/views/timesheet_views.xml create mode 100644 hr_timesheet_work_entry/views/work_entry_views.xml diff --git a/hr_timesheet_work_entry/__init__.py b/hr_timesheet_work_entry/__init__.py new file mode 100644 index 00000000..6e8e0aba --- /dev/null +++ b/hr_timesheet_work_entry/__init__.py @@ -0,0 +1,15 @@ +from . import models + + +def ts_work_type_pre_init_hook(cr): + """ + This module installs a Work Entry Type with code "TS" + If you have undergone a migration (either for this module + or even your own Payslip Work Entry lines with code "TS") + then the uniqueness constraint will prevent this module + from installing. + """ + cr.execute("UPDATE hr_work_entry_type " + "SET code = 'TS-PRE-INSTALL' " + "WHERE code = 'TS';" + ) diff --git a/hr_timesheet_work_entry/__manifest__.py b/hr_timesheet_work_entry/__manifest__.py new file mode 100755 index 00000000..142814bd --- /dev/null +++ b/hr_timesheet_work_entry/__manifest__.py @@ -0,0 +1,22 @@ +{ + 'name': 'Timesheet Work Entry Type', + 'description': 'Set work types on timesheet records.', + 'version': '13.0.1.0.0', + 'website': 'https://hibou.io/', + 'author': 'Hibou Corp. ', + 'license': 'AGPL-3', + 'category': 'Human Resources', + 'depends': [ + 'hr_timesheet', + 'hr_work_entry', + ], + 'data': [ + 'data/hr_timesheet_work_entry_data.xml', + 'views/timesheet_views.xml', + 'views/work_entry_views.xml', + ], + 'demo': [ + 'data/hr_timesheet_work_entry_demo.xml', + ], + 'pre_init_hook': 'ts_work_type_pre_init_hook', +} diff --git a/hr_timesheet_work_entry/data/hr_timesheet_work_entry_data.xml b/hr_timesheet_work_entry/data/hr_timesheet_work_entry_data.xml new file mode 100644 index 00000000..cdcd2609 --- /dev/null +++ b/hr_timesheet_work_entry/data/hr_timesheet_work_entry_data.xml @@ -0,0 +1,10 @@ + + + + + Timesheet + TS + + + + \ No newline at end of file diff --git a/hr_timesheet_work_entry/data/hr_timesheet_work_entry_demo.xml b/hr_timesheet_work_entry/data/hr_timesheet_work_entry_demo.xml new file mode 100644 index 00000000..996dee41 --- /dev/null +++ b/hr_timesheet_work_entry/data/hr_timesheet_work_entry_demo.xml @@ -0,0 +1,10 @@ + + + + + Internal + TS_INTERNAL + + + + \ No newline at end of file diff --git a/hr_timesheet_work_entry/models/__init__.py b/hr_timesheet_work_entry/models/__init__.py new file mode 100644 index 00000000..1ea5c2f4 --- /dev/null +++ b/hr_timesheet_work_entry/models/__init__.py @@ -0,0 +1,2 @@ +from . import timesheet +from . import work_entry diff --git a/hr_timesheet_work_entry/models/timesheet.py b/hr_timesheet_work_entry/models/timesheet.py new file mode 100644 index 00000000..f7f3bb9d --- /dev/null +++ b/hr_timesheet_work_entry/models/timesheet.py @@ -0,0 +1,9 @@ +from odoo import api, fields, models + + +class AccountAnalyticLine(models.Model): + _inherit = 'account.analytic.line' + + work_type_id = fields.Many2one('hr.work.entry.type', string='Work Type', + default=lambda self: self.env.ref('hr_timesheet_work_entry.work_input_timesheet', + raise_if_not_found=False)) diff --git a/hr_timesheet_work_entry/models/work_entry.py b/hr_timesheet_work_entry/models/work_entry.py new file mode 100644 index 00000000..eb68353c --- /dev/null +++ b/hr_timesheet_work_entry/models/work_entry.py @@ -0,0 +1,7 @@ +from odoo import fields, models + + +class HrWorkEntryType(models.Model): + _inherit = 'hr.work.entry.type' + + allow_timesheet = fields.Boolean(string='Allow on Timesheet') diff --git a/hr_timesheet_work_entry/tests/__init__.py b/hr_timesheet_work_entry/tests/__init__.py new file mode 100644 index 00000000..962f2f44 --- /dev/null +++ b/hr_timesheet_work_entry/tests/__init__.py @@ -0,0 +1 @@ +from . import test_timesheet_work_type diff --git a/hr_timesheet_work_entry/tests/test_timesheet_work_type.py b/hr_timesheet_work_entry/tests/test_timesheet_work_type.py new file mode 100644 index 00000000..f104e3c7 --- /dev/null +++ b/hr_timesheet_work_entry/tests/test_timesheet_work_type.py @@ -0,0 +1,19 @@ +from odoo.tests import common + + +class TestTimesheetWorkType(common.TransactionCase): + def setUp(self): + super().setUp() + self.employee = self.env.ref('hr.employee_hne') + self.project = self.env.ref('project.project_project_2') + self.default_work_type = self.env.ref('hr_timesheet_work_entry.work_input_timesheet') + + def test_01_work_type(self): + timesheet = self.env['account.analytic.line'].create({ + 'name': '/', + 'employee_id': self.employee.id, + 'unit_amount': 1.0, + 'project_id': self.project.id, + }) + self.assertTrue(timesheet.work_type_id) + self.assertEqual(timesheet.work_type_id, self.default_work_type) diff --git a/hr_timesheet_work_entry/views/timesheet_views.xml b/hr_timesheet_work_entry/views/timesheet_views.xml new file mode 100644 index 00000000..c6380521 --- /dev/null +++ b/hr_timesheet_work_entry/views/timesheet_views.xml @@ -0,0 +1,30 @@ + + + + + account.analytic.line.tree.hr_timesheet.inherit + account.analytic.line + + + + + + + + + + account.analytic.line.form.inherit + account.analytic.line + + + + + + + + + diff --git a/hr_timesheet_work_entry/views/work_entry_views.xml b/hr_timesheet_work_entry/views/work_entry_views.xml new file mode 100644 index 00000000..84f76a7a --- /dev/null +++ b/hr_timesheet_work_entry/views/work_entry_views.xml @@ -0,0 +1,23 @@ + + + + + hr.work.type.view.form.inherit + hr.work.entry.type + + + + + + + + + + + + + \ No newline at end of file From e54c411080c09abdfaed17feede1fa347f04f35d Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Fri, 27 Nov 2020 14:46:28 -0800 Subject: [PATCH 2/5] [MIG] hr_timesheet_work_entry: to Odoo 14.0 --- hr_timesheet_work_entry/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hr_timesheet_work_entry/__manifest__.py b/hr_timesheet_work_entry/__manifest__.py index 142814bd..9edc5be3 100755 --- a/hr_timesheet_work_entry/__manifest__.py +++ b/hr_timesheet_work_entry/__manifest__.py @@ -1,7 +1,7 @@ { 'name': 'Timesheet Work Entry Type', 'description': 'Set work types on timesheet records.', - 'version': '13.0.1.0.0', + 'version': '14.0.1.0.0', 'website': 'https://hibou.io/', 'author': 'Hibou Corp. ', 'license': 'AGPL-3', From 7de1e9d6adaf119d7146aac9f5e863786a30d4a9 Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Sun, 21 Mar 2021 13:35:09 -0700 Subject: [PATCH 3/5] [FIX] hr_payroll_timesheet: Fixes for a database that has gone through multiple Odoo Upgrades Init will run on install, even if the module existed in the prior version. Because these init scripts are intended to clear (and maybe even re-name back on actual init of data), records we should be more generic with the intended name. Additionally, if your database already had `hr_payroll_timesheet` based 'TS' work entry codes, then we cannot delete it if it is used on records like payslips (as a work type). Delete the link to simply stop using the old record, but leave it behind to keep it working. --- hr_timesheet_work_entry/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hr_timesheet_work_entry/__init__.py b/hr_timesheet_work_entry/__init__.py index 6e8e0aba..e58c8b0b 100644 --- a/hr_timesheet_work_entry/__init__.py +++ b/hr_timesheet_work_entry/__init__.py @@ -10,6 +10,6 @@ def ts_work_type_pre_init_hook(cr): from installing. """ cr.execute("UPDATE hr_work_entry_type " - "SET code = 'TS-PRE-INSTALL' " + "SET code = 'TS-PRE-INSTALL-14' " "WHERE code = 'TS';" ) From 7b74cc5fbf74f1d5373ef1b6084a81a07cf81238 Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Thu, 2 Sep 2021 09:21:16 -0700 Subject: [PATCH 4/5] [IMP] hr_timesheet_work_entry: add permission for base users to read work types --- hr_timesheet_work_entry/__manifest__.py | 3 ++- hr_timesheet_work_entry/security/ir.model.access.csv | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 hr_timesheet_work_entry/security/ir.model.access.csv diff --git a/hr_timesheet_work_entry/__manifest__.py b/hr_timesheet_work_entry/__manifest__.py index 9edc5be3..4c2ffc92 100755 --- a/hr_timesheet_work_entry/__manifest__.py +++ b/hr_timesheet_work_entry/__manifest__.py @@ -1,7 +1,7 @@ { 'name': 'Timesheet Work Entry Type', 'description': 'Set work types on timesheet records.', - 'version': '14.0.1.0.0', + 'version': '14.0.1.0.1', 'website': 'https://hibou.io/', 'author': 'Hibou Corp. ', 'license': 'AGPL-3', @@ -11,6 +11,7 @@ 'hr_work_entry', ], 'data': [ + 'security/ir.model.access.csv', 'data/hr_timesheet_work_entry_data.xml', 'views/timesheet_views.xml', 'views/work_entry_views.xml', diff --git a/hr_timesheet_work_entry/security/ir.model.access.csv b/hr_timesheet_work_entry/security/ir.model.access.csv new file mode 100644 index 00000000..840437fa --- /dev/null +++ b/hr_timesheet_work_entry/security/ir.model.access.csv @@ -0,0 +1,2 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_hr_work_entry_type_employee,access_hr_work_entry_type_employee,model_hr_work_entry_type,base.group_user,1,0,0,0 From 79bf695ab3640d5fe5ea7be85d8ffe2476f6f5a6 Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Thu, 7 Oct 2021 09:10:12 -0700 Subject: [PATCH 5/5] [MIG] hr_timesheet_work_entry: for Odoo 15.0 --- hr_timesheet_work_entry/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hr_timesheet_work_entry/__manifest__.py b/hr_timesheet_work_entry/__manifest__.py index 4c2ffc92..60ba9dcb 100755 --- a/hr_timesheet_work_entry/__manifest__.py +++ b/hr_timesheet_work_entry/__manifest__.py @@ -1,7 +1,7 @@ { 'name': 'Timesheet Work Entry Type', 'description': 'Set work types on timesheet records.', - 'version': '14.0.1.0.1', + 'version': '15.0.1.0.0', 'website': 'https://hibou.io/', 'author': 'Hibou Corp. ', 'license': 'AGPL-3',