[IMP] sale_timesheet_work_entry_rate: unset should behave as it if were 1.0 multiplier

This commit is contained in:
Jared Kipe
2021-09-02 09:20:49 -07:00
parent 7304d614e7
commit 1bff9199fb
4 changed files with 32 additions and 5 deletions

View File

@@ -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',

View File

@@ -12,4 +12,11 @@
<field name="timesheet_billing_rate" eval="2.0"/>
</record>
<record id="work_input_timesheet_free" model="hr.work.entry.type">
<field name="name">Non-Productive Time</field>
<field name="code">TS_NON_PRODUCTIVE</field>
<field name="allow_timesheet" eval="True"/>
<field name="timesheet_billing_rate" eval="0.0"/>
</record>
</odoo>

View File

@@ -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

View File

@@ -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)