From 7782265a8aa0376f69afdb3271f0fa74a59aace1 Mon Sep 17 00:00:00 2001 From: jem-odoo Date: Wed, 6 Dec 2017 13:27:12 +0100 Subject: [PATCH] [IMP] sale_timesheet: add wizard to link multiple task to SO lines Adding a wizard to assign multiple task to the same sale order line. This will allow user to invoice timesheet created before SO confirmation. --- addons/sale_timesheet/__init__.py | 1 + addons/sale_timesheet/__manifest__.py | 1 + addons/sale_timesheet/wizard/__init__.py | 4 +++ .../wizard/project_task_assign_so_line.py | 29 ++++++++++++++++ .../project_task_assign_so_line_views.xml | 34 +++++++++++++++++++ 5 files changed, 69 insertions(+) create mode 100644 addons/sale_timesheet/wizard/__init__.py create mode 100644 addons/sale_timesheet/wizard/project_task_assign_so_line.py create mode 100644 addons/sale_timesheet/wizard/project_task_assign_so_line_views.xml diff --git a/addons/sale_timesheet/__init__.py b/addons/sale_timesheet/__init__.py index 3226df762b3..4480f53802e 100644 --- a/addons/sale_timesheet/__init__.py +++ b/addons/sale_timesheet/__init__.py @@ -2,5 +2,6 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. from . import models +from . import wizard from . import controllers from . import report diff --git a/addons/sale_timesheet/__manifest__.py b/addons/sale_timesheet/__manifest__.py index b9cfe6c47e0..ba22b0818f2 100644 --- a/addons/sale_timesheet/__manifest__.py +++ b/addons/sale_timesheet/__manifest__.py @@ -27,6 +27,7 @@ have real delivered quantities in sales orders. 'views/hr_timesheet_templates.xml', 'report/project_profitability_report_analysis_views.xml', 'data/sale_timesheet_filters.xml', + 'wizard/project_task_assign_so_line_views.xml', ], 'demo': [ 'data/sale_service_demo.xml', diff --git a/addons/sale_timesheet/wizard/__init__.py b/addons/sale_timesheet/wizard/__init__.py new file mode 100644 index 00000000000..dc6b755ec0a --- /dev/null +++ b/addons/sale_timesheet/wizard/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import project_task_assign_so_line diff --git a/addons/sale_timesheet/wizard/project_task_assign_so_line.py b/addons/sale_timesheet/wizard/project_task_assign_so_line.py new file mode 100644 index 00000000000..48f424f9b73 --- /dev/null +++ b/addons/sale_timesheet/wizard/project_task_assign_so_line.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class ProjectTaskAssignSOLine(models.TransientModel): + _name = 'project.task.assign.sale' + _description = "Assign Sale Order line to tasks" + + @api.model + def default_get(self, fields): + result = super(ProjectTaskAssignSOLine, self).default_get(fields) + if self._context.get('active_model') == 'project.task' and 'task_ids' in fields: + result['task_ids'] = self._context.get('active_ids', []) + return result + + sale_line_id = fields.Many2one('sale.order.line', 'Sales Order Item', domain=[('is_service', '=', True)], help="Sale order line to link to selected tasks") + partner_id = fields.Many2one('res.partner', related='sale_line_id.order_partner_id', readonly=True) + task_ids = fields.Many2many('project.task', 'project_task_assign_so_line_rel', 'task_id', 'wizard_id', string='Tasks', domain=[('parent_id', '=', False)], help="Select the tasks to assign to the Sale Order Items. You can only choose task (no sub tasks).") + + @api.multi + def action_assign_sale_line(self): + for wizard in self: + wizard.task_ids.write({ + 'sale_line_id': wizard.sale_line_id.id, + 'partner_id': wizard.partner_id.id, + }) + return {'type': 'ir.actions.act_window_close'} diff --git a/addons/sale_timesheet/wizard/project_task_assign_so_line_views.xml b/addons/sale_timesheet/wizard/project_task_assign_so_line_views.xml new file mode 100644 index 00000000000..8bc70807a6c --- /dev/null +++ b/addons/sale_timesheet/wizard/project_task_assign_so_line_views.xml @@ -0,0 +1,34 @@ + + + + + project.task.assign.sale.wizard.form + project.task.assign.sale + +
+ + + + + +
+
+
+
+
+ + + Assign Sale Order Item + ir.actions.act_window + project.task.assign.sale + form + form + + new + True + + + +