Skip to content

Powered by Grav CMS + Helios Theme

Selling in more than one currency

Bookings follows whatever currencies the store sells in. With one currency nothing on this page applies and nothing about the add-on looks any different. Turn on a second one in KahunaCart's currency settings and the rules below start to matter.

Where a booking's price comes from

A service has no price of its own. The price is the product's, or the option's, and you set it where you set every other price: KahunaCart → Products. The prices in the other currencies are entered on the same screen, next to the one in your own currency, so "Large dog" can be $80.00, 74.00 euros and 12,000 yen, each typed the way that currency is written.

Bookings reads those amounts and adds none of its own. There is no second price list to keep in step.

Not available in this currency

A price you did not enter is never free and never the dollar number. It means the thing cannot be bought in that currency, and everybody who meets it is told so in the same words: Not available in EUR.

The rule is the one core uses for the rest of the catalogue, with one exception that matters for classes and consultations:

  • A price of 0 with nothing else entered is free in every currency. A free introduction stays free for the visitor in euros without you doing anything.
  • A price above 0 with no amount in a currency is not available in that currency.
  • An amount you typed as 0 for a currency is free in that currency.

Here is where "not available" shows up:

  • On the booking page. An option nobody priced in the visitor's currency says "Not available in EUR" where its price would be, and picking it shows that sentence in place of the calendar. The Add to cart button does not come back, so there is nothing to hold and nothing the basket can refuse later. The page opens on the first option that can be bought.
  • In a class list. The row says it is not available in that currency and has no button.
  • At the front desk and in the admin. Booking something in a currency it has no price in is refused with the same sentence, and nothing is written.

What a visitor sees

The picker, the sessions list and the manage page all show prices in the currency the visitor is browsing in, with that currency's own decimal places: 12,000 yen with none, 55.00 euros with two. The page sends the currency back with every request, so the price on the page, the time that is held and the line in the basket are all in the same one.

The time a visitor holds is quoted in the currency they were looking at. If they switch currency in the middle, the basket refuses the held time with a sentence asking them to pick it again, because a quote of 288.00 euros is not 288.00 dollars. They pick the time again and see its price in the new currency. A time held before the store had a second currency is in your own currency, and is treated that way.

A booking is in its order's currency

Everything that happens after somebody has booked is in the currency of the order they paid with, whatever they are browsing in now and whatever your own currency is:

  • The deposit, the balance and the "paid so far" line on the receipt, the account tab, the manage page and every email.
  • A refund when somebody cancels. The amount the cancellation policy works from is in that currency and the policy is told which one.
  • A move to another time. It is priced in the booking's currency and refused, in words, if that price would change.

A fee that has no amount in the booking's currency does not apply to that booking. It is never converted from another currency. This matters for add-ons that charge a cancellation fee, such as Rentals: set the fee in each currency you want it to apply in, and leave it empty where you do not.

Taking a booking yourself

At the front desk the New booking sheet shows a row of currency buttons once the store sells in more than one. It starts on your own currency, and the prices under each service change as you press them. An option with no price in the currency you picked is greyed out and says why. Choosing the currency does not follow the visitor cookie of whoever last used the tablet: the desk always starts on your own.

The amounts at the desk are read with the currency's own decimal places. A booking in yen says To collect 9,000 yen, and cash taken for it is 9,000 and not 90.00. A desk booking has no order, so the booking itself remembers the currency it was made in.

In the admin, POST /kahunacart/bookings takes a currency the same way. With take_payment it builds the order in that currency.

Totals

Bookings never adds one currency to another. The bookings list, the calendar and every record print each amount in its own currency and nothing totals them. Reports that add things up are core's, and core totals per currency.