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)