diff --git a/addons/sale_project/models/sale_order_line.py b/addons/sale_project/models/sale_order_line.py index 9a9a69d41df..06bdf6a19cf 100644 --- a/addons/sale_project/models/sale_order_line.py +++ b/addons/sale_project/models/sale_order_line.py @@ -18,12 +18,12 @@ class SaleOrderLine(models.Model): is_service = fields.Boolean("Is a Service", compute='_compute_is_service', store=True, compute_sudo=True, help="Sales Order item should generate a task and/or a project, depending on the product settings.") reached_milestones_ids = fields.One2many('project.milestone', 'sale_line_id', string='Reached Milestones', domain=[('is_reached', '=', True)]) - @api.depends('product_id') + @api.depends('product_id.type') def _compute_is_service(self): for so_line in self: so_line.is_service = so_line.product_id.type == 'service' - @api.depends('product_id') + @api.depends('product_id.type') def _compute_product_updatable(self): for line in self: if line.product_id.type == 'service' and line.state == 'sale': diff --git a/addons/sale_project/tests/test_sale_project.py b/addons/sale_project/tests/test_sale_project.py index 1371f009e29..813b73fcf0c 100644 --- a/addons/sale_project/tests/test_sale_project.py +++ b/addons/sale_project/tests/test_sale_project.py @@ -152,3 +152,24 @@ class TestSaleProject(TransactionCase): self.assertEqual(task.sale_line_id, sale_line_1_order_2) self.assertIn(task.sale_line_id, self.project_global._get_sale_order_items()) self.assertEqual(self.project_global._get_sale_orders(), sale_order | sale_order_2) + + def test_sol_product_type_update(self): + partner = self.env['res.partner'].create({'name': "Mur en brique"}) + sale_order = self.env['sale.order'].with_context(tracking_disable=True).create({ + 'partner_id': partner.id, + 'partner_invoice_id': partner.id, + 'partner_shipping_id': partner.id, + }) + self.product_order_service3.type = 'consu' + sale_order_line = self.env['sale.order.line'].create({ + 'order_id': sale_order.id, + 'name': self.product_order_service3.name, + 'product_id': self.product_order_service3.id, + 'product_uom_qty': 5, + 'product_uom': self.product_order_service3.uom_id.id, + 'price_unit': self.product_order_service3.list_price + }) + self.assertFalse(sale_order_line.is_service, "As the product is consumable, the SOL should not be a service") + + self.product_order_service3.type = 'service' + self.assertTrue(sale_order_line.is_service, "As the product is a service, the SOL should be a service")