[IMP] project: add a wizard to merge tasks
This wizard allows the users to merge some task in a new task or an existing one A user and a project are taken by default but may be configurable on the wizard. The other tasks are archived. A message is posted on the tasks to report the target and a message is posted on the target to report the origin tasks.
This commit is contained in:
@@ -3,3 +3,4 @@
|
||||
|
||||
import models
|
||||
import report
|
||||
import wizard
|
||||
@@ -45,6 +45,7 @@ Dashboard / Reports for Project Management will include:
|
||||
'views/tour_views.xml',
|
||||
'data/web_planner_data.xml',
|
||||
'data/project_mail_template_data.xml',
|
||||
'wizard/project_task_merge_wizard_views.xml',
|
||||
],
|
||||
'qweb': ['static/src/xml/project.xml'],
|
||||
'demo': ['data/project_demo.xml'],
|
||||
|
||||
@@ -340,6 +340,24 @@
|
||||
<field name="displayed_image_id" ref="msg_task_data_14_attach"/>
|
||||
</record>
|
||||
|
||||
|
||||
</data>
|
||||
<template id="mail_template_task_merge">
|
||||
<t t-if="target">
|
||||
<t t-if="len(tasks) == 1"><p>The following task has been merged into this one:</p></t>
|
||||
<t t-if="len(tasks) > 1"><p>The following tasks have been merged into this one:</p></t>
|
||||
<ul>
|
||||
<t t-foreach="tasks" t-as="task">
|
||||
<li><a href="#" t-att-data-oe-model="task._name" t-att-data-oe-id="task.id"><t t-esc="task.name"/></a></li>
|
||||
</t>
|
||||
</ul>
|
||||
</t>
|
||||
<t t-if="not target">
|
||||
<p>This task has been merged into the following task:</p>
|
||||
<ul>
|
||||
<li><a href="#" t-att-data-oe-model="task._name" t-att-data-oe-id="task.id"><t t-esc="task.name"/></a></li>
|
||||
</ul>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
</odoo>
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
|
||||
import project_task_merge_wizard
|
||||
@@ -0,0 +1,63 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class ProjectTaskMergeWizard(models.TransientModel):
|
||||
_name = 'project.task.merge.wizard'
|
||||
|
||||
task_ids = fields.Many2many('project.task', string="Tasks to Merge", required=True)
|
||||
user_id = fields.Many2one('res.users', string="Assigned to", required=True)
|
||||
create_new_task = fields.Boolean('Create a new task')
|
||||
target_task_name = fields.Char('New task name')
|
||||
target_project_id = fields.Many2one('project.project', string="Target Project")
|
||||
target_task_id = fields.Many2one('project.task', string="Merge into an existing task")
|
||||
|
||||
@api.multi
|
||||
def merge_tasks(self):
|
||||
values = {
|
||||
'user_id': self.user_id.id,
|
||||
'description': self.merge_description(),
|
||||
}
|
||||
if self.create_new_task:
|
||||
values.update({
|
||||
'name': self.target_task_name,
|
||||
'project_id': self.target_project_id.id
|
||||
})
|
||||
self.target_task_id = self.env['project.task'].create(values)
|
||||
else:
|
||||
self.target_task_id.write(values)
|
||||
self.target_task_id.message_post_with_view(
|
||||
self.env.ref('project.mail_template_task_merge'),
|
||||
values={'target': True, 'tasks': self.task_ids - self.target_task_id},
|
||||
subtype_id=self.env.ref('mail.mt_comment').id
|
||||
)
|
||||
(self.task_ids - self.target_task_id).message_post_with_view(
|
||||
self.env.ref('project.mail_template_task_merge'),
|
||||
values={'target': False, 'task': self.target_task_id},
|
||||
subtype_id=self.env.ref('mail.mt_comment').id
|
||||
)
|
||||
(self.task_ids - self.target_task_id).write({'active': False})
|
||||
return {
|
||||
"type": "ir.actions.act_window",
|
||||
"res_model": "project.task",
|
||||
"views": [[False, "form"]],
|
||||
"res_id": self.target_task_id.id,
|
||||
}
|
||||
|
||||
@api.multi
|
||||
def merge_description(self):
|
||||
return '<br/>'.join(self.task_ids.mapped(lambda task: "Description from task <b>%s</b>:<br/>%s" % (task.name, task.description or 'No description')))
|
||||
|
||||
@api.model
|
||||
def default_get(self, fields):
|
||||
result = super(ProjectTaskMergeWizard, self).default_get(fields)
|
||||
selected_tasks = self.env['project.task'].browse(self.env.context.get('active_ids', False))
|
||||
assigned_tasks = selected_tasks.filtered(lambda task: task.user_id)
|
||||
result.update({
|
||||
'task_ids': [(4, task.id) for task in selected_tasks],
|
||||
'user_id': assigned_tasks and assigned_tasks[0].user_id.id or False,
|
||||
'target_project_id': selected_tasks[0].project_id.id,
|
||||
'target_task_id': selected_tasks[0].id
|
||||
})
|
||||
return result
|
||||
@@ -0,0 +1,50 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<record id="project_task_merge_wizard_form" model="ir.ui.view">
|
||||
<field name='name'>project.task.merge.wizard.form</field>
|
||||
<field name='model'>project.task.merge.wizard</field>
|
||||
<field name='arch' type='xml'>
|
||||
<form string='Merge Tasks'>
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="user_id"/>
|
||||
<field name="task_ids" widget="many2many_tags"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="create_new_task"/>
|
||||
<field name="target_task_name" attrs="{'invisible': [('create_new_task', '=', False)], 'required': [('create_new_task', '=', True)]}"/>
|
||||
<field name="target_project_id" attrs="{'invisible': [('create_new_task', '=', False)], 'required': [('create_new_task', '=', True)]}"/>
|
||||
<field name="target_task_id" attrs="{'invisible': [('create_new_task', '=', True)], 'required': [('create_new_task', '=', False)]}"/>
|
||||
</group>
|
||||
</group>
|
||||
<span class="text-muted">NB: This will archive the selected tasks (Except the destination task)</span>
|
||||
</sheet>
|
||||
<footer>
|
||||
<button name='merge_tasks' string='Merge Tasks' class='oe_highlight' type='object'/>
|
||||
<button special="cancel" string="Cancel" type="object" class="btn btn-default oe_inline"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<act_window
|
||||
id="project_task_actions_act_window_merge_tasks"
|
||||
res_model="project.task.merge.wizard"
|
||||
src_model="project.task"
|
||||
target="new"
|
||||
multi="True"
|
||||
key2="client_action_multi"
|
||||
view_mode="form"
|
||||
name="Merge Selected Tasks"/>
|
||||
|
||||
<act_window
|
||||
id="project_task_actions_act_window_merge_tasks"
|
||||
res_model="project.task.merge.wizard"
|
||||
src_model="project.task"
|
||||
target="new"
|
||||
multi="False"
|
||||
key2="client_action_multi"
|
||||
view_mode="form"
|
||||
name="Merge Selected Tasks"/>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user