[FIX] sale: small cleanup of line computations

Initially a forward-port of 5aecd365d7b, which needed f407e60ad680371 to work.

The do_in_onchange was removed inbetween, but it is not needed anymore here.
The issue was caused by the fact that the cache values given for each
environment, whereas in the new ORM the values are now shared across all.

The other potential issue caught by this test was that the company of the taxes
could be incorrect. This is problematic for the end user, since relational that
violates inter-company rules mean that they won't be able to read or write
the records without sudo. However the model now has _check_company_auto,
handled by the ORM, so the issue should not arise anymore.

closes odoo/odoo#38543

X-original-commit: 30cf4b37327ac86584c3025d8fa11b4094f9cbda
Signed-off-by: Nans Lefebvre (len) <len@odoo.com>
This commit is contained in:
Nans Lefebvre
2019-10-11 20:19:01 +00:00
committed by fw-bot
parent 60534c65ae
commit 25004a958d
2 changed files with 3 additions and 20 deletions
+1 -2
View File
@@ -1064,8 +1064,7 @@ 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
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)
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
+2 -18
View File
@@ -265,23 +265,13 @@ class TestSaleOrder(TestCommonSaleNoChart):
'Taxes should be applied')
def test_so_create_multicompany(self):
# Preparing test Data
"""Check that only taxes of the right company are applied on the lines."""
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',
@@ -300,16 +290,10 @@ class TestSaleOrder(TestCommonSaleNoChart):
'taxes_id': [(6, False, [tax_company_1.id, tax_company_2.id])],
})
# Use case
so_1 = self.env['sale.order'].with_user(user_demo.id).create({
'partner_id': so_partner.id,
'partner_id': self.env.ref('base.res_partner_2').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})],
})