From 5b9c56afa61679d62ccf163916b6ddb6117982db Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Thu, 2 Sep 2021 09:20:49 -0700 Subject: [PATCH 1/2] [IMP] sale_timesheet_work_entry_rate: unset should behave as it if were 1.0 multiplier --- sale_timesheet_work_entry_rate/__manifest__.py | 2 +- .../data/hr_timesheet_work_entry_demo.xml | 7 +++++++ sale_timesheet_work_entry_rate/models/sale.py | 12 ++++++++---- .../tests/test_sale_flow.py | 16 ++++++++++++++++ 4 files changed, 32 insertions(+), 5 deletions(-) diff --git a/sale_timesheet_work_entry_rate/__manifest__.py b/sale_timesheet_work_entry_rate/__manifest__.py index 6e789dd5..dad1c3e1 100644 --- a/sale_timesheet_work_entry_rate/__manifest__.py +++ b/sale_timesheet_work_entry_rate/__manifest__.py @@ -2,7 +2,7 @@ { 'name': 'Timesheet Billing Rate', - 'version': '14.0.1.0.0', + 'version': '14.0.1.0.1', 'category': 'Sale', 'author': 'Hibou Corp.', 'license': 'OPL-1', diff --git a/sale_timesheet_work_entry_rate/data/hr_timesheet_work_entry_demo.xml b/sale_timesheet_work_entry_rate/data/hr_timesheet_work_entry_demo.xml index 2ad38d6a..49f72be2 100644 --- a/sale_timesheet_work_entry_rate/data/hr_timesheet_work_entry_demo.xml +++ b/sale_timesheet_work_entry_rate/data/hr_timesheet_work_entry_demo.xml @@ -12,4 +12,11 @@ + + Non-Productive Time + TS_NON_PRODUCTIVE + + + + \ No newline at end of file diff --git a/sale_timesheet_work_entry_rate/models/sale.py b/sale_timesheet_work_entry_rate/models/sale.py index f98ad71f..75963dab 100644 --- a/sale_timesheet_work_entry_rate/models/sale.py +++ b/sale_timesheet_work_entry_rate/models/sale.py @@ -41,8 +41,13 @@ class SaleOrderLine(models.Model): for item in data: if not item['product_uom_id']: continue - if not item['work_type_id']: - continue + work_type_rate = False + if item['work_type_id']: + work_type_rate = work_type_map.get(item['work_type_id'][0]).timesheet_billing_rate + if work_type_rate is False: + # unset field should be 1.0 by default, you CAN set it to 0.0 if you'd like. + work_type_rate = 1.0 + so_line_id = item['so_line'][0] so_line = lines_map[so_line_id] result.setdefault(so_line_id, 0.0) @@ -52,8 +57,7 @@ class SaleOrderLine(models.Model): else: qty = item['unit_amount'] - work = work_type_map.get(item['work_type_id'][0]) - qty *= work.timesheet_billing_rate or 0.0 + qty *= work_type_rate result[so_line_id] += qty return result diff --git a/sale_timesheet_work_entry_rate/tests/test_sale_flow.py b/sale_timesheet_work_entry_rate/tests/test_sale_flow.py index 302c12c6..21d00490 100644 --- a/sale_timesheet_work_entry_rate/tests/test_sale_flow.py +++ b/sale_timesheet_work_entry_rate/tests/test_sale_flow.py @@ -94,3 +94,19 @@ class TestSaleFlow(TestProjectBilling): 'work_type_id': double_rate_work_entry_type.id, }) self.assertEqual(task.sale_line_id.qty_delivered, 150.0) + + # Ensure that a created timesheet WITHOUT a work entry type behaves + # the same as it would have before this module (e.g. for historic reasons) + timesheet2.write({ + 'work_type_id': False, + }) + self.assertEqual(task.sale_line_id.qty_delivered, 150.0) + + # Ensure we can bill zero even with above default. + zero_rate_work_entry_type = self.env.ref('sale_timesheet_work_entry_rate.work_input_timesheet_free') + self.assertEqual(zero_rate_work_entry_type.timesheet_billing_rate, 0.0) + + timesheet2.write({ + 'work_type_id': zero_rate_work_entry_type.id, + }) + self.assertEqual(task.sale_line_id.qty_delivered, 100.0) From 5e790738c85df3e5aecccf705f2ded0e7ccca014 Mon Sep 17 00:00:00 2001 From: Jared Kipe Date: Thu, 2 Sep 2021 09:21:16 -0700 Subject: [PATCH 2/2] [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