Parcourir la source

Merge pull request #17405 from ankush/feat/currency_symbol_loc

feat: configurable location of currency symbol
version-14
Ankush Menat il y a 2 ans
committed by GitHub
Parent
révision
9a03c53572
Aucune clé connue n'a été trouvée dans la base pour cette signature ID de la clé GPG: 4AEE18F83AFDEB23
5 fichiers modifiés avec 67 ajouts et 9 suppressions
  1. +33
    -0
      frappe/boot.py
  2. +10
    -1
      frappe/geo/doctype/currency/currency.json
  3. +13
    -7
      frappe/public/js/frappe/utils/number_format.js
  4. +5
    -0
      frappe/tests/test_fmt_money.py
  5. +6
    -1
      frappe/utils/data.py

+ 33
- 0
frappe/boot.py Voir le fichier

@@ -77,6 +77,8 @@ def get_bootinfo():

# add docs
bootinfo.docs = doclist
load_country_doc(bootinfo)
load_currency_docs(bootinfo)

for method in hooks.boot_session or []:
frappe.get_attr(method)(bootinfo)
@@ -417,3 +419,34 @@ def get_translatable_doctypes():
"Property Setter", {"property": "translate_link_fields", "value": "1"}, pluck="doc_type"
)
return dts + custom_dts


def load_country_doc(bootinfo):
country = frappe.db.get_default("country")
if not country:
return
try:
bootinfo.docs.append(frappe.get_cached_doc("Country", country))
except Exception:
pass


def load_currency_docs(bootinfo):
currency = frappe.qb.DocType("Currency")

currency_docs = (
frappe.qb.from_(currency)
.select(
currency.name,
currency.fraction,
currency.fraction_units,
currency.number_format,
currency.smallest_currency_fraction_value,
currency.symbol,
currency.symbol_on_right,
)
.where(currency.enabled == 1)
.run(as_dict=1, update={"doctype": ":Currency"})
)

bootinfo.docs += currency_docs

+ 10
- 1
frappe/geo/doctype/currency/currency.json Voir le fichier

@@ -15,6 +15,7 @@
"fraction_units",
"smallest_currency_fraction_value",
"symbol",
"symbol_on_right",
"number_format"
],
"fields": [
@@ -69,16 +70,23 @@
"in_list_view": 1,
"label": "Number Format",
"options": "\n#,###.##\n#.###,##\n# ###.##\n# ###,##\n#'###.##\n#, ###.##\n#,##,###.##\n#,###.###\n#.###\n#,###"
},
{
"default": "0",
"fieldname": "symbol_on_right",
"fieldtype": "Check",
"label": "Show Currency Symbol on Right Side"
}
],
"icon": "fa fa-bitcoin",
"idx": 1,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2020-10-29 06:33:12.879978",
"modified": "2022-07-04 09:42:52.425440",
"modified_by": "Administrator",
"module": "Geo",
"name": "Currency",
"naming_rule": "By fieldname",
"owner": "Administrator",
"permissions": [
{
@@ -109,5 +117,6 @@
],
"sort_field": "modified",
"sort_order": "DESC",
"states": [],
"track_changes": 1
}

+ 13
- 7
frappe/public/js/frappe/utils/number_format.js Voir le fichier

@@ -122,16 +122,22 @@ window.format_number = function (v, format, decimals) {
};

function format_currency(v, currency, decimals) {
var format = get_number_format(currency);
var symbol = get_currency_symbol(currency);
if(decimals === undefined) {
const format = get_number_format(currency);
const symbol = get_currency_symbol(currency);
const show_symbol_on_right = frappe.model.get_value(":Currency", currency, "symbol_on_right") ?? false;

if (decimals === undefined) {
decimals = frappe.boot.sysdefaults.currency_precision || null;
}

if (symbol)
if (symbol) {
if (show_symbol_on_right) {
return format_number(v, format, decimals) + " " + __(symbol);
}
return __(symbol) + " " + format_number(v, format, decimals);
else
return format_number(v, format, decimals);
}

return format_number(v, format, decimals);
}

function get_currency_symbol(currency) {
@@ -249,4 +255,4 @@ Object.assign(window, {
remainder,
round_based_on_smallest_currency_fraction,
in_list
});
});

+ 5
- 0
frappe/tests/test_fmt_money.py Voir le fichier

@@ -97,6 +97,11 @@ class TestFmtMoney(unittest.TestCase):
self.assertEqual(fmt_money(100000, format="#,###.##"), "100,000.00")
self.assertEqual(fmt_money(None, format="#,###.##"), "0.00")

def test_fmt_with_symbol_pos(self):
frappe.db.set_value("Currency", "JPY", "symbol_on_right", 1)
self.assertEqual(fmt_money(100.0, format="#,###.##", currency="JPY"), "100.00 ¥")
self.assertEqual(fmt_money(100.0, format="#,###.##", currency="USD"), "$ 100.00")


if __name__ == "__main__":
frappe.connect()


+ 6
- 1
frappe/utils/data.py Voir le fichier

@@ -1187,7 +1187,12 @@ def fmt_money(

if currency and frappe.defaults.get_global_default("hide_currency_symbol") != "Yes":
symbol = frappe.db.get_value("Currency", currency, "symbol", cache=True) or currency
amount = frappe._(symbol) + " " + amount
symbol_on_right = frappe.db.get_value("Currency", currency, "symbol_on_right", cache=True)

if symbol_on_right:
amount = f"{amount} {frappe._(symbol)}"
else:
amount = f"{frappe._(symbol)} {amount}"

return amount



Chargement…
Annuler
Enregistrer