mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-13 06:31:48 +00:00
feat(currency exchange settings): frankfurter v2 support
(cherry picked from commit 56bfe6b6a6)
This commit is contained in:
@@ -11,22 +11,28 @@ frappe.ui.form.on("Currency Exchange Settings", {
|
|||||||
},
|
},
|
||||||
callback: function (r) {
|
callback: function (r) {
|
||||||
if (r && r.message) {
|
if (r && r.message) {
|
||||||
|
let result = [],
|
||||||
|
params = {};
|
||||||
if (frm.doc.service_provider == "exchangerate.host") {
|
if (frm.doc.service_provider == "exchangerate.host") {
|
||||||
let result = ["result"];
|
result = ["result"];
|
||||||
let params = {
|
params = {
|
||||||
date: "{transaction_date}",
|
date: "{transaction_date}",
|
||||||
from: "{from_currency}",
|
from: "{from_currency}",
|
||||||
to: "{to_currency}",
|
to: "{to_currency}",
|
||||||
};
|
};
|
||||||
add_param(frm, r.message, params, result);
|
|
||||||
} else if (["frankfurter.app", "frankfurter.dev"].includes(frm.doc.service_provider)) {
|
} else if (["frankfurter.app", "frankfurter.dev"].includes(frm.doc.service_provider)) {
|
||||||
let result = ["rates", "{to_currency}"];
|
result = ["rates", "{to_currency}"];
|
||||||
let params = {
|
params = {
|
||||||
base: "{from_currency}",
|
base: "{from_currency}",
|
||||||
symbols: "{to_currency}",
|
symbols: "{to_currency}",
|
||||||
};
|
};
|
||||||
add_param(frm, r.message, params, result);
|
} else if (frm.doc.service_provider == "frankfurter.dev - v2") {
|
||||||
|
result = ["rate"];
|
||||||
|
params = {
|
||||||
|
date: "{transaction_date}",
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
add_param(frm, r.message, params, result);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"actions": [],
|
"actions": [],
|
||||||
|
"allow_bulk_edit": 1,
|
||||||
"creation": "2022-01-10 13:03:26.237081",
|
"creation": "2022-01-10 13:03:26.237081",
|
||||||
"doctype": "DocType",
|
"doctype": "DocType",
|
||||||
"editable_grid": 1,
|
"editable_grid": 1,
|
||||||
@@ -78,7 +79,7 @@
|
|||||||
"fieldname": "service_provider",
|
"fieldname": "service_provider",
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
"label": "Service Provider",
|
"label": "Service Provider",
|
||||||
"options": "frankfurter.dev\nexchangerate.host\nCustom",
|
"options": "frankfurter.dev\nexchangerate.host\nfrankfurter.dev - v2\nCustom",
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -101,11 +102,10 @@
|
|||||||
"label": "Use HTTP Protocol"
|
"label": "Use HTTP Protocol"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"hide_toolbar": 0,
|
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"issingle": 1,
|
"issingle": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2026-03-16 13:28:21.075743",
|
"modified": "2026-06-09 11:34:10.432378",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Currency Exchange Settings",
|
"name": "Currency Exchange Settings",
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ class CurrencyExchangeSettings(Document):
|
|||||||
disabled: DF.Check
|
disabled: DF.Check
|
||||||
req_params: DF.Table[CurrencyExchangeSettingsDetails]
|
req_params: DF.Table[CurrencyExchangeSettingsDetails]
|
||||||
result_key: DF.Table[CurrencyExchangeSettingsResult]
|
result_key: DF.Table[CurrencyExchangeSettingsResult]
|
||||||
service_provider: DF.Literal["frankfurter.dev", "exchangerate.host", "Custom"]
|
service_provider: DF.Literal["frankfurter.dev", "exchangerate.host", "frankfurter.dev - v2", "Custom"]
|
||||||
url: DF.Data | None
|
url: DF.Data | None
|
||||||
use_http: DF.Check
|
use_http: DF.Check
|
||||||
# end: auto-generated types
|
# end: auto-generated types
|
||||||
@@ -70,6 +70,14 @@ class CurrencyExchangeSettings(Document):
|
|||||||
self.append("req_params", {"key": "base", "value": "{from_currency}"})
|
self.append("req_params", {"key": "base", "value": "{from_currency}"})
|
||||||
self.append("req_params", {"key": "symbols", "value": "{to_currency}"})
|
self.append("req_params", {"key": "symbols", "value": "{to_currency}"})
|
||||||
|
|
||||||
|
elif self.service_provider == "frankfurter.dev - v2":
|
||||||
|
self.set("result_key", [])
|
||||||
|
self.set("req_params", [])
|
||||||
|
|
||||||
|
self.api_endpoint = get_api_endpoint(self.service_provider, self.use_http)
|
||||||
|
self.append("result_key", {"key": "rate"})
|
||||||
|
self.append("req_params", {"key": "date", "value": "{transaction_date}"})
|
||||||
|
|
||||||
def validate_parameters(self):
|
def validate_parameters(self):
|
||||||
params = {}
|
params = {}
|
||||||
for row in self.req_params:
|
for row in self.req_params:
|
||||||
@@ -105,13 +113,20 @@ class CurrencyExchangeSettings(Document):
|
|||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def get_api_endpoint(service_provider: str | None = None, use_http: bool = False):
|
def get_api_endpoint(service_provider: str | None = None, use_http: bool = False):
|
||||||
if service_provider and service_provider in ["exchangerate.host", "frankfurter.dev", "frankfurter.app"]:
|
if service_provider and service_provider in [
|
||||||
|
"exchangerate.host",
|
||||||
|
"frankfurter.dev",
|
||||||
|
"frankfurter.app",
|
||||||
|
"frankfurter.dev - v2",
|
||||||
|
]:
|
||||||
if service_provider == "exchangerate.host":
|
if service_provider == "exchangerate.host":
|
||||||
api = "api.exchangerate.host/convert"
|
api = "api.exchangerate.host/convert"
|
||||||
elif service_provider == "frankfurter.app":
|
elif service_provider == "frankfurter.app":
|
||||||
api = "api.frankfurter.app/{transaction_date}"
|
api = "api.frankfurter.app/{transaction_date}"
|
||||||
elif service_provider == "frankfurter.dev":
|
elif service_provider == "frankfurter.dev":
|
||||||
api = "api.frankfurter.dev/v1/{transaction_date}"
|
api = "api.frankfurter.dev/v1/{transaction_date}"
|
||||||
|
elif service_provider == "frankfurter.dev - v2":
|
||||||
|
api = "api.frankfurter.dev/v2/rate/{from_currency}/{to_currency}"
|
||||||
|
|
||||||
protocol = "https://"
|
protocol = "https://"
|
||||||
if use_http:
|
if use_http:
|
||||||
|
|||||||
Reference in New Issue
Block a user