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)