refactor: use dictionary for better expandability

(cherry picked from commit 2e535955b3)
This commit is contained in:
ruthra kumar
2025-01-20 17:28:47 +05:30
committed by Mergify
parent 05e5e43c06
commit 87f1376d86

View File

@@ -4,11 +4,15 @@
import frappe
from frappe import _
from frappe.utils import add_days, flt, get_datetime_str, nowdate
from frappe.utils.data import now_datetime
from frappe.utils.data import getdate, now_datetime
from frappe.utils.nestedset import get_root_of
from erpnext import get_default_company
PEGGED_CURRENCIES = {
"USD": {"AED": 3.6725}, # AED is pegged to USD at a rate of 3.6725 since 1997
}
def before_tests():
frappe.clear_cache()
@@ -45,6 +49,14 @@ def before_tests():
frappe.db.commit()
def get_pegged_rate(from_currency: str, to_currency: str, transaction_date) -> float | None:
if rate := PEGGED_CURRENCIES.get(from_currency, {}).get(to_currency):
return rate
elif rate := PEGGED_CURRENCIES.get(to_currency, {}).get(from_currency):
return 1 / rate
return None
@frappe.whitelist()
def get_exchange_rate(from_currency, to_currency, transaction_date=None, args=None):
if not (from_currency and to_currency):
@@ -52,15 +64,13 @@ def get_exchange_rate(from_currency, to_currency, transaction_date=None, args=No
return
if from_currency == to_currency:
return 1
# as AED is pegged to USD at the exchange rate of 3.6725 AED
# handling the exchange rate manually without API call
if from_currency == "USD" and to_currency == "AED":
return 3.6725
if from_currency == "AED" and to_currency == "USD":
return 1 / 3.6725
if not transaction_date:
transaction_date = nowdate()
if rate := get_pegged_rate(from_currency, to_currency, transaction_date):
return rate
currency_settings = frappe.get_doc("Accounts Settings").as_dict()
allow_stale_rates = currency_settings.get("allow_stale")