Currency Conversion

Let's face it, the internet doesn't just sell to our neighbors down the street, it can literally connect you to the whole world. Last we checked, there are hundreds of currencies and thousands of countries. It's hard to address them all. We've provided the framework for simplified currency conversion in Drupal Commerce core. But we've also built a framework that has already enabled lots of solutions to popup on drupal.org as free currency conversion solutions.

In the next section we outline how one might convert currencies using only Drupal Commerce, but we admit plainly that this has a very limited use-case. The exercise is intended to teach you how to deal with the pricing rules that every major ecommerce shop is going to use. Directly below, we've listed a few other options you have available to meet your currency conversion requirements:

Enable Multiple Currencies

Before you can make a single rule or product into a different currency, you will need to enable a few of the currencies on the backend. Below we show you how to do that.

Enable Multiple Currencies

Multiple Currencies

Just like if you were translating content, you have to enable multiple currencies before you can convert them. To get started, you must navigate to the Store Configuration screen and click Currency Settings.

  • Administration
  • Store
  • Configure

Enable a couple of currencies for fun

Currency Settings

Here on the currency settings page, all you can really do is enable currencies and set the default currency.

You can then select which currency you want for your product

Edit Product

You can then select which currency you want for your product.

Enable Currency. It's that simple

Multiple Currencies

When you've got currencies enabled you can do all sorts of interesting things with prices.

Static Currency Exchange Rate

Converting from one currency to another is possible through Rules. We recommend using only core for this if you want the conversion rate to be input as a static variable. For example, you simply want to say that 1 US dollar is equal to .76 Euros, that would be a fine and relatively easy thing to produce using rules.

Below we work through an entire exercise where we use Rules to create such a scenario as mentioned above.

Let's create a static currency conversion for these products!

Original Pricing

The original pricing is shown here for three products. Our goal is to create a rule that affects the prices and changes the currency. Note that you need to enable a few other currencies to make this work.

First, Navigate to Product pricing rules

Product Pricing Rules

The first step is to click on Store and then "Configuration" and, finally, Product Pricing Rules. That is where the magic all happens when dealing with currency exchange.

Click on Add a Pricing Rule and Add event

Pricing Rule

We need to click on add a pricing rule. If this is your first time on this screen, maybe navigate around and look at how some of these other rules are setup. If this is your first time dealing with Rules, we highly recommend additional tutorials.

<div>
<ul class="screenshot_breadcrumbs">
        <li class="first">Administration</li>
        <li>Store</li>
        <li>Product Pricing Rules</li>
        <li class="last">Click Add a Price</li>
</ul>
</div>

Name your new rules so that it makes sense to you.

Name Rule

After you have created a name, click "Add Condition."

Write or find the following code: commerce-line-item:commerce-unit-price:currency-code

Data Comparison

After clicking "Add Condition…"

You will want to choose "Data Comparison" and then select "commerce-line-item:commerce-unit-price:currency-code" using the object navigator.

Choose the currency you want to convert. For our example, we are converting US $ to something else.

Currency to Filter

Note that we are creating a filter that will only allow US dollars into our actions. Without this filter, all line items would go through this rule.

Select multiply to change the unit price.

Convert Numbers

Click "Add Action"

In order to actually create a currency conversion we need to do a little math. This next step is where you add the currency exchange rate.

The current currency exchange is 0.76 EUR to 1 US Dollars. So we multiply by 0.76

Doing the Exchange

If you had 1 US dollar, how much would that equal in your other currency? It changes, but for our exercise we're going to assume a static number works for us. (Dynamic currency conversion is possible with Commerce Multicurrency).

Create a new action using the convert to new currency rule.

Convert Currency Symbol

Click Add Action.

Select "Convert the unit price to a different currency" so that we can actually convert the currency from US dollars to a new currency. This exchange is only going to change the currency symbol, it will not actually tweak the numbers.

<ul class="screenshot_breadcrumbs">
    <li class="first">Administration</li>
    <li>Store</li>
    <li>Product Pricing Rules</li>
    <li class="last">Click Add Action</li>
</ul>

Select the final currency destination. For our example, it will be EUR.

Final Currency

We are simply selecting the final currency symbol. You can safely ignore the data selector.

<ul class="screenshot_breadcrumbs">
    <li class="first">Administration</li>
    <li>Store</li>
    <li>Product Pricing Rules</li>
    <li>Click Add Action</li>
    <li class="last">Select Currency Symbol</li>
</ul>

Final rule screen for Static Currency Exchange Rate.

Final Screen

The final screen for the rule. If your screen doesn't look like this, go through the steps above carefully.

<ul class="screenshot_breadcrumbs">
    <li class="first">Administration</li>
    <li>Store</li>
    <li>Product Pricing Rules</li>
    <li class="last">Review Custom Rule</li>
</ul>

Notice how the cart and the product page show the converted price.

Example Cart

We have not modified any of the products prices, but we have successfully converted all of the currency to Euros and exchanged the prices. For example, Product Three is listed as $32 US dollars in the database, but is listed here as 7,60 Euros.

Found errors? Think you can improve this documentation? edit this page