diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index 1e98c038495..12ea0583cc5 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -548,7 +548,7 @@ class PurchaseOrder(models.Model): 'seller_ids': [(0, 0, supplierinfo)], } # supplier info should be added regardless of the user access rights - line.product_id.sudo().write(vals) + line.product_id.product_tmpl_id.sudo().write(vals) def action_create_invoice(self): """Create the invoice associated to the PO. diff --git a/addons/purchase/tests/test_purchase.py b/addons/purchase/tests/test_purchase.py index decb799cbee..966f75366b1 100644 --- a/addons/purchase/tests/test_purchase.py +++ b/addons/purchase/tests/test_purchase.py @@ -372,3 +372,50 @@ class TestPurchase(AccountTestInvoicingCommon): po.button_confirm() self.assertEqual(po.order_line.product_id.seller_ids.mapped('partner_id'), delivery_address) + + def test_supplier_list_in_product_with_multicompany(self): + """ + Check that a different supplier list can be added to a product for each company. + """ + company_a = self.company_data['company'] + company_b = self.company_data_2['company'] + product = self.env['product.product'].create({ + 'name': 'product_test', + 'type': 'product', + }) + # create a purchase order in the company A + self.env['purchase.order'].with_company(company_a).create({ + 'partner_id': self.partner_a.id, + 'order_line': [(0, 0, { + 'product_id': product.id, + 'product_qty': 1, + 'product_uom': self.env.ref('uom.product_uom_unit').id, + 'price_unit': 1, + })], + }).button_confirm() + + self.assertEqual(product.seller_ids[0].partner_id, self.partner_a) + self.assertEqual(product.seller_ids[0].company_id, company_a) + + # switch to the company B + self.env['purchase.order'].with_company(company_b).create({ + 'partner_id': self.partner_b.id, + 'order_line': [(0, 0, { + 'product_id': product.id, + 'product_qty': 1, + 'product_uom': self.env.ref('uom.product_uom_unit').id, + 'price_unit': 2, + })], + }).button_confirm() + product = product.with_company(company_b) + self.assertEqual(product.seller_ids[0].partner_id, self.partner_b) + self.assertEqual(product.seller_ids[0].company_id, company_b) + + # Switch to the company A and check that the vendor list is still the same + product = product.with_company(company_a) + self.assertEqual(product.seller_ids[0].partner_id, self.partner_a) + self.assertEqual(product.seller_ids[0].company_id, company_a) + + product._invalidate_cache() + self.assertEqual(product.seller_ids[0].partner_id, self.partner_a) + self.assertEqual(product.seller_ids[0].company_id, company_a)