diff --git a/addons/project/__init__.py b/addons/project/__init__.py index a5f67aebd79..d909ba9d61d 100644 --- a/addons/project/__init__.py +++ b/addons/project/__init__.py @@ -3,3 +3,4 @@ import models import report +import wizard \ No newline at end of file diff --git a/addons/project/__manifest__.py b/addons/project/__manifest__.py index 910d29cdaad..1b8088578a7 100644 --- a/addons/project/__manifest__.py +++ b/addons/project/__manifest__.py @@ -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'], diff --git a/addons/project/data/project_data.xml b/addons/project/data/project_data.xml index 1f4148b7377..aaf98e63535 100644 --- a/addons/project/data/project_data.xml +++ b/addons/project/data/project_data.xml @@ -340,6 +340,24 @@ + + + + The following task has been merged into this one: + The following tasks have been merged into this one: + + + + + + + + This task has been merged into the following task: + + + + + diff --git a/addons/project/wizard/__init__.py b/addons/project/wizard/__init__.py new file mode 100644 index 00000000000..70db3b0ade0 --- /dev/null +++ b/addons/project/wizard/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + + +import project_task_merge_wizard diff --git a/addons/project/wizard/project_task_merge_wizard.py b/addons/project/wizard/project_task_merge_wizard.py new file mode 100644 index 00000000000..df7ce693ef3 --- /dev/null +++ b/addons/project/wizard/project_task_merge_wizard.py @@ -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 ''.join(self.task_ids.mapped(lambda task: "Description from task %s:%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 diff --git a/addons/project/wizard/project_task_merge_wizard_views.xml b/addons/project/wizard/project_task_merge_wizard_views.xml new file mode 100644 index 00000000000..6ebcc561111 --- /dev/null +++ b/addons/project/wizard/project_task_merge_wizard_views.xml @@ -0,0 +1,50 @@ + + + + project.task.merge.wizard.form + project.task.merge.wizard + + + + + + + + + + + + + + + + NB: This will archive the selected tasks (Except the destination task) + + + + + + + + + +
The following task has been merged into this one:
The following tasks have been merged into this one:
This task has been merged into the following task: