bemade_fsm: add equipment to Task Templates & flow down to tasks on SO. Fixes #50
This commit is contained in:
parent
a4a998e012
commit
565446ee9d
6 changed files with 37 additions and 15 deletions
|
|
@ -98,6 +98,7 @@ class SaleOrderLine(models.Model):
|
||||||
vals['user_ids'] = template.assignees.ids
|
vals['user_ids'] = template.assignees.ids
|
||||||
vals['tag_ids'] = template.tags.ids
|
vals['tag_ids'] = template.tags.ids
|
||||||
vals['planned_hours'] = template.planned_hours
|
vals['planned_hours'] = template.planned_hours
|
||||||
|
vals['equipment_id'] = template.equipment_id.id
|
||||||
return vals
|
return vals
|
||||||
|
|
||||||
tmpl = self.product_id.task_template_id
|
tmpl = self.product_id.task_template_id
|
||||||
|
|
@ -111,6 +112,7 @@ class SaleOrderLine(models.Model):
|
||||||
"This task has been created from: <a href=# data-oe-model=sale.order data-oe-id=%d>%s</a> (%s)") % (
|
"This task has been created from: <a href=# data-oe-model=sale.order data-oe-id=%d>%s</a> (%s)") % (
|
||||||
self.order_id.id, self.order_id.name, self.product_id.name)
|
self.order_id.id, self.order_id.name, self.product_id.name)
|
||||||
task.message_post(body=task_msg)
|
task.message_post(body=task_msg)
|
||||||
task.equipment_id = self.order_id.equipment_id
|
if not task.equipment_id:
|
||||||
|
task.equipment_id = self.order_id.equipment_id
|
||||||
task.name = _generate_task_name(tmpl)
|
task.name = _generate_task_name(tmpl)
|
||||||
return task
|
return task
|
||||||
|
|
|
||||||
|
|
@ -4,21 +4,27 @@ from odoo import models, fields, api, _
|
||||||
class TaskTemplate(models.Model):
|
class TaskTemplate(models.Model):
|
||||||
_name = 'project.task.template'
|
_name = 'project.task.template'
|
||||||
_description = "Template for new project tasks"
|
_description = "Template for new project tasks"
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _current_company(self):
|
def _current_company(self):
|
||||||
return self.env.company
|
return self.env.company
|
||||||
|
|
||||||
name = fields.Char(string="Task Title", required=True)
|
name = fields.Char(string="Task Title", required=True)
|
||||||
description = fields.Html(string="Description")
|
description = fields.Html(string="Description")
|
||||||
assignees = fields.Many2many("res.users", string="Default Assignees", help="Employees assigned to tasks created from this template.")
|
assignees = fields.Many2many("res.users", string="Default Assignees",
|
||||||
customer = fields.Many2one("res.partner", string="Default Customer", help="Default customer for tasks created from this template.")
|
help="Employees assigned to tasks created from this template.")
|
||||||
project = fields.Many2one("project.project", string="Default Project", help="Default project for tasks created from this template.")
|
customer = fields.Many2one("res.partner", string="Default Customer",
|
||||||
tags = fields.Many2many("project.tags", string="Default Tags", help="Default tags for tasks created from this template.")
|
help="Default customer for tasks created from this template.")
|
||||||
|
project = fields.Many2one("project.project", string="Default Project",
|
||||||
|
help="Default project for tasks created from this template.")
|
||||||
|
tags = fields.Many2many("project.tags", string="Default Tags",
|
||||||
|
help="Default tags for tasks created from this template.")
|
||||||
parent = fields.Many2one("project.task.template", string="Parent Task Template", ondelete='cascade')
|
parent = fields.Many2one("project.task.template", string="Parent Task Template", ondelete='cascade')
|
||||||
subtasks = fields.One2many("project.task.template", inverse_name="parent", string="Subtask Templates")
|
subtasks = fields.One2many("project.task.template", inverse_name="parent", string="Subtask Templates")
|
||||||
sequence = fields.Integer(string="Sequence")
|
sequence = fields.Integer(string="Sequence")
|
||||||
company_id = fields.Many2one("res.company", string="Company", index=1, default=_current_company)
|
company_id = fields.Many2one("res.company", string="Company", index=1, default=_current_company)
|
||||||
planned_hours = fields.Float("Initially Planned Hours")
|
planned_hours = fields.Float("Initially Planned Hours")
|
||||||
|
equipment_id = fields.Many2one(comodel_name="bemade_fsm.equipment", string="Equipment", )
|
||||||
|
|
||||||
def action_open_task(self):
|
def action_open_task(self):
|
||||||
return {
|
return {
|
||||||
|
|
@ -28,5 +34,3 @@ class TaskTemplate(models.Model):
|
||||||
'type': 'ir.actions.act_window',
|
'type': 'ir.actions.act_window',
|
||||||
'context': self._context
|
'context': self._context
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ class TestEquipmentBase(TestEquipmentCommon):
|
||||||
self.equipment.name
|
self.equipment.name
|
||||||
|
|
||||||
|
|
||||||
@tagged('-at_install', 'post_install')
|
@tagged('-at_install', 'post_install', 'slow')
|
||||||
class TestEquipmentTours(HttpCase, TestEquipmentCommon):
|
class TestEquipmentTours(HttpCase, TestEquipmentCommon):
|
||||||
|
|
||||||
def test_equipment_base_tour(self):
|
def test_equipment_base_tour(self):
|
||||||
|
|
|
||||||
|
|
@ -10,10 +10,19 @@ class TestSalesOrder(TestTaskTemplateCommon):
|
||||||
cls.partner = cls.env['res.partner'].create({
|
cls.partner = cls.env['res.partner'].create({
|
||||||
'name': 'Test Partner',
|
'name': 'Test Partner',
|
||||||
})
|
})
|
||||||
|
cls.equipment =cls.env['bemade_fsm.equipment'].create({
|
||||||
|
'name': 'test equipment',
|
||||||
|
'partner_location_id': cls.partner.id,
|
||||||
|
})
|
||||||
|
cls.so_equipment = cls.env['bemade_fsm.equipment'].create({
|
||||||
|
'name': 'test equipment 2',
|
||||||
|
'partner_location_id': cls.partner.id,
|
||||||
|
})
|
||||||
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 1',
|
'client_order_ref': 'TEST ORDER 1',
|
||||||
'state': 'draft',
|
'state': 'draft',
|
||||||
|
'equipment_id': cls.so_equipment.id,
|
||||||
})
|
})
|
||||||
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,
|
||||||
|
|
@ -90,12 +99,18 @@ class TestSalesOrder(TestTaskTemplateCommon):
|
||||||
|
|
||||||
def test_order_confirmation_equipment(self):
|
def test_order_confirmation_equipment(self):
|
||||||
so = self.sale_order1
|
so = self.sale_order1
|
||||||
equipment = self.env['bemade_fsm.equipment'].create(
|
self.assertEqual(so.equipment_id, so.equipment_id)
|
||||||
{'name': 'test equipment', 'partner_location_id': so.partner_shipping_id.id})
|
self.assertFalse(so.order_line[0].product_id.task_template_id.equipment_id)
|
||||||
so.equipment_id = equipment.id
|
|
||||||
so.action_confirm()
|
so.action_confirm()
|
||||||
task = so.order_line[0].task_id
|
task = so.order_line.filtered(lambda l: not l.product_id.task_template_id.equipment_id).task_id
|
||||||
self.assertTrue(task.equipment_id == equipment)
|
self.assertEqual(task.equipment_id, self.so_equipment)
|
||||||
|
|
||||||
|
def test_task_template_with_equipment_flow(self):
|
||||||
|
so = self.sale_order1
|
||||||
|
self.product_task_global_project.task_template_id.equipment_id = self.equipment
|
||||||
|
so.action_confirm()
|
||||||
|
task = so.order_line.filtered(lambda l: l.product_id.task_template_id.equipment_id).task_id
|
||||||
|
self.assertEqual(task.equipment_id, self.equipment)
|
||||||
|
|
||||||
def test_task_mark_done(self):
|
def test_task_mark_done(self):
|
||||||
so = self.sale_order2
|
so = self.sale_order2
|
||||||
|
|
@ -112,7 +127,7 @@ class TestSalesOrder(TestTaskTemplateCommon):
|
||||||
self.assertFalse(child_task.sale_order_id)
|
self.assertFalse(child_task.sale_order_id)
|
||||||
|
|
||||||
|
|
||||||
@tagged("-at_install", "post_install", 'focus')
|
@tagged("-at_install", "post_install", "slow")
|
||||||
class TestSaleOrderTour(HttpCase, TestSalesOrder):
|
class TestSaleOrderTour(HttpCase, TestSalesOrder):
|
||||||
def test_sale_order_tour_no_invoice_button_for_non_manager(self):
|
def test_sale_order_tour_no_invoice_button_for_non_manager(self):
|
||||||
# Make sure a non-manager cannot mark a task as ready to invoice
|
# Make sure a non-manager cannot mark a task as ready to invoice
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,7 @@ class TestTaskTemplate(TestTaskTemplateCommon):
|
||||||
test = self.grandchild_task.name
|
test = self.grandchild_task.name
|
||||||
|
|
||||||
|
|
||||||
@tagged('-at_install', 'post_install')
|
@tagged('-at_install', 'post_install', 'slow')
|
||||||
class TestTaskTemplateTour(HttpCase, TestTaskTemplateCommon):
|
class TestTaskTemplateTour(HttpCase, TestTaskTemplateCommon):
|
||||||
|
|
||||||
def test_task_template_tour(self):
|
def test_task_template_tour(self):
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
<field name="customer"/>
|
<field name="customer"/>
|
||||||
|
<field name="equipment_id" domain="[('partner_location_id', '=', customer)]"/>
|
||||||
<field name="tags" widget="many2many_tags"/>
|
<field name="tags" widget="many2many_tags"/>
|
||||||
<field name="company_id" />
|
<field name="company_id" />
|
||||||
</group>
|
</group>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue