bemade_fsm: work for creating tasks directly from templates.
This commit is contained in:
parent
0d5935a1e4
commit
8af9704b67
5 changed files with 116 additions and 0 deletions
|
|
@ -81,3 +81,38 @@ class TaskTemplate(models.Model):
|
||||||
for rec in self:
|
for rec in self:
|
||||||
new_equipment_ids = [eq.id for eq in rec.equipment_ids if eq.partner_location_id == rec.customer]
|
new_equipment_ids = [eq.id for eq in rec.equipment_ids if eq.partner_location_id == rec.customer]
|
||||||
rec.write({'equipment_ids': [Command.set(new_equipment_ids)]})
|
rec.write({'equipment_ids': [Command.set(new_equipment_ids)]})
|
||||||
|
|
||||||
|
def _prepare_new_task_values_from_self(self, project, name=False, parent_id=False):
|
||||||
|
vals = {
|
||||||
|
'project_id': project.id,
|
||||||
|
'name': name or self.name,
|
||||||
|
'description': self.description,
|
||||||
|
'parent_id': parent_id,
|
||||||
|
'user_ids': self.assignees.ids,
|
||||||
|
'tag_ids': self.tags.ids,
|
||||||
|
'planned_hours': self.planned_hours,
|
||||||
|
'sequence': self.sequence,
|
||||||
|
'equipment_ids': [Command.set(self.equipment_ids.ids)] if self.equipment_ids else False,
|
||||||
|
'partner_id': project.partner_id and project.partner_id.id,
|
||||||
|
'company_id': self.company_id.id,
|
||||||
|
}
|
||||||
|
return vals
|
||||||
|
|
||||||
|
def create_task_from_self(self, project, name=False, parent_id=False):
|
||||||
|
""" Create a project.task from this template and return it. Can be called on a RecordSet of multiple templates.
|
||||||
|
|
||||||
|
:param project: project.project record the task should be added to
|
||||||
|
:param name: name for the new task (defaults to template name)
|
||||||
|
:param parent_id: parent task for the new task (none by default)
|
||||||
|
:return: project.task record created from this template
|
||||||
|
"""
|
||||||
|
tasks = self.env['project.task']
|
||||||
|
for rec in self:
|
||||||
|
vals = rec._prepare_new_task_values_from_self(project, name, parent_id)
|
||||||
|
task = rec.env['project.task'].create(vals)
|
||||||
|
rec.subtasks.create_task_from_self(project, name=False, parent_id=task.id)
|
||||||
|
tasks |= task
|
||||||
|
return tasks
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -78,3 +78,17 @@ class TestTaskTemplate(BemadeFSMBaseTest):
|
||||||
self.assertEqual(sol1.task_id.name, "Short Name 1")
|
self.assertEqual(sol1.task_id.name, "Short Name 1")
|
||||||
self.assertEqual(sol2.task_id.name, "Short Name 2")
|
self.assertEqual(sol2.task_id.name, "Short Name 2")
|
||||||
self.assertEqual(sol3.task_id.name, "Task")
|
self.assertEqual(sol3.task_id.name, "Task")
|
||||||
|
|
||||||
|
def test_task_creation_directly_from_template(self):
|
||||||
|
project = self.env.ref("industry_fsm.fsm_project")
|
||||||
|
template = self._generate_task_template(names=['Task', 'Child', 'Grandchild'], structure=[2, 1])
|
||||||
|
|
||||||
|
task = template.create_task_from_self(project, "My new task")
|
||||||
|
|
||||||
|
self.assertEqual(len(task.child_ids), len(template.subtasks))
|
||||||
|
self.assertEqual(len(task.child_ids[0].child_ids), len(template.subtasks[0].subtasks))
|
||||||
|
self.assertEqual(len(task.child_ids[1].child_ids), len(template.subtasks[1].subtasks))
|
||||||
|
self.assertEqual(task.name, "My new task")
|
||||||
|
self.assertEqual(task.child_ids[0].name, template.subtasks[0].name)
|
||||||
|
self.assertTrue(all([t.project_id == project for t in task | task._get_all_subtasks()]))
|
||||||
|
|
||||||
|
|
|
||||||
1
bemade_fsm/wizard/__init__.py
Normal file
1
bemade_fsm/wizard/__init__.py
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
from . import new_task_from_template
|
||||||
44
bemade_fsm/wizard/new_task_from_template.py
Normal file
44
bemade_fsm/wizard/new_task_from_template.py
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
from odoo import models, fields, api, _
|
||||||
|
from odoo.exceptions import UserError
|
||||||
|
|
||||||
|
|
||||||
|
class NewTaskFromTemplateWizard(models.TransientModel):
|
||||||
|
_name = "project.task.from.template.wizard"
|
||||||
|
|
||||||
|
project_id = fields.Many2one(
|
||||||
|
comodel_name='project.project',
|
||||||
|
string='Project',
|
||||||
|
help='The project the new task should be created in.',
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
task_template_id = fields.Many2one(
|
||||||
|
comodel_name='project.task.template',
|
||||||
|
string='Task Template',
|
||||||
|
help='The template to use when creating the new task.',
|
||||||
|
required=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
new_task_title = fields.Char(
|
||||||
|
help='The title (name) for the newly created task. If left blank, the name of the template will be used.',
|
||||||
|
)
|
||||||
|
|
||||||
|
def default_get(self, fields_list):
|
||||||
|
res = super().default_get(fields_list)
|
||||||
|
if 'project_id' in fields_list:
|
||||||
|
active_id = self.env.context.get('active_id', False)
|
||||||
|
res.update({'project_id': active_id})
|
||||||
|
return res
|
||||||
|
|
||||||
|
def action_create_task_from_template(self):
|
||||||
|
self.ensure_one()
|
||||||
|
task = self.task_template_id.create_task_from_self(self.project_id, self.new_task_title)
|
||||||
|
return {
|
||||||
|
'type': 'ir.actions.act_window',
|
||||||
|
'res_model': 'project.task',
|
||||||
|
'res_id': task.id,
|
||||||
|
'view_mode': 'form',
|
||||||
|
'target': 'current',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
22
bemade_fsm/wizard/new_task_from_template.xml
Normal file
22
bemade_fsm/wizard/new_task_from_template.xml
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<record id="project_task_from_template_wizard_view_form" model="ir.ui.view">
|
||||||
|
<field name="name">project.task.from.template.wizard.view.form</field>
|
||||||
|
<field name="model">project.task.from.template.wizard</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form>
|
||||||
|
<header>
|
||||||
|
<button name="action_create_task_from_template" type="object" string="Create Task"/>
|
||||||
|
<button special="cancel" string="Cancel"/>
|
||||||
|
</header>
|
||||||
|
<sheet>
|
||||||
|
<group>
|
||||||
|
<field name="task_template_id"/>
|
||||||
|
<field name="new_task_title"/>
|
||||||
|
<field name="project_id"/>
|
||||||
|
</group>
|
||||||
|
</sheet>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
Loading…
Reference in a new issue