diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index 6325863fd26..e327798329d 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -236,7 +236,8 @@ class PurchaseOrder(models.Model): 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.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.user.company_id.currency_id.id + if not self.currency_id: + self.currency_id = self.partner_id.property_purchase_currency_id.id or self.env.user.company_id.currency_id.id return {} @api.onchange('fiscal_position_id') diff --git a/addons/purchase_requisition/models/purchase_requisition.py b/addons/purchase_requisition/models/purchase_requisition.py index 6072ee11411..03571f67dd5 100644 --- a/addons/purchase_requisition/models/purchase_requisition.py +++ b/addons/purchase_requisition/models/purchase_requisition.py @@ -76,6 +76,8 @@ class PurchaseRequisition(models.Model): account_analytic_id = fields.Many2one('account.analytic.account', 'Analytic Account') picking_type_id = fields.Many2one('stock.picking.type', 'Operation Type', required=True, default=_get_picking_in) is_quantity_copy = fields.Selection(related='type_id.quantity_copy', readonly=True) + currency_id = fields.Many2one('res.currency', 'Currency', required=True, + default=lambda self: self.env.user.company_id.currency_id.id) @api.depends('state') def _set_state(self): @@ -184,7 +186,7 @@ class PurchaseRequisition(models.Model): class SupplierInfo(models.Model): _inherit = "product.supplierinfo" _order = 'sequence, purchase_requisition_id desc, min_qty desc, price' - + purchase_requisition_id = fields.Many2one('purchase.requisition', related='purchase_requisition_line_id.requisition_id', string='Blanket order') purchase_requisition_line_id = fields.Many2one('purchase.requisition.line') @@ -300,7 +302,6 @@ class PurchaseOrder(models.Model): else: partner = requisition.vendor_id payment_term = partner.property_supplier_payment_term_id - currency = partner.property_purchase_currency_id or requisition.company_id.currency_id FiscalPosition = self.env['account.fiscal.position'] fpos = FiscalPosition.get_fiscal_position(partner.id) @@ -310,7 +311,7 @@ class PurchaseOrder(models.Model): self.fiscal_position_id = fpos.id self.payment_term_id = payment_term.id, self.company_id = requisition.company_id.id - self.currency_id = currency.id + self.currency_id = requisition.currency_id.id self.origin = requisition.name self.partner_ref = requisition.name # to control vendor bill based on agreement reference self.notes = requisition.description @@ -349,10 +350,6 @@ class PurchaseOrder(models.Model): if requisition.type_id.quantity_copy != 'copy': product_qty = 0 - # Compute price_unit in appropriate currency - if requisition.company_id.currency_id != currency: - price_unit = requisition.company_id.currency_id.compute(price_unit, currency) - # Create PO line order_line_values = line._prepare_purchase_order_line( name=name, product_qty=product_qty, price_unit=price_unit, @@ -434,4 +431,6 @@ class ProcurementRule(models.Model): res = super(ProcurementRule, self)._prepare_purchase_order(product_id, product_qty, product_uom, origin, values, partner) res['partner_ref'] = values['supplier'].purchase_requisition_id.name res['requisition_id'] = values['supplier'].purchase_requisition_id.id + if values['supplier'].purchase_requisition_id.currency_id: + res['currency_id'] = values['supplier'].purchase_requisition_id.currency_id.id return res diff --git a/addons/purchase_requisition/tests/test_purchase_requisition.py b/addons/purchase_requisition/tests/test_purchase_requisition.py index 54530a96fc0..dfa381b5caa 100644 --- a/addons/purchase_requisition/tests/test_purchase_requisition.py +++ b/addons/purchase_requisition/tests/test_purchase_requisition.py @@ -15,6 +15,7 @@ class TestPurchaseRequisition(common.TransactionCase): self.product_13_id = self.ref('product.product_product_13') self.res_partner_1_id = self.ref('base.res_partner_1') self.res_company_id = self.ref('base.main_company') + self.env.user.company_id.currency_id = self.env.ref("base.USD").id self.ResUser = self.env['res.users'] # Create a user as 'Purchase Requisition Manager' @@ -174,6 +175,7 @@ class TestPurchaseRequisition(common.TransactionCase): 'line_ids': [line1], 'type_id': requisition_type.id, 'vendor_id': vendor1.id, + 'currency_id': self.env.ref("base.USD").id, }) requisition_blanket.action_in_progress() diff --git a/addons/purchase_requisition/views/purchase_requisition_views.xml b/addons/purchase_requisition/views/purchase_requisition_views.xml index a591dd9f1ce..907dca3fe04 100644 --- a/addons/purchase_requisition/views/purchase_requisition_views.xml +++ b/addons/purchase_requisition/views/purchase_requisition_views.xml @@ -172,6 +172,7 @@ +