diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 1ca44c91072..bd445dd94a5 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -1336,6 +1336,7 @@ class procurement_order(osv.osv): pricelist_obj = self.pool.get('product.pricelist') prod_obj = self.pool.get('product.product') acc_pos_obj = self.pool.get('account.fiscal.position') + po_obj = self.pool.get('purchase.order') seller_qty = procurement.product_id.seller_qty if procurement.location_id.usage != 'customer' else 0.0 pricelist_id = partner.property_product_pricelist_purchase.id @@ -1350,7 +1351,12 @@ class procurement_order(osv.osv): new_context.update({'lang': partner.lang, 'partner_id': partner.id}) product = prod_obj.browse(cr, uid, procurement.product_id.id, context=new_context) taxes_ids = procurement.product_id.supplier_taxes_id - taxes = acc_pos_obj.map_tax(cr, uid, partner.property_account_position, taxes_ids) + # It is necessary to have the appropriate fiscal position to get the right tax mapping + fiscal_position = False + fiscal_position_id = po_obj.onchange_partner_id(cr, uid, None, partner.id, context=context)['value']['fiscal_position'] + if fiscal_position_id: + fiscal_position = acc_pos_obj.browse(cr, uid, fiscal_position_id, context=context) + taxes = acc_pos_obj.map_tax(cr, uid, fiscal_position, taxes_ids) name = product.display_name if product.description_purchase: name += '\n' + product.description_purchase @@ -1462,7 +1468,7 @@ class procurement_order(osv.osv): 'currency_id': partner.property_product_pricelist_purchase and partner.property_product_pricelist_purchase.currency_id.id or procurement.company_id.currency_id.id, 'date_order': purchase_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT), 'company_id': procurement.company_id.id, - 'fiscal_position': partner.property_account_position and partner.property_account_position.id or False, + 'fiscal_position': po_obj.onchange_partner_id(cr, uid, None, partner.id, context=context)['value']['fiscal_position'], 'payment_term_id': partner.property_supplier_payment_term.id or False, 'dest_address_id': procurement.partner_dest_id.id, }