From 786fc506298cc2223cef49d3b9d44e292d8a4265 Mon Sep 17 00:00:00 2001 From: "Victor Piryns (pivi)" Date: Fri, 23 Jun 2023 15:02:48 +0000 Subject: [PATCH] [FIX] sale_project: `sale_line_id` shows SOs of child contacts Current behaviour: Sale Order Items on a task shows only SO related to the current customer, or all SO if there is no customer on the task. Expected behaviour: If we have a customer on the task, show also SOs from child contact of that customer (mirror the SO count in `Contacts` app) Steps to reproduce: - Install Contacts, Sales, Field Services - Create 4 contacts, a company, with child contact A and B, a contact C who is child of A - For each contact create an SO and confirm a field service product - Now on any task, add the company as customer. - In the Sale Order Item we can't select any of the SOs from the child contacts of the company. Reason for the problem: Since 41116c81cda0cd2fb819eae4c5f261f42e14f749 where we wanted to show all SOs when no `partner_id` was set on the task, we made use of `=?` operator which is `True` when there is no `partner_id`, but it matched only for `=` when it's not the case, not taking into account `child_of` of said contact. Fix: Extend the domain with an `OR` to take child contacts if the `partner_id` is not `False`. Affected versions: - 16.0 - saas-16.1 - saas-16.2 - saas-16.3 - master opw-3374191 closes odoo/odoo#126898 X-original-commit: 027ba2e682ba046459fc60a76e59792fa6bbeda9 Related: odoo/enterprise#43395 Signed-off-by: Xavier Bol (xbo) Signed-off-by: Piryns Victor (pivi) --- addons/sale_project/models/project.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/sale_project/models/project.py b/addons/sale_project/models/project.py index 94848307734..ef3ea821a9d 100755 --- a/addons/sale_project/models/project.py +++ b/addons/sale_project/models/project.py @@ -700,7 +700,12 @@ class ProjectTask(models.Model): 'sale.order.line', 'Sales Order Item', copy=True, tracking=True, index='btree_not_null', recursive=True, compute='_compute_sale_line', store=True, readonly=False, - domain="[('company_id', '=', company_id), ('is_service', '=', True), ('order_partner_id', '=?', partner_id), ('is_expense', '=', False), ('state', '=', 'sale')]", + domain="""[ + ('company_id', '=', company_id), + '|', ('order_partner_id', 'child_of', partner_id if partner_id else []), + ('order_partner_id', '=?', partner_id), + ('is_service', '=', True), ('is_expense', '=', False), ('state', '=', 'sale') + ]""", help="Sales Order Item to which the time spent on this task will be added in order to be invoiced to your customer.\n" "By default the sales order item set on the project will be selected. In the absence of one, the last prepaid sales order item that has time remaining will be used.\n" "Remove the sales order item in order to make this task non billable. You can also change or remove the sales order item of each timesheet entry individually.")