diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py index 46343e90a92..f9a8db8ebec 100644 --- a/addons/account/models/account_move.py +++ b/addons/account/models/account_move.py @@ -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() diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index 00bf698e923..3e36bf4518e 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -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 diff --git a/addons/purchase_requisition/models/purchase.py b/addons/purchase_requisition/models/purchase.py index b1f783feb98..f424779f898 100644 --- a/addons/purchase_requisition/models/purchase.py +++ b/addons/purchase_requisition/models/purchase.py @@ -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 diff --git a/addons/sale/models/account_invoice.py b/addons/sale/models/account_invoice.py index 43591607a45..4001d39cc37 100644 --- a/addons/sale/models/account_invoice.py +++ b/addons/sale/models/account_invoice.py @@ -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: diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py index b805f0f01f3..54b2e1bae8e 100644 --- a/addons/sale/models/sale.py +++ b/addons/sale/models/sale.py @@ -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') diff --git a/addons/sale_purchase/models/sale_order.py b/addons/sale_purchase/models/sale_order.py index 890316542a6..74356834d64 100644 --- a/addons/sale_purchase/models/sale_order.py +++ b/addons/sale_purchase/models/sale_order.py @@ -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