This guide explains how Odoo decides the currency of a purchase order and where it converts prices and costs, using a company that sells in pounds sterling (GBP) and buys from European suppliers in euros (EUR). The short answer: a purchase order you create by hand takes its currency from the vendor's contact, but one that Odoo generates takes it from the vendor price line stored on the product. If that line is still in GBP, the order is created in GBP and the euro price is treated as pounds, with no conversion. Setting the currency on each vendor price line fixes it.
It is written for purchasing managers, accountants and owners who run Odoo with more than one currency. The steps were verified on Odoo 19.
Before you start
- Version and edition: Odoo 19, Community or Enterprise. The currency rules below are the same in both. Automatic exchange rate updates are an Enterprise feature; in Community you enter rates yourself.
- Apps: Purchase and Inventory, plus Accounting (called Invoicing in Community) for rates and vendor bills.
- A second currency must be active. Odoo switches on its multi-currency fields by itself once more than one currency is active. Until then, the currency fields described here stay hidden.
- Access rights: the Vendor Pricelists menu needs the Purchase Administrator role, the Currencies menu needs the Accounting Administrator role, and the Settings page needs access to Settings.
- Terms used: the company currency is the currency your books are kept in, here GBP. A vendor price line is a row on a product's Purchase tab recording what one vendor charges, in a stated currency. A generated purchase order is one Odoo creates from a rule, not one a person starts.
How Odoo picks the currency of a purchase order
Odoo applies two different rules, depending on how the order comes into existence.
- Created by hand in the Purchase app: when you choose the vendor, the order takes the Supplier Currency set on that vendor's contact. If the field is empty, it uses the company currency.
- Generated by Odoo, for example when a confirmed sales order triggers a purchase through the Buy route with Replenish on Order (MTO) or through Dropship, or when a reordering rule runs: the order takes the currency of the vendor price line Odoo selected for the product.
The gap comes from how vendor price lines are created. A new line starts in the company currency and changes to the vendor's currency only when someone picks the vendor on it in a form, and only if the contact already had a Supplier Currency then. Lines added earlier, or loaded by import, usually stay in GBP. So a hand-made order for a European vendor opens in EUR while the generated one opens in GBP.
Where Odoo converts amounts
- Vendor price to order line. If the vendor price line and the order are in different currencies, Odoo converts the price at the exchange rate for the order date. If both are GBP, nothing is converted, so a euro figure stored in a GBP line lands on the order unchanged.
- Product cost to order line. When there is no usable vendor price, Odoo proposes the product's Cost, which is held in the company currency, converted into the order's currency.
- Order to stock value. Received goods are valued in GBP: Odoo converts the order price at the receipt date's rate, and once the vendor bill is posted it uses the bill's amount at the bill's rate.
- Product Cost. For products costed at average cost (AVCO) or first in, first out (FIFO), Odoo recalculates the Cost from those GBP values. Products on Standard Price keep the Cost you entered.
- Vendor bill. A bill created from the order uses the order's currency, converted at the rate for the bill date.
Each conversion uses the latest rate dated on or before the date involved, or the oldest rate if none is that early.
Fix the currency on your vendor price lines
- Open the Contacts app and open the vendor. On the Sales & Purchase tab, set Supplier Currency to EUR and save. Hand-made orders, and vendor price lines added from now on, will use EUR.
- Open the Purchase app and go to Configuration > Vendor Pricelists. A list of every vendor price line appears, with Vendor, Price and Currency columns.
- Type the vendor's name in the search bar to show only their lines.
- Tick the lines that show GBP, click the Currency cell on one of them and choose EUR. Odoo asks you to confirm before applying the change to all selected lines.
- Check each Price. Changing the currency does not convert the number, so a line that held a real GBP price needs its euro price typed in.
To fix one product, open it and change the Currency on the vendor's line in the Purchase tab. A new vendor line added there starts with the product's Cost, in GBP, as its Price, so replace it with the euro price.
Keep exchange rates up to date
- Open the Accounting app and go to Configuration > Settings. In the Currencies section, tick Automatic Currency Rates (Enterprise) and save.
- Choose the Service. Odoo suggests one from your company's country. A company in the United Kingdom gets the European Central Bank by default; HM Revenue & Customs is also in the list.
- Set Interval to Daily, Weekly or Monthly. The default, Manually, never updates on its own.
- Click the refresh icon next to Next Run to fetch today's rates straight away.
In Community, open EUR under Configuration > Currencies in Invoicing and add a line on the Rates tab, filling in either Unit per GBP (euros for one pound) or GBP per Unit (pounds for one euro).
Check that it worked
- Open EUR under Configuration > Currencies and confirm the Rates tab has a line for today or a recent date.
- Confirm a test sales order for a product bought from the European vendor through MTO or Dropship. The request for quotation it creates should be in EUR, at the euro price on the vendor line.
- Create a request for quotation by hand for the same vendor. It should also open in EUR.
Common mistakes to avoid
- Expecting the contact to fix old lines. Supplier Currency only applies when a vendor is picked on a new line.
- Switching the currency on a generated order by hand. Line prices are not recalculated when the order's currency changes, so the label becomes EUR while the numbers stay as they were.
- Two open requests for the same vendor. Odoo adds generated lines to an existing draft request only when vendor and currency match, so a leftover GBP draft and a new EUR one can sit side by side.
- A currency with no rate. Without any rate, conversion happens at 1 and every euro amount is valued as a pound.
In Odoo 20 the same currency rules apply. One addition: when no vendor price line applies, Odoo 20 can use the price and currency of the product's last confirmed purchase instead.
Steps verified on Odoo 19. Menus and labels can differ on other versions.
Common questions
Why does a purchase order created from a sales order come out in GBP instead of EUR in Odoo?
A purchase order that Odoo generates takes its currency from the vendor price line on the product, not from the vendor's contact. If that line is set to GBP, the order is created in GBP and the price is not converted.
Does setting Supplier Currency on a vendor update existing vendor prices in Odoo?
No. Supplier Currency is copied onto a vendor price line only when the vendor is picked on a new line in a form. Existing lines keep their currency until you change them, for example from Purchase > Configuration > Vendor Pricelists.
Which exchange rate does Odoo use on a purchase order?
When it converts a vendor price into the order's currency, Odoo uses the latest rate dated on or before the order date. Received goods are valued in the company currency at the receipt date's rate, and from the bill's rate once the vendor bill is posted.
Why are exchange rates not updating automatically in Odoo?
Automatic Currency Rates is an Enterprise setting, and its Interval defaults to Manually, which never runs on a schedule. Set the Interval to Daily, Weekly or Monthly, or click the refresh icon to fetch rates now.
What happens if a currency has no exchange rate in Odoo?
Odoo converts at a rate of 1, so an amount in euros is treated as the same amount in pounds. Add at least one rate on the currency's Rates tab before buying in that currency.
Talk to the team.
If you are setting this up, or Odoo is not behaving the way this guide describes, book a 30-minute call. We will look at your configuration and tell you what it needs. Calgary studio, in-house team, no offshore handoffs.
Book the call →