POS Multi-Currency Cash Payments
Accept cash payments in multiple currencies at your Point of Sale
Key Features
Multi-Currency Payments
Accept cash payments in any currency configured in your system. Perfect for tourist areas, duty-free shops, border towns, or any business that needs to handle multiple currencies.
Automatic Conversion & Change
Amounts are automatically converted using Odoo's exchange rates, and the change is computed in the currency the customer handed you. No manual calculations needed - the system handles everything for you.
Complete Cash Management
Full cash drawer management for each currency:
- Opening balance per currency
- Cash In/Out operations
- Closing count per currency
- Automatic difference detection
Accurate Accounting
Proper accounting entries for cash differences:
- Cash surplus → Profit account
- Cash shortage → Loss account
- Separate tracking per currency
- Full audit trail
From the Drawer to the Receipt
Cash In/Out in Any Currency
Move cash in and out of the drawer in the currency of your choice; every movement is booked on the journal of that currency.
Receipts Your Customers Understand
The receipt shows the total in the payment currency and a dedicated change block - received, due, change - in the currency handed back.
Session Overview
View opening and closing amounts for each currency directly on the POS session form.
The Sale Details report includes the same control, currency by currency.
Easy Configuration
Step 1: Create a Cash Journal with Currency
Go to Accounting → Configuration → Journals and create a new cash journal with a different currency.
⚠️ Don't forget to configure the Profit Account and Loss Account for cash difference handling!
Step 2: Create a Payment Method
Go to Point of Sale → Configuration → Payment Methods, create a new payment method of type "Cash", and link it to your new journal.
Step 3: Enable in POS Settings
Go to Point of Sale → Configuration → Settings and enable the "Multicurrency Payment" option.
Step 4: Add to your POS
In your POS configuration, add the new payment method to the available payment methods.
Use Cases
Tourist Areas
Accept USD, EUR, or any foreign currency from tourists.
Duty-Free Shops
Handle multiple currencies in airport or port shops.
Border Towns
Accept cash from customers on both sides of the border.
Technical Requirements
- Odoo Version: 19.0
- Dependencies: Point of Sale (point_of_sale)
- License: OPL-1 (Odoo Proprietary License)
- Supported Methods: Foreign-currency cash payment methods are fully supported. Foreign-currency bank journals are accepted but their amounts follow the standard accounting flow (no conversion).
Support
Need help? Contact us at odoo@natimai.solutions
www.natimai.solutions
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Point of Sale (point_of_sale)
• Discuss (mail) • Inventory (stock) • Invoicing (account) |
| Lines of code | 1594 |
| Technical Name |
pos_nm_multicurrencies |
| License | OPL-1 |
| Website | https://www.natimai.solutions |
POS Multi-Currency Cash Payments
Accept cash payments in multiple currencies at the Point of Sale, with full cash-drawer control for every currency: opening balances, cash in/out, closing counts, difference handling and automatic accounting entries.
Overview
By default, the Odoo Point of Sale only handles cash in the company currency. This module lets each cash payment method work in its own currency:
- Sell in your company currency and collect cash in USD, EUR, CHF, or any currency configured in Odoo.
- Amounts are converted automatically using the Odoo exchange rates.
- The cash drawer of every currency is controlled at opening and closing.
- Cash differences are posted automatically to the profit and loss accounts of the currency's journal.
- Session reports show the amounts by currency.
How Conversion Works
Each foreign-currency payment method is linked to a cash journal set to that currency. When such a method is used on the payment screen, the amount due is converted from the session currency into the payment currency at the rate stored in Odoo (Accounting -> Configuration -> Currencies).
The order itself remains valued in the company currency; the cash statement line created on the foreign journal keeps the amount in the journal currency. Exchange rates can be maintained manually or through Odoo's automatic currency rate services.
Requirements
- The Point of Sale application (point_of_sale).
- One cash journal per foreign currency you want to accept.
- Profit and Loss accounts configured on each foreign cash journal: they are required to post cash differences at closing.
Configuration
Create the cash journal
Go to Accounting -> Configuration -> Journals and create a journal:
- Type: Cash
- Currency: the foreign currency (for example USD)
- Profit Account and Loss Account: set both accounts, they are used to post cash differences
Create the payment method
Go to Point of Sale -> Configuration -> Payment Methods and create a method (for example Cash USD):
- Type: Cash
- Journal: the foreign-currency journal created above
Enable the feature
Go to Point of Sale -> Configuration -> Settings, select your point of sale and enable the Multicurrency Payment option.
Add the method to your Point of Sale
In the settings of your point of sale, add the new payment method to the Payment Methods list.
Daily Workflow
Opening the session
The opening control popup shows one section per foreign currency with:
- the expected balance carried over from the last closing,
- an input to record the amount actually counted in the drawer,
- the resulting difference, when the counted amount differs from the expected one.
The opening difference is recorded as a statement line on the currency's journal; profit or loss is only booked at closing.
Taking a payment in a foreign currency
On the payment screen, select the foreign-currency method: the amount due is converted and the payment line is displayed in the payment currency. The tendered amount can be edited with the numpad directly in the foreign currency.
Giving change on a foreign payment
When the customer hands more foreign cash than due, the receipt prints a dedicated block for that currency showing the received amount, the amount due and the change to give back, all expressed in the foreign currency.
Cash in / cash out
The Cash In/Out dialog gains a currency selector. Choose the currency, enter the amount and the reason: the statement line is created on the journal of that currency and included in that currency's closing figures.
Closing the session
The closing popup lists every foreign-currency method with its expected amount in the journal currency. Enter the counted amount for each currency; the difference is displayed immediately (a shortage is negative and shown in red).
When the session is validated:
- the counted amounts are stored per currency on the session,
- cash differences are posted on the foreign journal using its Profit and Loss accounts,
- amounts are converted so that the session's accounting entries balance in the company currency.
Reviewing a session
On the session form (Point of Sale -> Orders -> Sessions), a Multicurrency Cash Details table sums up each currency:
- Opening: amount counted at the session opening
- Sales: foreign cash collected through orders
- Cash In/Out: manual cash moves recorded during the session
- Expected: opening + sales + cash in/out
- Counted: amount counted at closing
- Difference: counted minus expected (a shortage is negative)
The Sale Details report also shows the amounts by currency.
Accounting Notes
- Foreign cash movements are kept out of the main-currency cash control: the main drawer figures only contain main-currency amounts.
- Opening and closing differences of a foreign currency are booked on that currency's journal.
- For foreign-currency bank methods, the closing difference entered in the popup is converted to the session currency before the standard closing process books it.
- Cash rounding rules keep applying to main-currency cash payments; foreign-currency lines are exempt from the main rounding validation.
Known Limitations
- Only foreign-currency cash payment methods are fully supported. Foreign-currency bank journals are accepted on payment methods, but the core accounting flow (account.payment on a foreign journal) does not convert amounts.
Troubleshooting
The multicurrency section does not appear at opening
- Check that the Multicurrency Payment option is enabled in the settings of this point of sale.
- Check that the payment method is of type Cash and that its journal has a Currency different from the company currency.
- Check that the payment method is added to the point of sale.
No difference entry is created at closing
Set the Profit Account and Loss Account on the foreign-currency cash journal. If you cannot see these two fields on the journal form, install the Accounting app (or check your accounting access rights): the fields exist as soon as the Point of Sale is installed, but the full journal form that displays them comes with the Accounting interface.
Converted amounts look wrong
Update the exchange rates in Accounting -> Configuration -> Currencies, or enable an automatic currency rate service.
Disclaimer
This module creates accounting entries (statement lines, cash difference postings) from your configuration: journals, profit and loss accounts, and the exchange rates stored in your database. As stated in the Odoo Proprietary License v1.0 (see the LICENSE file shipped with the module), the Software is provided "as is", without warranty of any kind.
It remains your responsibility to:
- configure the accounting correctly (journals, profit and loss accounts, exchange rates and their update frequency),
- verify with your accountant that the generated entries meet your legal and accounting requirements,
- test the module on a staging database before using it in production.
Bugs in the advertised features are handled through the support channel; the module is not a substitute for accounting advice.
Support
- Email: odoo@natimai.solutions
- Website: https://www.natimai.solutions
Please mention your Odoo version and the module version (see __manifest__.py) in support requests.
License
This module is published under the Odoo Proprietary License v1.0 (OPL-1). The full license text is shipped with the module in the LICENSE file.
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module