Start a project
All posts

Odoo POS

Taking four currencies at one Odoo POS till

A standard Odoo POS session runs in one currency. Here is what that means in a shop where four currencies cross the counter daily, and how we solved it.

8min read

In a shop in Cyprus the money crossing the counter is not one currency. In a single day you get lira, sterling, euro and dollars. A customer hands over a hundred euro and pays the rest in lira. For the shopkeeper this is an ordinary day.

For a standard Odoo POS it is not ordinary. A POS session opens in one currency and stays in that currency for its whole life. Install the system as it comes and the only thing a cashier can do is work the conversion out in their head and type it in.

What working around it costs

Businesses hitting this for the first time usually try one of these:

  • Open a separate POS session per currency. The cashier switches session depending on the customer, the day ends with four separate closings, and a mixed payment still cannot be recorded.
  • Convert everything to one currency and enter that. The rate lives in the cashier’s head or on a piece of paper, it moves during the day, and the till never balances.
  • Keep a second record somewhere else. Foreign currency goes into a notebook and reaches accounting in the evening. This removes the reason for having a POS at all.

All three end the same way: a till that is over or short, with differences nobody can trace.

What the module does

We wrote a module for this. It does three things:

  1. Four currencies can appear on one receipt. The customer pays a hundred euro and the rest in lira; both go onto the same order and change is calculated in the right currency.
  2. Rates arrive on their own. A scheduled job pulls them from the central bank, so the cashier never types a rate. The current value is there when the shop opens.
  3. Closing separates by currency. At the end of the day you see how much lira and how much euro is in the drawer, counted separately.

Where the exchange difference goes

This is the real technical question. The rate at the moment of sale is not the rate on the day the currency reaches the bank. That difference has to land somewhere in the books.

The module fixes the rate at the moment of sale: the accounting entry is created with the rate the order was closed at. Any difference that appears later falls into the exchange difference account during bank reconciliation. This is the only way to keep the till and the books joined, and it is exactly the point where a manual process stops adding up.

Who needs this

  • Retail in tourist areas, where the money in a customer’s pocket is not one currency.
  • Border and island economies. North Cyprus is the obvious case, but the same situation exists elsewhere.
  • Businesses pricing in one currency and collecting in another, where the rate is involved in every single sale.

If you trade in a single currency you do not need this module; the standard Odoo POS already covers you. In several of the retail and café systems we have built, this module is never switched on.

Frequently asked

How many currencies are supported?

The module works with lira, dollars, euro and sterling, with rates from the North Cyprus central bank. Other currencies or another rate source can be adapted.

Does the cashier need to know the rate?

No. The rate is pulled by a scheduled job and sits on the screen. The cashier only enters how much was taken in which currency.

Does it work alongside the standard Odoo POS?

Yes. It installs on top and does not change the existing POS flow. Single-currency selling continues to work as before.

Does it create extra accounting work?

Only at setup, where the exchange difference account has to be defined. After that there is no extra work: entries are created at the moment of sale and the difference closes during reconciliation.

Related pages

Let the next project be yours.

Tell us what you have in mind; within two working days we come back with scope, timeline and a budget.