Selling in more than one currency
A store that sells in one currency can skip this page. Everything here is about the case where the carrier account and the order are in different currencies, which happens when one store sells in several.
Two currencies, two jobs
A carrier account is billed in one currency, chosen when you opened it. It quotes in it, and it charges you for a label in it, whatever the order being shipped was sold in. So this add-on keeps two currencies apart from the moment it asks a carrier for a price:
- The account's currency is what the carrier is asked in and what a label costs you. It is a setting on the driver's own tab, Account currency, as a three-letter code such as
USDorEUR. Left empty it is your store's own (base) currency, which is what every store was quoted in before there was a setting. - The order's currency is what the customer pays in. It is chosen when the cart is made and never changes.
On a store that sells in one currency, and has its carrier account in it, the two are the same and nothing on this page happens.
Sendcloud accounts are billed in the currency of the country they ship from: euros for most, pounds for a UK account. Set Account currency on the Sendcloud tab to match. A UK shop selling in pounds then sees nothing on this page either, but a shop that sells only in dollars with a pound account gets no Sendcloud prices at checkout, for the reason below.
Quotes at checkout
A quote in the customer's currency is used as it is. A quote in any other currency is skipped. Nothing is converted, because inventing a rate would charge a customer a number nobody agreed to, so nothing is relabelled and nothing is guessed.
In practice:
- The account and the cart are in the same currency. Rates come back and are offered, exactly as before.
- They are different. The carrier is not asked at all, because the answer could only be thrown away after using up part of the checkout's time. Every method bound to that carrier is shown unavailable with the reason "This service cannot be quoted in the currency of this order", and your fallback method carries the order, the same way it does when a carrier is down.
- A store that sells in several currencies therefore shows live carrier rates on the carts that match the account's currency, and the fallback method on the rest. Give the fallback method an amount in each currency on core's Shipping screen so those carts have something to pay.
The skip is written to Grav's log once per request at debug level, naming the carrier and both currencies. It is one line however many services or rates were skipped, because it is the add-on working as designed and not a problem.
Labels
A label is what you pay the carrier, so it is asked for and bought in the account's currency, whatever the order was sold in. A euro order can be labelled from a dollar account.
- The Buy label sheet prices each service in the account's currency and says so on the button.
- The label row keeps what the carrier charged in
cost_minorand the currency it was charged in incurrency. The Labels list, the label card and the refund question all print that cost in the label's own currency with that currency's own decimal places, so a label in yen and a label in dollars sit side by side correctly. - A figure that adds up label costs has to be one per currency. There is none in this add-on today, and if you total them in a report, keep the currencies apart.
- The order's own currency is left alone. The customer's postage is on the order in the order's currency, and the two numbers are different on purpose.
The customs form
A customs declaration says what the goods were sold for, so it is in the order's currency, with the order's amounts, whatever the account is in. Earlier versions said USD on every store, whatever the order was in: the right amount with the wrong currency beside it.
Insurance
This add-on does not request insurance from any carrier, so there is no insured value to convert.
The demo carrier
The demo has no account to be billed by. With its Currency it quotes in left empty it quotes in whatever currency the cart is in, so a demo store can show carrier rates in every currency it sells in. It quotes the same number of minor units in each and never converts. Type a currency code and it behaves like a real account in that currency: its rates show only on carts in it.
Related
- Carriers - what a carrier account is and how a method binds to one
- Labels - what the Buy label button does
- Customs - what an international parcel needs
- Settings reference - the
account_currencysetting for each driver - Currencies - how a store is set up to sell in more than one