ERPNext - Auto fetching currency rate from openexchange.org

Currencies are fluctuating, every day, every hour. It is hard to track the changes manually. Here we pull the latest currency values from openexchange.org and keep the system updated

 · 2 min read

Vector Illustration Currency Exchange Concept. Online Mobile Bitcoin  Exchange. Businessman Happy With Bitcoin Funding Investment. Vector  Illustration In A Flat Style Royalty Free SVG, Cliparts, Vectors, And Stock  Illustration. Image 141854778.

In this article, we are fetching the latest currency exchange rates from Open Exchange Rates (https://openexchangerates.org/ ) and update automatically in the ERPNext Currency Exchange doctype

--------------------------


The Currency Exchange doctype in ERPNext keeps exchange rates, usually entered manually by the users.


However, you can also fetch exchange rates from other websites using their corresponding API and store them inside Currency Exchange doctype. You need to enable 'Allow Stale Exchange Rates' in Accounts Settings for using the exchange rates stored in the Currency Exchange form.



In this article, we are fetching the latest currency exchange rates from Open Exchange Rates (https://openexchangerates.org/ ) and enter this in the Currency Exchange doctype. First, you need to log in to Open Exchange Rates website using the credentials and copy your App ID. Now, you can head over to VS Code(or any source code editor of your choice), and install the python package named ‘open exchange rate’ using the command


pip install open exchange rate


and import the library named Open Exchange Rates. Now, you need to make an API call with the App ID as the parameter


client= OpenExchangeRates(api_key="33450a8380f0f4cfaaf546bgs54e265b")


We can get latest currency exchange rates of various currencies performing a latest() method in client. Here, we are fetching corresponding USD rate for QAR.


currency_list=client.latest()

rate=currency_list.dict.get('QAR')


In order to append this in the Currency Exchange doctype , we need to make a document API call.


exchange=frappe.get_doc({"doctype":"Currency Exchange","date":transaction_date,"from_currency":from_currency,"to_currency":to_currency,"exchange_rate":rate,"for_buying":1,"for_selling":1})

exchange.insert(ignore_permissions=True)

frappe.db.commit()


If we need to update the currency exchange value say, every one hour, we need to create a scheduler event. For that, move to hooks.py file


in your app folder and make changes to scheduler event part in the file.

scheduler_events = {

 "hourly": [

  "app.api.get_exchange_rates"

 ]}


For the scheduler event to work we need to perform ‘bench migrate’ after the addition of scheduler event.


** We have used US Dollar and Qatar Riyals in this example ( USD Vs QAR ) . You can use other currencies with corresponding three letter shortcodes.

SAR - Saudi Riyals

AED - UAE Dirhams

OMR - Omani Riyals

KWD - Kuwaiti Dinars

BHD - Bahrain Dinars


For any clarifications you can always write to us at support@ERPGulf.com





Hiba Nazar

Hiba works on API and Integrations.

1 comment
POON WAH SANG May 27, 2024

can connect to Bank Negara API

Add Comment