From d63e9c71d1f4c7b964d7007319f553533d04e255 Mon Sep 17 00:00:00 2001 From: "Abderraouf Ghrissi (abgh)" Date: Tue, 5 Sep 2023 14:05:54 +0000 Subject: [PATCH] [FIX] sale_timesheet: default_service_policy not working in product form Before this commit: - There is a bug in odoo enterprise. project.project form view > invoicing notebook > services created using create and edit should be configured by default with an 'invoicing policy' set to 'based on timesheets'. Technically, while we're using 'default_service_policy' with the right value, we're getting a different value in the form. After this commit: - The bug is fixed. closes odoo/odoo#134552 X-original-commit: 6bb68d9f3263c2154eb87ec22559d142e880c084 Signed-off-by: Xavier Bol (xbo) Signed-off-by: Abderraouf Ghrissi (abgh) --- addons/sale_project/models/product.py | 6 ++++++ addons/sale_timesheet/models/product.py | 2 +- addons/sale_timesheet/tests/test_project.py | 6 +++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/addons/sale_project/models/product.py b/addons/sale_project/models/product.py index 29dd9a66f03..7cfbaf95443 100644 --- a/addons/sale_project/models/product.py +++ b/addons/sale_project/models/product.py @@ -194,6 +194,12 @@ class ProductProduct(models.Model): elif self.service_tracking in ['task_in_project', 'project_only']: self.project_id = False + def _inverse_service_policy(self): + for product in self: + if product.service_policy: + + product.invoice_policy, product.service_type = self.product_tmpl_id._get_service_to_general(product.service_policy) + @api.onchange('type') def _onchange_type(self): res = super(ProductProduct, self)._onchange_type() diff --git a/addons/sale_timesheet/models/product.py b/addons/sale_timesheet/models/product.py index 0742b9de4ba..2871736bb43 100644 --- a/addons/sale_timesheet/models/product.py +++ b/addons/sale_timesheet/models/product.py @@ -147,7 +147,7 @@ class ProductProduct(models.Model): @api.onchange('service_policy') def _onchange_service_policy(self): - self.product_tmpl_id._inverse_service_policy() + self._inverse_service_policy() vals = self.product_tmpl_id._get_onchange_service_policy_updates(self.service_tracking, self.service_policy, self.project_id, diff --git a/addons/sale_timesheet/tests/test_project.py b/addons/sale_timesheet/tests/test_project.py index 7ae87f7c12f..cf923b6c1e0 100644 --- a/addons/sale_timesheet/tests/test_project.py +++ b/addons/sale_timesheet/tests/test_project.py @@ -3,7 +3,7 @@ from odoo import Command from .common import TestCommonSaleTimesheet -from odoo.tests import tagged +from odoo.tests import tagged, Form @tagged('post_install', '-at_install') @@ -176,3 +176,7 @@ class TestProject(TestCommonSaleTimesheet): }) self.assertEqual(self.project_global.analytic_account_balance, expected_analytic_account_balance) + + def test_open_product_form_with_default_service_policy(self): + form = Form(self.env['product.product'].with_context(default_detailed_type='service', default_service_policy='delivered_timesheet')) + self.assertEqual('delivered_timesheet', form.service_policy)