diff options
| author | Xavier BOL (xbo) <xbo@odoo.com> | 2020-12-10 08:01:38 +0100 |
|---|---|---|
| committer | Xavier BOL (xbo) <xbo@odoo.com> | 2020-12-21 15:35:20 +0100 |
| commit | c4331560668f1eb56852a712e502ece78701d3fe (patch) | |
| tree | 857cfaa0c55214f5fb5d5e2b6f3f76c7a311dbb3 | |
| parent | aba51f314324905d4d435c3283fa2361d84ad129 (diff) | |
[IMP] sale_project,sale_timesheet: set the last SOL of customer
When the customer is set in the task form, we apply the compute, if the
compute doesn't find a SOL, then we search the last SOL of this customer
set and whose remaining hours > 0 to give this SOL to the current task.
task-2409761
| -rw-r--r-- | addons/sale_project/models/project.py | 2 | ||||
| -rw-r--r-- | addons/sale_timesheet/models/project.py | 20 |
2 files changed, 21 insertions, 1 deletions
diff --git a/addons/sale_project/models/project.py b/addons/sale_project/models/project.py index 02eed4af3aa..b2895679d75 100644 --- a/addons/sale_project/models/project.py +++ b/addons/sale_project/models/project.py @@ -48,7 +48,7 @@ class ProjectTask(models.Model): task.partner_id = task.project_id.sale_line_id.order_partner_id super()._compute_partner_id() - @api.depends('partner_id.commercial_partner_id', 'sale_line_id.order_partner_id.commercial_partner_id', 'parent_id.sale_line_id', 'project_id.sale_line_id') + @api.depends('commercial_partner_id', 'sale_line_id.order_partner_id.commercial_partner_id', 'parent_id.sale_line_id', 'project_id.sale_line_id') def _compute_sale_line(self): for task in self: if not task.sale_line_id: diff --git a/addons/sale_timesheet/models/project.py b/addons/sale_timesheet/models/project.py index db984cfd22d..597b858ded6 100644 --- a/addons/sale_timesheet/models/project.py +++ b/addons/sale_timesheet/models/project.py @@ -294,6 +294,12 @@ class ProjectTask(models.Model): elif not task.sale_order_id: task.sale_order_id = False + @api.depends('commercial_partner_id', 'sale_line_id.order_partner_id.commercial_partner_id', 'parent_id.sale_line_id', 'project_id.sale_line_id') + def _compute_sale_line(self): + super(ProjectTask, self)._compute_sale_line() + for task in self.filtered(lambda t: not t.sale_line_id): + task.sale_line_id = task._get_last_sol_of_customer() + @api.depends('project_id.sale_line_employee_ids') def _compute_is_project_map_empty(self): for task in self: @@ -352,6 +358,20 @@ class ProjectTask(models.Model): return res + def _get_last_sol_of_customer(self): + # Get the last SOL made for the customer in the current task where we need to compute + self.ensure_one() + if not self.commercial_partner_id or not self.allow_billable: + return False + domain = [('is_service', '=', True), ('order_partner_id', 'child_of', self.commercial_partner_id.id), ('is_expense', '=', False), ('state', 'in', ['sale', 'done'])] + if self.project_id.bill_type == 'customer_type' and self.project_sale_order_id: + domain.append(('order_id', '=?', self.project_sale_order_id.id)) + sale_lines = self.env['sale.order.line'].search(domain) + for line in sale_lines: + if line.remaining_hours_available and line.remaining_hours > 0: + return line + return False + def action_make_billable(self): return { "name": _("Create Sales Order"), |
