Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'develop' into fix-sla-perm
- Loading branch information
Showing
24 changed files
with
608 additions
and
27 deletions.
There are no files selected for viewing
Empty file.
45 changes: 45 additions & 0 deletions
45
erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
// Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors | ||
// For license information, please see license.txt | ||
|
||
frappe.ui.form.on('Currency Exchange Settings', { | ||
service_provider: function(frm) { | ||
if (frm.doc.service_provider == "exchangerate.host") { | ||
let result = ['result']; | ||
let params = { | ||
date: '{transaction_date}', | ||
from: '{from_currency}', | ||
to: '{to_currency}' | ||
}; | ||
add_param(frm, "https://api.exchangerate.host/convert", params, result); | ||
} else if (frm.doc.service_provider == "frankfurter.app") { | ||
let result = ['rates', '{to_currency}']; | ||
let params = { | ||
base: '{from_currency}', | ||
symbols: '{to_currency}' | ||
}; | ||
add_param(frm, "https://frankfurter.app/{transaction_date}", params, result); | ||
} | ||
} | ||
}); | ||
|
||
|
||
function add_param(frm, api, params, result) { | ||
var row; | ||
frm.clear_table("req_params"); | ||
frm.clear_table("result_key"); | ||
|
||
frm.doc.api_endpoint = api; | ||
|
||
$.each(params, function(key, value) { | ||
row = frm.add_child("req_params"); | ||
row.key = key; | ||
row.value = value; | ||
}); | ||
|
||
$.each(result, function(key, value) { | ||
row = frm.add_child("result_key"); | ||
row.key = value; | ||
}); | ||
|
||
frm.refresh_fields(); | ||
} |
126 changes: 126 additions & 0 deletions
126
erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
{ | ||
"actions": [], | ||
"creation": "2022-01-10 13:03:26.237081", | ||
"doctype": "DocType", | ||
"editable_grid": 1, | ||
"engine": "InnoDB", | ||
"field_order": [ | ||
"api_details_section", | ||
"service_provider", | ||
"api_endpoint", | ||
"url", | ||
"column_break_3", | ||
"help", | ||
"section_break_2", | ||
"req_params", | ||
"column_break_4", | ||
"result_key" | ||
], | ||
"fields": [ | ||
{ | ||
"fieldname": "api_details_section", | ||
"fieldtype": "Section Break", | ||
"label": "API Details" | ||
}, | ||
{ | ||
"fieldname": "api_endpoint", | ||
"fieldtype": "Data", | ||
"in_list_view": 1, | ||
"label": "API Endpoint", | ||
"read_only_depends_on": "eval: doc.service_provider != \"Custom\"", | ||
"reqd": 1 | ||
}, | ||
{ | ||
"fieldname": "url", | ||
"fieldtype": "Data", | ||
"label": "Example URL", | ||
"read_only": 1 | ||
}, | ||
{ | ||
"fieldname": "column_break_3", | ||
"fieldtype": "Column Break" | ||
}, | ||
{ | ||
"fieldname": "help", | ||
"fieldtype": "HTML", | ||
"label": "Help", | ||
"options": "<h3>Currency Exchange Settings Help</h3>\n<p>There are 3 variables that could be used within the endpoint, result key and in values of the parameter.</p>\n<p>Exchange rate between {from_currency} and {to_currency} on {transaction_date} is fetched by the API.</p>\n<p>Example: If your endpoint is exchange.com/2021-08-01, then, you will have to input exchange.com/{transaction_date}</p>" | ||
}, | ||
{ | ||
"fieldname": "section_break_2", | ||
"fieldtype": "Section Break", | ||
"label": "Request Parameters" | ||
}, | ||
{ | ||
"fieldname": "req_params", | ||
"fieldtype": "Table", | ||
"label": "Parameters", | ||
"options": "Currency Exchange Settings Details", | ||
"read_only_depends_on": "eval: doc.service_provider != \"Custom\"", | ||
"reqd": 1 | ||
}, | ||
{ | ||
"fieldname": "column_break_4", | ||
"fieldtype": "Column Break" | ||
}, | ||
{ | ||
"fieldname": "result_key", | ||
"fieldtype": "Table", | ||
"label": "Result Key", | ||
"options": "Currency Exchange Settings Result", | ||
"read_only_depends_on": "eval: doc.service_provider != \"Custom\"", | ||
"reqd": 1 | ||
}, | ||
{ | ||
"fieldname": "service_provider", | ||
"fieldtype": "Select", | ||
"label": "Service Provider", | ||
"options": "frankfurter.app\nexchangerate.host\nCustom", | ||
"reqd": 1 | ||
} | ||
], | ||
"index_web_pages_for_search": 1, | ||
"issingle": 1, | ||
"links": [], | ||
"modified": "2022-01-10 15:51:14.521174", | ||
"modified_by": "Administrator", | ||
"module": "Accounts", | ||
"name": "Currency Exchange Settings", | ||
"owner": "Administrator", | ||
"permissions": [ | ||
{ | ||
"create": 1, | ||
"delete": 1, | ||
"email": 1, | ||
"print": 1, | ||
"read": 1, | ||
"role": "System Manager", | ||
"share": 1, | ||
"write": 1 | ||
}, | ||
{ | ||
"create": 1, | ||
"delete": 1, | ||
"email": 1, | ||
"print": 1, | ||
"read": 1, | ||
"role": "Accounts Manager", | ||
"share": 1, | ||
"write": 1 | ||
}, | ||
{ | ||
"create": 1, | ||
"delete": 1, | ||
"email": 1, | ||
"print": 1, | ||
"read": 1, | ||
"role": "Accounts User", | ||
"share": 1, | ||
"write": 1 | ||
} | ||
], | ||
"sort_field": "modified", | ||
"sort_order": "DESC", | ||
"states": [], | ||
"track_changes": 1 | ||
} |
82 changes: 82 additions & 0 deletions
82
erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and contributors | ||
# For license information, please see license.txt | ||
|
||
import frappe | ||
import requests | ||
from frappe import _ | ||
from frappe.model.document import Document | ||
from frappe.utils import nowdate | ||
|
||
|
||
class CurrencyExchangeSettings(Document): | ||
def validate(self): | ||
self.set_parameters_and_result() | ||
response, value = self.validate_parameters() | ||
self.validate_result(response, value) | ||
|
||
def set_parameters_and_result(self): | ||
if self.service_provider == 'exchangerate.host': | ||
self.set('result_key', []) | ||
self.set('req_params', []) | ||
|
||
self.api_endpoint = "https://api.exchangerate.host/convert" | ||
self.append('result_key', {'key': 'result'}) | ||
self.append('req_params', {'key': 'date', 'value': '{transaction_date}'}) | ||
self.append('req_params', {'key': 'from', 'value': '{from_currency}'}) | ||
self.append('req_params', {'key': 'to', 'value': '{to_currency}'}) | ||
elif self.service_provider == 'frankfurter.app': | ||
self.set('result_key', []) | ||
self.set('req_params', []) | ||
|
||
self.api_endpoint = "https://frankfurter.app/{transaction_date}" | ||
self.append('result_key', {'key': 'rates'}) | ||
self.append('result_key', {'key': '{to_currency}'}) | ||
self.append('req_params', {'key': 'base', 'value': '{from_currency}'}) | ||
self.append('req_params', {'key': 'symbols', 'value': '{to_currency}'}) | ||
|
||
def validate_parameters(self): | ||
if frappe.flags.in_test: | ||
return None, None | ||
|
||
params = {} | ||
for row in self.req_params: | ||
params[row.key] = row.value.format( | ||
transaction_date=nowdate(), | ||
to_currency='INR', | ||
from_currency='USD' | ||
) | ||
|
||
api_url = self.api_endpoint.format( | ||
transaction_date=nowdate(), | ||
to_currency='INR', | ||
from_currency='USD' | ||
) | ||
|
||
try: | ||
response = requests.get(api_url, params=params) | ||
except requests.exceptions.RequestException as e: | ||
frappe.throw("Error: " + str(e)) | ||
|
||
response.raise_for_status() | ||
value = response.json() | ||
|
||
return response, value | ||
|
||
def validate_result(self, response, value): | ||
if frappe.flags.in_test: | ||
return | ||
|
||
try: | ||
for key in self.result_key: | ||
value = value[str(key.key).format( | ||
transaction_date=nowdate(), | ||
to_currency='INR', | ||
from_currency='USD' | ||
)] | ||
except Exception: | ||
frappe.throw("Invalid result key. Response: " + response.text) | ||
if not isinstance(value, (int, float)): | ||
frappe.throw(_("Returned exchange rate is neither integer not float.")) | ||
|
||
self.url = response.url | ||
frappe.msgprint("Exchange rate of USD to INR is " + str(value)) |
9 changes: 9 additions & 0 deletions
9
erpnext/accounts/doctype/currency_exchange_settings/test_currency_exchange_settings.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Copyright (c) 2021, Wahni Green Technologies Pvt. Ltd. and contributors | ||
# For license information, please see license.txt | ||
|
||
# import frappe | ||
import unittest | ||
|
||
|
||
class TestCurrencyExchangeSettings(unittest.TestCase): | ||
pass |
Empty file.
39 changes: 39 additions & 0 deletions
39
...counts/doctype/currency_exchange_settings_details/currency_exchange_settings_details.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
{ | ||
"actions": [], | ||
"creation": "2021-09-02 14:54:49.033512", | ||
"doctype": "DocType", | ||
"editable_grid": 1, | ||
"engine": "InnoDB", | ||
"field_order": [ | ||
"key", | ||
"value" | ||
], | ||
"fields": [ | ||
{ | ||
"fieldname": "key", | ||
"fieldtype": "Data", | ||
"in_list_view": 1, | ||
"label": "Key", | ||
"reqd": 1 | ||
}, | ||
{ | ||
"fieldname": "value", | ||
"fieldtype": "Data", | ||
"in_list_view": 1, | ||
"label": "Value", | ||
"reqd": 1 | ||
} | ||
], | ||
"index_web_pages_for_search": 1, | ||
"istable": 1, | ||
"links": [], | ||
"modified": "2021-11-03 19:14:55.889037", | ||
"modified_by": "Administrator", | ||
"module": "Accounts", | ||
"name": "Currency Exchange Settings Details", | ||
"owner": "Administrator", | ||
"permissions": [], | ||
"sort_field": "modified", | ||
"sort_order": "DESC", | ||
"track_changes": 1 | ||
} |
9 changes: 9 additions & 0 deletions
9
...accounts/doctype/currency_exchange_settings_details/currency_exchange_settings_details.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Copyright (c) 2021, Wahni Green Technologies Pvt. Ltd. and contributors | ||
# For license information, please see license.txt | ||
|
||
# import frappe | ||
from frappe.model.document import Document | ||
|
||
|
||
class CurrencyExchangeSettingsDetails(Document): | ||
pass |
Empty file.
31 changes: 31 additions & 0 deletions
31
...accounts/doctype/currency_exchange_settings_result/currency_exchange_settings_result.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
{ | ||
"actions": [], | ||
"creation": "2021-09-03 13:17:22.088259", | ||
"doctype": "DocType", | ||
"editable_grid": 1, | ||
"engine": "InnoDB", | ||
"field_order": [ | ||
"key" | ||
], | ||
"fields": [ | ||
{ | ||
"fieldname": "key", | ||
"fieldtype": "Data", | ||
"in_list_view": 1, | ||
"label": "Key", | ||
"reqd": 1 | ||
} | ||
], | ||
"index_web_pages_for_search": 1, | ||
"istable": 1, | ||
"links": [], | ||
"modified": "2021-11-03 19:14:40.054245", | ||
"modified_by": "Administrator", | ||
"module": "Accounts", | ||
"name": "Currency Exchange Settings Result", | ||
"owner": "Administrator", | ||
"permissions": [], | ||
"sort_field": "modified", | ||
"sort_order": "DESC", | ||
"track_changes": 1 | ||
} |
9 changes: 9 additions & 0 deletions
9
...t/accounts/doctype/currency_exchange_settings_result/currency_exchange_settings_result.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
# Copyright (c) 2021, Wahni Green Technologies Pvt. Ltd. and contributors | ||
# For license information, please see license.txt | ||
|
||
# import frappe | ||
from frappe.model.document import Document | ||
|
||
|
||
class CurrencyExchangeSettingsResult(Document): | ||
pass |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.