[FIX] sale: import order line multicompany
- Admin (U1) user, Demo (U2) with Sales Manager rights - Create parent company A and child company AA, U2 has access to A (U1 to both) - Create 2 taxes, T1 for A, T2 for AA - For product P, add tax T1 in company A, and T2 in company AA - U2 creates a new SO in company A with no lines, export Order Lines/Product - U2 edits the file to add product P - U2 imports the file Before this commit, the sale order's line had the taxes for bot company After this commit, it only has the taxes for the company of the sale order OPW 2036453 closes odoo/odoo#35294 Signed-off-by: Lucas Perais (lpe) <lpe@odoo.com>
This commit is contained in:
@@ -838,7 +838,8 @@ class SaleOrderLine(models.Model):
|
||||
for line in self:
|
||||
fpos = line.order_id.fiscal_position_id or line.order_id.partner_id.property_account_position_id
|
||||
# If company_id is set, always filter taxes by the company
|
||||
taxes = line.product_id.taxes_id.filtered(lambda r: not line.company_id or r.company_id == line.company_id)
|
||||
line_company_id = line.company_id or line.order_id.company_id
|
||||
taxes = line.product_id.taxes_id.filtered(lambda r: not line_company_id or r.company_id == line_company_id)
|
||||
line.tax_id = fpos.map_tax(taxes, line.product_id, line.order_id.partner_shipping_id) if fpos else taxes
|
||||
|
||||
@api.model
|
||||
|
||||
@@ -141,3 +141,56 @@ class TestSaleOrder(TestSale):
|
||||
sol = so.order_line.filtered(lambda l: l.product_id == serv_cost)
|
||||
self.assertTrue(sol, 'Sale: cost invoicing does not add lines when confirming vendor invoice')
|
||||
self.assertEquals((sol.price_unit, sol.qty_delivered, sol.product_uom_qty, sol.qty_invoiced), (160, 2, 0, 0), 'Sale: line is wrong after confirming vendor invoice')
|
||||
|
||||
def test_so_create_multicompany(self):
|
||||
# Preparing test Data
|
||||
user_demo = self.env.ref('base.user_demo')
|
||||
company_1 = self.env.ref('base.main_company')
|
||||
company_2 = self.env['res.company'].create({
|
||||
'name': 'company 2',
|
||||
'parent_id': company_1.id,
|
||||
})
|
||||
user_demo.write({
|
||||
'groups_id': [(4, self.env.ref('sales_team.group_sale_manager').id, False)],
|
||||
'company_ids': [(6, False, [company_1.id])],
|
||||
'company_id': company_1.id,
|
||||
})
|
||||
|
||||
so_partner = self.env.ref('base.res_partner_2')
|
||||
so_partner.write({
|
||||
'property_account_position_id': False,
|
||||
})
|
||||
|
||||
tax_company_1 = self.env['account.tax'].create({
|
||||
'name': 'T1',
|
||||
'amount': 90,
|
||||
'company_id': company_1.id,
|
||||
})
|
||||
|
||||
tax_company_2 = self.env['account.tax'].create({
|
||||
'name': 'T2',
|
||||
'amount': 90,
|
||||
'company_id': company_2.id,
|
||||
})
|
||||
|
||||
product_shared = self.env['product.template'].create({
|
||||
'name': 'shared product',
|
||||
'taxes_id': [(6, False, [tax_company_1.id, tax_company_2.id])],
|
||||
})
|
||||
|
||||
# Use case
|
||||
so_1 = self.env['sale.order'].sudo(user_demo.id).create({
|
||||
'partner_id': so_partner.id,
|
||||
'company_id': company_1.id,
|
||||
})
|
||||
so_1.invalidate_cache()
|
||||
|
||||
# This is what is done when importing the csv lines (on sale.order):
|
||||
# id,order_line/product_id
|
||||
# __export__.sale_order_37_1bb960ba,Product name
|
||||
so_1.write({
|
||||
'order_line': [(0, False, {'product_id': product_shared.product_variant_id.id, 'order_id': so_1.id})],
|
||||
})
|
||||
|
||||
self.assertEqual(set(so_1.order_line.tax_id.ids), set([tax_company_1.id]),
|
||||
'Only taxes from the right company are put by default')
|
||||
|
||||
Reference in New Issue
Block a user