From 405d0677bacb314644703c1dc08922ab8cb361c9 Mon Sep 17 00:00:00 2001 From: sbejaoui Date: Tue, 17 Mar 2020 17:50:09 +0100 Subject: [PATCH 1/2] [12.0][IMP] - Add failing test for creating contract grouped by contract template When creating a contract from SO, the systme should bgoup by contract template sale order lines and create one contract per contract template actually the system group by contract template but create as many contracts as many sale order lines. --- product_contract/tests/test_sale_order.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/product_contract/tests/test_sale_order.py b/product_contract/tests/test_sale_order.py index 623eb52df..2259243fe 100644 --- a/product_contract/tests/test_sale_order.py +++ b/product_contract/tests/test_sale_order.py @@ -357,3 +357,26 @@ class TestSaleOrder(TransactionCase): self.sale.action_draft() self.contract.is_terminated = False self.sale.action_draft() + + def test_order_lines_with_the_same_contract_template(self): + """ It should create one contract with two lines grouped by contract + template""" + self.product2.with_context( + force_company=self.sale.company_id.id + ).write( + { + 'is_contract': True, + 'property_contract_template_id': self.contract_template1.id, + } + ) + self.sale.order_line.onchange_product() + self.sale.action_confirm() + contracts = self.sale.order_line.mapped('contract_id') + self.assertEqual(len(contracts), 1) + self.assertEqual(len(contracts.contract_line_ids), 2) + contracts = ( + self.env['contract.line'] + .search([('sale_order_line_id', 'in', self.sale.order_line.ids)]) + .mapped('contract_id') + ) + self.assertEqual(len(contracts), 1) From 52f800740842e0151a696eabaf51162346bfb299 Mon Sep 17 00:00:00 2001 From: sbejaoui Date: Tue, 17 Mar 2020 17:56:50 +0100 Subject: [PATCH 2/2] [12.0][FIX] - fix contract creation group by contract template --- product_contract/models/sale_order.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/product_contract/models/sale_order.py b/product_contract/models/sale_order.py index c34a118eb..b35a79961 100644 --- a/product_contract/models/sale_order.py +++ b/product_contract/models/sale_order.py @@ -83,6 +83,7 @@ class SaleOrder(models.Model): 'sale_order_line_id' ) ) + contract_templates = self.env["contract.template"] for order_line in line_to_create_contract: contract_template = order_line.product_id.with_context( force_company=rec.company_id.id @@ -95,6 +96,8 @@ class SaleOrder(models.Model): rec.company_id.name ) ) + contract_templates |= contract_template + for contract_template in contract_templates: order_lines = line_to_create_contract.filtered( lambda r, template=contract_template: r.product_id.with_context(