[FIX] sale,account,purchase_requisition: multi-company
Use correct company to get fiscal positions and properties Ensure company used to fetch fiscal positions is always the correct one when coming from a company restricted model (company_id required, or related.required). purchase: get_fiscal_position doesn't consider company_id ctxt key others: properties were accessed with potentially the wrong company.
This commit is contained in:
@@ -316,7 +316,7 @@ class AccountMove(models.Model):
|
||||
|
||||
# Find the new fiscal position.
|
||||
delivery_partner_id = self._get_invoice_delivery_partner_id()
|
||||
new_fiscal_position_id = self.env['account.fiscal.position'].get_fiscal_position(
|
||||
new_fiscal_position_id = self.env['account.fiscal.position'].with_context(force_company=self.company_id.id).get_fiscal_position(
|
||||
self.partner_id.id, delivery_id=delivery_partner_id)
|
||||
self.fiscal_position_id = self.env['account.fiscal.position'].browse(new_fiscal_position_id)
|
||||
self._recompute_dynamic_lines()
|
||||
|
||||
@@ -198,12 +198,16 @@ class PurchaseOrder(models.Model):
|
||||
|
||||
@api.onchange('partner_id', 'company_id')
|
||||
def onchange_partner_id(self):
|
||||
# Ensures all properties and fiscal positions
|
||||
# are taken with the company of the order
|
||||
# if not defined, force_company doesn't change anything.
|
||||
self = self.with_context(force_company=self.company_id.id)
|
||||
if not self.partner_id:
|
||||
self.fiscal_position_id = False
|
||||
self.payment_term_id = False
|
||||
self.currency_id = self.env.company.currency_id.id
|
||||
else:
|
||||
self.fiscal_position_id = self.env['account.fiscal.position'].with_context(company_id=self.company_id.id).get_fiscal_position(self.partner_id.id)
|
||||
self.fiscal_position_id = self.env['account.fiscal.position'].get_fiscal_position(self.partner_id.id)
|
||||
self.payment_term_id = self.partner_id.property_supplier_payment_term_id.id
|
||||
self.currency_id = self.partner_id.property_purchase_currency_id.id or self.env.company.currency_id.id
|
||||
return {}
|
||||
@@ -514,7 +518,7 @@ class PurchaseOrderLine(models.Model):
|
||||
|
||||
def _compute_tax_id(self):
|
||||
for line in self:
|
||||
fpos = line.order_id.fiscal_position_id or line.order_id.partner_id.property_account_position_id
|
||||
fpos = line.order_id.fiscal_position_id or line.order_id.partner_id.with_context(force_company=line.company_id.id).property_account_position_id
|
||||
# If company_id is set, always filter taxes by the company
|
||||
taxes = line.product_id.supplier_taxes_id.filtered(lambda r: not line.company_id or r.company_id == line.company_id)
|
||||
line.taxes_id = fpos.map_tax(taxes, line.product_id, line.order_id.partner_id) if fpos else taxes
|
||||
|
||||
@@ -23,7 +23,7 @@ class PurchaseOrder(models.Model):
|
||||
payment_term = partner.property_supplier_payment_term_id
|
||||
|
||||
FiscalPosition = self.env['account.fiscal.position']
|
||||
fpos = FiscalPosition.get_fiscal_position(partner.id)
|
||||
fpos = FiscalPosition.with_context(force_company=self.company_id.id).get_fiscal_position(partner.id)
|
||||
fpos = FiscalPosition.browse(fpos)
|
||||
|
||||
self.partner_id = partner.id
|
||||
|
||||
@@ -29,7 +29,7 @@ class AccountMove(models.Model):
|
||||
Trigger the change of fiscal position when the shipping address is modified.
|
||||
"""
|
||||
delivery_partner_id = self._get_invoice_delivery_partner_id()
|
||||
fiscal_position = self.env['account.fiscal.position'].get_fiscal_position(
|
||||
fiscal_position = self.env['account.fiscal.position'].with_context(force_company=self.company_id.id).get_fiscal_position(
|
||||
self.partner_id.id, delivery_id=delivery_partner_id)
|
||||
|
||||
if fiscal_position:
|
||||
|
||||
@@ -318,7 +318,10 @@ class SaleOrder(models.Model):
|
||||
"""
|
||||
Trigger the change of fiscal position when the shipping address is modified.
|
||||
"""
|
||||
self.fiscal_position_id = self.env['account.fiscal.position'].get_fiscal_position(self.partner_id.id, self.partner_shipping_id.id)
|
||||
self.fiscal_position_id = self.env['account.fiscal.position'].with_context(
|
||||
force_company=self.company_id.id).get_fiscal_position(
|
||||
self.partner_id.id,
|
||||
self.partner_shipping_id.id)
|
||||
return {}
|
||||
|
||||
@api.onchange('partner_id')
|
||||
|
||||
@@ -176,7 +176,7 @@ class SaleOrderLine(models.Model):
|
||||
"""
|
||||
self.ensure_one()
|
||||
partner_supplier = supplierinfo.name
|
||||
fiscal_position_id = self.env['account.fiscal.position'].sudo().with_context(company_id=self.company_id.id).get_fiscal_position(partner_supplier.id)
|
||||
fiscal_position_id = self.env['account.fiscal.position'].sudo().get_fiscal_position(partner_supplier.id)
|
||||
date_order = self._purchase_get_date_order(supplierinfo)
|
||||
return {
|
||||
'partner_id': partner_supplier.id,
|
||||
@@ -255,7 +255,9 @@ class SaleOrderLine(models.Model):
|
||||
supplier_po_map = {}
|
||||
sale_line_purchase_map = {}
|
||||
for line in self:
|
||||
line = line.with_context(force_company=line.company_id.id)
|
||||
# determine vendor of the order (take the first matching company and product)
|
||||
# VFE fixme why isn't the _select_seller function used ???
|
||||
suppliers = line.product_id.seller_ids.filtered(lambda vendor: (not vendor.company_id or vendor.company_id == line.company_id) and (not vendor.product_id or vendor.product_id == line.product_id))
|
||||
if not suppliers:
|
||||
raise UserError(_("There is no vendor associated to the product %s. Please define a vendor for this product.") % (line.product_id.display_name,))
|
||||
@@ -287,10 +289,10 @@ class SaleOrderLine(models.Model):
|
||||
|
||||
# add a PO line to the PO
|
||||
values = line._purchase_service_prepare_line_values(purchase_order, quantity=quantity)
|
||||
purchase_line = self.env['purchase.order.line'].create(values)
|
||||
purchase_line = line.env['purchase.order.line'].create(values)
|
||||
|
||||
# link the generated purchase to the SO line
|
||||
sale_line_purchase_map.setdefault(line, self.env['purchase.order.line'])
|
||||
sale_line_purchase_map.setdefault(line, line.env['purchase.order.line'])
|
||||
sale_line_purchase_map[line] |= purchase_line
|
||||
return sale_line_purchase_map
|
||||
|
||||
|
||||
Reference in New Issue
Block a user