summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXavier BOL (xbo) <xbo@odoo.com>2020-12-10 08:01:38 +0100
committerXavier BOL (xbo) <xbo@odoo.com>2020-12-21 15:35:20 +0100
commitc4331560668f1eb56852a712e502ece78701d3fe (patch)
tree857cfaa0c55214f5fb5d5e2b6f3f76c7a311dbb3
parentaba51f314324905d4d435c3283fa2361d84ad129 (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.py2
-rw-r--r--addons/sale_timesheet/models/project.py20
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"),