bemade_fsm: Added logic to prevent child FSM tasks from trying to create sales orders. Fixes #5.
This commit is contained in:
parent
866f650ffe
commit
07b0f992a4
4 changed files with 45 additions and 2 deletions
|
|
@ -32,8 +32,7 @@
|
||||||
'sale',
|
'sale',
|
||||||
'sale_project',
|
'sale_project',
|
||||||
'sale_stock',
|
'sale_stock',
|
||||||
'industry_fsm',
|
'industry_fsm_stock',
|
||||||
'industry_fsm_sale',
|
|
||||||
'industry_fsm_report',
|
'industry_fsm_report',
|
||||||
'bemade_partner_root_ancestor',
|
'bemade_partner_root_ancestor',
|
||||||
'mail',
|
'mail',
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,10 @@ class Task(models.Model):
|
||||||
inverse="_inverse_contacts",
|
inverse="_inverse_contacts",
|
||||||
store=True)
|
store=True)
|
||||||
|
|
||||||
|
# Override related field to make it return false if this is an FSM subtask
|
||||||
|
allow_billable = fields.Boolean(string="Can be billed",
|
||||||
|
related=False,
|
||||||
|
compute="_compute_allow_billable",)
|
||||||
@api.depends('sale_line_id.order_id.site_contacts', 'sale_line_id.order_id.work_order_contacts')
|
@api.depends('sale_line_id.order_id.site_contacts', 'sale_line_id.order_id.work_order_contacts')
|
||||||
def _compute_contacts(self):
|
def _compute_contacts(self):
|
||||||
""" The work order contacts and site contacts for a given task are taken from the sale order if the task
|
""" The work order contacts and site contacts for a given task are taken from the sale order if the task
|
||||||
|
|
@ -45,3 +49,11 @@ class Task(models.Model):
|
||||||
'work_order_contacts': [Command.set(rec.work_order_contacts.ids)],
|
'work_order_contacts': [Command.set(rec.work_order_contacts.ids)],
|
||||||
'site_contacts': [Command.set(rec.site_contacts.ids)],
|
'site_contacts': [Command.set(rec.site_contacts.ids)],
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@api.depends('parent_id', 'project_id')
|
||||||
|
def _compute_allow_billable(self):
|
||||||
|
for rec in self:
|
||||||
|
if rec.parent_id and rec.project_id and rec.project_id.is_fsm:
|
||||||
|
rec.allow_billable = False
|
||||||
|
else:
|
||||||
|
rec.allow_billable = rec.project_id.allow_billable
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ class TestSalesOrder(TestTaskTemplateCommon):
|
||||||
cls.sale_order1 = cls.env['sale.order'].create({
|
cls.sale_order1 = cls.env['sale.order'].create({
|
||||||
'partner_id': cls.partner.id,
|
'partner_id': cls.partner.id,
|
||||||
'client_order_ref': 'TEST ORDER',
|
'client_order_ref': 'TEST ORDER',
|
||||||
|
'state': 'draft',
|
||||||
})
|
})
|
||||||
cls.sol_serv_order = cls.env['sale.order.line'].create({
|
cls.sol_serv_order = cls.env['sale.order.line'].create({
|
||||||
'name': cls.product_task_global_project.name,
|
'name': cls.product_task_global_project.name,
|
||||||
|
|
@ -36,6 +37,7 @@ class TestSalesOrder(TestTaskTemplateCommon):
|
||||||
cls.sale_order2 = cls.env['sale.order'].create({
|
cls.sale_order2 = cls.env['sale.order'].create({
|
||||||
'partner_id': cls.partner.id,
|
'partner_id': cls.partner.id,
|
||||||
'client_order_ref': 'TEST ORDER',
|
'client_order_ref': 'TEST ORDER',
|
||||||
|
'state': 'draft',
|
||||||
})
|
})
|
||||||
cls.sol_tree_order = cls.env['sale.order.line'].create({
|
cls.sol_tree_order = cls.env['sale.order.line'].create({
|
||||||
'name': cls.product_task_tree_global_project.name,
|
'name': cls.product_task_tree_global_project.name,
|
||||||
|
|
@ -95,3 +97,17 @@ class TestSalesOrder(TestTaskTemplateCommon):
|
||||||
so.action_confirm()
|
so.action_confirm()
|
||||||
task = so.order_line[0].task_id
|
task = so.order_line[0].task_id
|
||||||
self.assertTrue(task.equipment_id == equipment)
|
self.assertTrue(task.equipment_id == equipment)
|
||||||
|
|
||||||
|
def test_task_mark_done(self):
|
||||||
|
so = self.sale_order2
|
||||||
|
so.action_confirm()
|
||||||
|
sol = so.order_line[0]
|
||||||
|
parent_task = sol.task_id
|
||||||
|
child_task = parent_task.child_ids[0]
|
||||||
|
# Marking the top-level tasks done should set the delivered quantity to some non-zero value based on the UOM
|
||||||
|
parent_task.action_fsm_validate()
|
||||||
|
sol._compute_qty_delivered()
|
||||||
|
self.assertTrue(sol.qty_delivered != 0)
|
||||||
|
# Marking a child task done should not create a sale order
|
||||||
|
child_task.action_fsm_validate()
|
||||||
|
self.assertFalse(child_task.sale_order_id)
|
||||||
|
|
@ -20,6 +20,12 @@ class TestTaskTemplateCommon(FSMManagerUserTransactionCase):
|
||||||
|
|
||||||
cls.project = cls.env['project.project'].create({
|
cls.project = cls.env['project.project'].create({
|
||||||
'name': 'Test Project',
|
'name': 'Test Project',
|
||||||
|
'allow_material': True,
|
||||||
|
'allow_timesheets': True,
|
||||||
|
'allow_subtasks': True,
|
||||||
|
'allow_quotations': True,
|
||||||
|
'allow_worksheets': True,
|
||||||
|
'is_fsm': True,
|
||||||
})
|
})
|
||||||
cls.product_task_global_project = cls.env['product.product'].create({
|
cls.product_task_global_project = cls.env['product.product'].create({
|
||||||
'name': 'Test Product 1',
|
'name': 'Test Product 1',
|
||||||
|
|
@ -29,9 +35,16 @@ class TestTaskTemplateCommon(FSMManagerUserTransactionCase):
|
||||||
'task_template_id': cls.task1.id,
|
'task_template_id': cls.task1.id,
|
||||||
'uom_id': hours_uom.id,
|
'uom_id': hours_uom.id,
|
||||||
'uom_po_id': hours_uom.id,
|
'uom_po_id': hours_uom.id,
|
||||||
|
'service_policy': 'delivered_manual',
|
||||||
})
|
})
|
||||||
cls.project_template = cls.env['project.project'].create({
|
cls.project_template = cls.env['project.project'].create({
|
||||||
'name': 'Test Project Template',
|
'name': 'Test Project Template',
|
||||||
|
'allow_material': True,
|
||||||
|
'allow_timesheets': True,
|
||||||
|
'allow_subtasks': True,
|
||||||
|
'allow_quotations': True,
|
||||||
|
'allow_worksheets': True,
|
||||||
|
'is_fsm': True,
|
||||||
})
|
})
|
||||||
cls.product_task_in_project = cls.env['product.product'].create({
|
cls.product_task_in_project = cls.env['product.product'].create({
|
||||||
'name': 'Test Product 2',
|
'name': 'Test Product 2',
|
||||||
|
|
@ -41,6 +54,7 @@ class TestTaskTemplateCommon(FSMManagerUserTransactionCase):
|
||||||
'project_template_id': cls.project_template.id,
|
'project_template_id': cls.project_template.id,
|
||||||
'uom_po_id': hours_uom.id,
|
'uom_po_id': hours_uom.id,
|
||||||
'uom_id': hours_uom.id,
|
'uom_id': hours_uom.id,
|
||||||
|
'service_policy': 'delivered_manual',
|
||||||
})
|
})
|
||||||
|
|
||||||
# Set up a task template tree with 2 children and 1 grandchild
|
# Set up a task template tree with 2 children and 1 grandchild
|
||||||
|
|
@ -70,6 +84,7 @@ class TestTaskTemplateCommon(FSMManagerUserTransactionCase):
|
||||||
'service_tracking': 'task_global_project',
|
'service_tracking': 'task_global_project',
|
||||||
'project_id': cls.project.id,
|
'project_id': cls.project.id,
|
||||||
'task_template_id': cls.parent_task.id,
|
'task_template_id': cls.parent_task.id,
|
||||||
|
'service_policy': 'delivered_manual',
|
||||||
'uom_id': hours_uom.id,
|
'uom_id': hours_uom.id,
|
||||||
'uom_po_id': hours_uom.id,
|
'uom_po_id': hours_uom.id,
|
||||||
})
|
})
|
||||||
|
|
@ -81,6 +96,7 @@ class TestTaskTemplateCommon(FSMManagerUserTransactionCase):
|
||||||
'project_template_id': cls.project_template.id,
|
'project_template_id': cls.project_template.id,
|
||||||
'uom_po_id': hours_uom.id,
|
'uom_po_id': hours_uom.id,
|
||||||
'uom_id': hours_uom.id,
|
'uom_id': hours_uom.id,
|
||||||
|
'service_policy': 'delivered_manual',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue