From 6463755f158549535d24b2f8a7336e7c9c270f12 Mon Sep 17 00:00:00 2001 From: "Xavier BOL (xbo)" Date: Fri, 12 Mar 2021 15:20:12 +0100 Subject: [PATCH] [IMP] sale_{project,timesheet}: set SOL in project even if no partner set Before this commit, when the user configures his project and wants to set a default SOL, he must first define the customer of the project before setting the SOL. Same process for the SOL in employee mappings. This commit allows the user to choose a SOL as default SOL or the one in the employee mappings in his project even if no customer is defined into it. task-2442683 closes #66181 --- addons/sale_project/models/project.py | 2 +- addons/sale_timesheet/models/account.py | 8 ++++++-- .../models/project_sale_line_employee_map.py | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/addons/sale_project/models/project.py b/addons/sale_project/models/project.py index 449db8d2c90..29a124df9fb 100644 --- a/addons/sale_project/models/project.py +++ b/addons/sale_project/models/project.py @@ -13,7 +13,7 @@ class Project(models.Model): sale_line_id = fields.Many2one( 'sale.order.line', 'Sales Order Item', copy=False, compute="_compute_sale_line_id", store=True, readonly=False, - domain="[('is_service', '=', True), ('is_expense', '=', False), ('state', 'in', ['sale', 'done']), ('order_partner_id', '=', partner_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]", + domain="[('is_service', '=', True), ('is_expense', '=', False), ('state', 'in', ['sale', 'done']), ('order_partner_id', '=?', partner_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]", help="Sales order item to which the project is linked. Link the timesheet entry to the sales order item defined on the project. " "Only applies on tasks without sale order item defined, and if the employee is not in the 'Employee/Sales Order Item Mapping' of the project.") sale_order_id = fields.Many2one(string='Sales Order', related='sale_line_id.order_id', help="Sales order to which the project is linked.") diff --git a/addons/sale_timesheet/models/account.py b/addons/sale_timesheet/models/account.py index a04bd038e3e..56d906cf5d7 100644 --- a/addons/sale_timesheet/models/account.py +++ b/addons/sale_timesheet/models/account.py @@ -92,10 +92,14 @@ class AccountAnalyticLine(models.Model): if self.project_id.sale_line_id: return self.project_id.sale_line_id if self.task_id.allow_billable and self.task_id.sale_line_id: - if self.task_id.pricing_type in ('task_rate', 'fixed_rate') or self.task_id.partner_id != self.project_id.partner_id: + if self.task_id.pricing_type in ('task_rate', 'fixed_rate'): return self.task_id.sale_line_id else: # then pricing_type = 'employee_rate' - map_entry = self.project_id.sale_line_employee_ids.filtered(lambda map_entry: map_entry.employee_id == self.employee_id) + map_entry = self.project_id.sale_line_employee_ids.filtered( + lambda map_entry: + map_entry.employee_id == self.employee_id + and map_entry.sale_line_id.order_partner_id.commercial_partner_id == self.task_id.commercial_partner_id + ) if map_entry: return map_entry.sale_line_id return self.task_id.sale_line_id diff --git a/addons/sale_timesheet/models/project_sale_line_employee_map.py b/addons/sale_timesheet/models/project_sale_line_employee_map.py index c43c48305b0..4df0f5a5ccf 100644 --- a/addons/sale_timesheet/models/project_sale_line_employee_map.py +++ b/addons/sale_timesheet/models/project_sale_line_employee_map.py @@ -15,7 +15,7 @@ class ProjectProductEmployeeMap(models.Model): ('is_service', '=', True), ('is_expense', '=', False), ('state', 'in', ['sale', 'done']), - ('order_partner_id', '=', partner_id), + ('order_partner_id', '=?', partner_id), '|', ('company_id', '=', False), ('company_id', '=', company_id)]""") company_id = fields.Many2one('res.company', string='Company', related='project_id.company_id') partner_id = fields.Many2one(related='project_id.partner_id')