From 6bdcae1201de560971dc882c901ad18eb7f71f26 Mon Sep 17 00:00:00 2001 From: Kenneth Sequeira Date: Fri, 28 May 2021 21:19:21 +0530 Subject: [PATCH 01/12] feat: add number format parameter in doc.get_formatted --- frappe/model/base_document.py | 4 ++-- frappe/utils/formatters.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index 54d77ba988..1ac07f5fb7 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -862,7 +862,7 @@ class BaseDocument(object): return self._precision[cache_key][fieldname] - def get_formatted(self, fieldname, doc=None, currency=None, absolute_value=False, translated=False): + def get_formatted(self, fieldname, doc=None, currency=None, absolute_value=False, translated=False, format=None): from frappe.utils.formatters import format_value df = self.meta.get_field(fieldname) @@ -886,7 +886,7 @@ class BaseDocument(object): if (absolute_value or doc.get('absolute_value')) and isinstance(val, (int, float)): val = abs(self.get(fieldname)) - return format_value(val, df=df, doc=doc, currency=currency) + return format_value(val, df=df, doc=doc, currency=currency, format=format) def is_print_hide(self, fieldname, df=None, for_print=True): """Returns true if fieldname is to be hidden for print. diff --git a/frappe/utils/formatters.py b/frappe/utils/formatters.py index 7913413878..c0c7e4bca0 100644 --- a/frappe/utils/formatters.py +++ b/frappe/utils/formatters.py @@ -9,7 +9,7 @@ from frappe.model.meta import get_field_currency, get_field_precision import re from six import string_types -def format_value(value, df=None, doc=None, currency=None, translated=False): +def format_value(value, df=None, doc=None, currency=None, translated=False, format=None): '''Format value based on given fieldtype, document reference, currency reference. If docfield info (df) is not given, it will try and guess based on the datatype of the value''' if isinstance(df, string_types): @@ -58,7 +58,7 @@ def format_value(value, df=None, doc=None, currency=None, translated=False): elif df.get("fieldtype") == "Currency": default_currency = frappe.db.get_default("currency") currency = currency or get_field_currency(df, doc) or default_currency - return fmt_money(value, precision=get_field_precision(df, doc), currency=currency) + return fmt_money(value, precision=get_field_precision(df, doc), currency=currency, format=format) elif df.get("fieldtype") == "Float": precision = get_field_precision(df, doc) From 4bafae6e38d898096c49ce2bf5600f0772f05f17 Mon Sep 17 00:00:00 2001 From: Kenneth Sequeira Date: Sat, 12 Jun 2021 22:04:00 +0530 Subject: [PATCH 02/12] fix: add test cases --- frappe/tests/test_document.py | 26 ++++++++++++++++++++++++++ frappe/tests/test_fmt_money.py | 3 +++ frappe/tests/test_formatter.py | 23 ++++++++++++++++++++++- 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/frappe/tests/test_document.py b/frappe/tests/test_document.py index 1a5a8721fd..eca547e9bd 100644 --- a/frappe/tests/test_document.py +++ b/frappe/tests/test_document.py @@ -229,3 +229,29 @@ class TestDocument(unittest.TestCase): self.assertEqual(frappe.db.get_value("Currency", d.name), d.name) frappe.delete_doc_if_exists("Currency", "Frappe Coin", 1) + + def test_get_formatted(self): + frappe.get_doc({ + 'doctype': 'DocType', + 'name': 'Test Formatted', + 'module': 'Custom', + 'custom': 1, + 'istable': 1, + 'fields': [ + {'label': 'Currency', 'fieldname': 'currency', 'reqd': 1, 'fieldtype': 'Currency'}, + ] + }).insert() + + frappe.delete_doc_if_exists("Currency", "INR", 1) + + d = frappe.get_doc({ + 'doctype': 'Currency', + 'currency_name': 'INR', + 'symbol': '₹', + }).insert() + + d = frappe.get_doc({ + 'doctype': 'Test Formatted', + 'currency': 100000 + }) + self.assertEquals(d.get_formatted('curency', currency='INR', format="#,###.##"), '₹ 100,000.00') \ No newline at end of file diff --git a/frappe/tests/test_fmt_money.py b/frappe/tests/test_fmt_money.py index a1321658b7..8d76b4dcb4 100644 --- a/frappe/tests/test_fmt_money.py +++ b/frappe/tests/test_fmt_money.py @@ -94,6 +94,9 @@ class TestFmtMoney(unittest.TestCase): self.assertEqual(fmt_money(1000.456), "1.000,456") frappe.db.set_default("currency_precision", "") + def test_custom_fmt_money_format(self): + self.assertEqual(fmt_money(100000, format="#,###.##"), '100,000.00') + if __name__=="__main__": frappe.connect() unittest.main() \ No newline at end of file diff --git a/frappe/tests/test_formatter.py b/frappe/tests/test_formatter.py index 5257e1c717..5423d92520 100644 --- a/frappe/tests/test_formatter.py +++ b/frappe/tests/test_formatter.py @@ -22,4 +22,25 @@ class TestFormatter(unittest.TestCase): doc.currency = 'USD' self.assertEqual(format(100, df, doc), "$ 100.00") - frappe.db.set_default("currency", None) \ No newline at end of file + frappe.db.set_default("currency", None) + + def test_custom_currency_formatting(self): + df = frappe._dict({ + 'fieldname': 'amount', + 'fieldtype': 'Currency', + 'options': 'currency' + }) + + doc = frappe._dict({ + 'amount': 5 + }) + frappe.db.set_default("currency", 'INR') + + # if currency field is not passed then default currency should be used. + self.assertEqual(format(100000, df, doc, format="#,###.##"), '₹ 100,000.00') + + doc.currency = 'USD' + self.assertEqual(format(100000, df, doc, format="#,###.##"), '$ 100,000.00') + + frappe.db.set_default("currency", None) + \ No newline at end of file From 3336915dae72836ff85396f2c344422348bc9e8d Mon Sep 17 00:00:00 2001 From: Kenneth Sequeira Date: Sat, 12 Jun 2021 23:15:47 +0530 Subject: [PATCH 03/12] fix: test_document test --- frappe/tests/test_document.py | 1 - 1 file changed, 1 deletion(-) diff --git a/frappe/tests/test_document.py b/frappe/tests/test_document.py index eca547e9bd..a70f99aaad 100644 --- a/frappe/tests/test_document.py +++ b/frappe/tests/test_document.py @@ -236,7 +236,6 @@ class TestDocument(unittest.TestCase): 'name': 'Test Formatted', 'module': 'Custom', 'custom': 1, - 'istable': 1, 'fields': [ {'label': 'Currency', 'fieldname': 'currency', 'reqd': 1, 'fieldtype': 'Currency'}, ] From 13caf6910a4bc041a863db0106a9ec1b7b62668b Mon Sep 17 00:00:00 2001 From: Kenneth Sequeira Date: Tue, 15 Jun 2021 22:33:06 +0530 Subject: [PATCH 04/12] fix: test_document test fix --- frappe/tests/test_document.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frappe/tests/test_document.py b/frappe/tests/test_document.py index a70f99aaad..ed4901a79a 100644 --- a/frappe/tests/test_document.py +++ b/frappe/tests/test_document.py @@ -253,4 +253,4 @@ class TestDocument(unittest.TestCase): 'doctype': 'Test Formatted', 'currency': 100000 }) - self.assertEquals(d.get_formatted('curency', currency='INR', format="#,###.##"), '₹ 100,000.00') \ No newline at end of file + self.assertEquals(d.get_formatted('currency', currency='INR', format="#,###.##"), '₹ 100,000.00') \ No newline at end of file From f5e40141af794ae770df3c39ee130a8509b07f50 Mon Sep 17 00:00:00 2001 From: Kenneth Sequeira Date: Tue, 15 Jun 2021 22:46:05 +0530 Subject: [PATCH 05/12] fix: readding test for test_formatter --- frappe/tests/test_formatter.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/frappe/tests/test_formatter.py b/frappe/tests/test_formatter.py index 5423d92520..636f3d970d 100644 --- a/frappe/tests/test_formatter.py +++ b/frappe/tests/test_formatter.py @@ -40,7 +40,6 @@ class TestFormatter(unittest.TestCase): self.assertEqual(format(100000, df, doc, format="#,###.##"), '₹ 100,000.00') doc.currency = 'USD' - self.assertEqual(format(100000, df, doc, format="#,###.##"), '$ 100,000.00') + self.assertEqual(format(100000, df, doc, format="#,###.##"), "$ 100,000.00") frappe.db.set_default("currency", None) - \ No newline at end of file From 61deecbd7c1267d170206969b60e326e217ef6fa Mon Sep 17 00:00:00 2001 From: Mohammad Hasnain Mohsin Rajan Date: Mon, 28 Jun 2021 18:30:55 +0530 Subject: [PATCH 06/12] chore: fix tests --- frappe/tests/test_formatter.py | 1 + 1 file changed, 1 insertion(+) diff --git a/frappe/tests/test_formatter.py b/frappe/tests/test_formatter.py index 636f3d970d..a837573dbc 100644 --- a/frappe/tests/test_formatter.py +++ b/frappe/tests/test_formatter.py @@ -37,6 +37,7 @@ class TestFormatter(unittest.TestCase): frappe.db.set_default("currency", 'INR') # if currency field is not passed then default currency should be used. + print(doc.currency) self.assertEqual(format(100000, df, doc, format="#,###.##"), '₹ 100,000.00') doc.currency = 'USD' From 4b0c67f57cd68ec591ecf100eb2ec7de77b025ba Mon Sep 17 00:00:00 2001 From: Mohammad Hasnain Mohsin Rajan Date: Mon, 28 Jun 2021 18:43:03 +0530 Subject: [PATCH 07/12] chore: debug tests --- frappe/tests/test_formatter.py | 1 + 1 file changed, 1 insertion(+) diff --git a/frappe/tests/test_formatter.py b/frappe/tests/test_formatter.py index a837573dbc..5ebfb3ee6d 100644 --- a/frappe/tests/test_formatter.py +++ b/frappe/tests/test_formatter.py @@ -37,6 +37,7 @@ class TestFormatter(unittest.TestCase): frappe.db.set_default("currency", 'INR') # if currency field is not passed then default currency should be used. + print("doc.currency") print(doc.currency) self.assertEqual(format(100000, df, doc, format="#,###.##"), '₹ 100,000.00') From 64e37d6ab9ba7b9d3b9804d34b65a280b0b2a74b Mon Sep 17 00:00:00 2001 From: Mohammad Hasnain Mohsin Rajan Date: Tue, 29 Jun 2021 10:16:32 +0530 Subject: [PATCH 08/12] chore: debug tests --- frappe/tests/test_formatter.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frappe/tests/test_formatter.py b/frappe/tests/test_formatter.py index 5ebfb3ee6d..cd7b8add9d 100644 --- a/frappe/tests/test_formatter.py +++ b/frappe/tests/test_formatter.py @@ -39,6 +39,9 @@ class TestFormatter(unittest.TestCase): # if currency field is not passed then default currency should be used. print("doc.currency") print(doc.currency) + print("frappe.db.get_default('currency')") + print(frappe.db.get_default("currency")) + self.assertEqual(format(100000, df, doc, format="#,###.##"), '₹ 100,000.00') doc.currency = 'USD' From 4a546942e4711ce5e25c78970faa8e4b016d9137 Mon Sep 17 00:00:00 2001 From: Kenneth Sequeira Date: Tue, 20 Jul 2021 20:09:18 +0530 Subject: [PATCH 09/12] fix: currency test --- frappe/tests/test_currency_formatter.py | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 frappe/tests/test_currency_formatter.py diff --git a/frappe/tests/test_currency_formatter.py b/frappe/tests/test_currency_formatter.py new file mode 100644 index 0000000000..75cb42dc49 --- /dev/null +++ b/frappe/tests/test_currency_formatter.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +import frappe +from frappe import format +import unittest + +class TestFormatter(unittest.TestCase): + def test_custom_currency_formatting(self): + df = frappe._dict({ + 'fieldname': 'amount', + 'fieldtype': 'Currency', + 'options': 'currency' + }) + + doc = frappe._dict({ + 'amount': 5 + }) + frappe.db.set_default("currency", 'INR') + + # if currency field is not passed then default currency should be used. + print("doc.currency") + print(doc.currency) + print("frappe.db.get_default('currency')") + print(frappe.db.get_default("currency")) + + self.assertEqual(format(100000, df, doc, format="#,###.##"), '₹ 100,000.00') + + doc.currency = 'USD' + self.assertEqual(format(100000, df, doc, format="#,###.##"), "$ 100,000.00") + + frappe.db.set_default("currency", None) From e0e1c15d760e71c78ac2a415a91f69a491a7d4c4 Mon Sep 17 00:00:00 2001 From: Kenneth Sequeira Date: Tue, 20 Jul 2021 20:10:15 +0530 Subject: [PATCH 10/12] fix: remove redundant code --- frappe/tests/test_formatter.py | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/frappe/tests/test_formatter.py b/frappe/tests/test_formatter.py index cd7b8add9d..5257e1c717 100644 --- a/frappe/tests/test_formatter.py +++ b/frappe/tests/test_formatter.py @@ -22,29 +22,4 @@ class TestFormatter(unittest.TestCase): doc.currency = 'USD' self.assertEqual(format(100, df, doc), "$ 100.00") - frappe.db.set_default("currency", None) - - def test_custom_currency_formatting(self): - df = frappe._dict({ - 'fieldname': 'amount', - 'fieldtype': 'Currency', - 'options': 'currency' - }) - - doc = frappe._dict({ - 'amount': 5 - }) - frappe.db.set_default("currency", 'INR') - - # if currency field is not passed then default currency should be used. - print("doc.currency") - print(doc.currency) - print("frappe.db.get_default('currency')") - print(frappe.db.get_default("currency")) - - self.assertEqual(format(100000, df, doc, format="#,###.##"), '₹ 100,000.00') - - doc.currency = 'USD' - self.assertEqual(format(100000, df, doc, format="#,###.##"), "$ 100,000.00") - - frappe.db.set_default("currency", None) + frappe.db.set_default("currency", None) \ No newline at end of file From e7e8fcd6221dc662feb7b5421ef40f7eb7b9414d Mon Sep 17 00:00:00 2001 From: Kenneth Sequeira Date: Tue, 20 Jul 2021 20:32:24 +0530 Subject: [PATCH 11/12] fix: old currency test --- frappe/tests/test_currency_formatter.py | 4 ---- frappe/tests/test_formatter.py | 2 ++ 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/frappe/tests/test_currency_formatter.py b/frappe/tests/test_currency_formatter.py index 75cb42dc49..c85f2d3c40 100644 --- a/frappe/tests/test_currency_formatter.py +++ b/frappe/tests/test_currency_formatter.py @@ -17,10 +17,6 @@ class TestFormatter(unittest.TestCase): frappe.db.set_default("currency", 'INR') # if currency field is not passed then default currency should be used. - print("doc.currency") - print(doc.currency) - print("frappe.db.get_default('currency')") - print(frappe.db.get_default("currency")) self.assertEqual(format(100000, df, doc, format="#,###.##"), '₹ 100,000.00') diff --git a/frappe/tests/test_formatter.py b/frappe/tests/test_formatter.py index 5257e1c717..701e81bb9a 100644 --- a/frappe/tests/test_formatter.py +++ b/frappe/tests/test_formatter.py @@ -20,6 +20,8 @@ class TestFormatter(unittest.TestCase): self.assertEqual(format(100, df, doc), '₹ 100.00') doc.currency = 'USD' + print('doc.currency') + print(doc.currency) self.assertEqual(format(100, df, doc), "$ 100.00") frappe.db.set_default("currency", None) \ No newline at end of file From 48d1d11656a61c737427dc7d488d5ce639b9ed15 Mon Sep 17 00:00:00 2001 From: Kenneth Sequeira Date: Tue, 20 Jul 2021 21:06:27 +0530 Subject: [PATCH 12/12] fix: modified original test --- frappe/tests/test_currency_formatter.py | 26 ------------------------- frappe/tests/test_formatter.py | 6 ++---- 2 files changed, 2 insertions(+), 30 deletions(-) delete mode 100644 frappe/tests/test_currency_formatter.py diff --git a/frappe/tests/test_currency_formatter.py b/frappe/tests/test_currency_formatter.py deleted file mode 100644 index c85f2d3c40..0000000000 --- a/frappe/tests/test_currency_formatter.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -import frappe -from frappe import format -import unittest - -class TestFormatter(unittest.TestCase): - def test_custom_currency_formatting(self): - df = frappe._dict({ - 'fieldname': 'amount', - 'fieldtype': 'Currency', - 'options': 'currency' - }) - - doc = frappe._dict({ - 'amount': 5 - }) - frappe.db.set_default("currency", 'INR') - - # if currency field is not passed then default currency should be used. - - self.assertEqual(format(100000, df, doc, format="#,###.##"), '₹ 100,000.00') - - doc.currency = 'USD' - self.assertEqual(format(100000, df, doc, format="#,###.##"), "$ 100,000.00") - - frappe.db.set_default("currency", None) diff --git a/frappe/tests/test_formatter.py b/frappe/tests/test_formatter.py index 701e81bb9a..5454c2b1cd 100644 --- a/frappe/tests/test_formatter.py +++ b/frappe/tests/test_formatter.py @@ -17,11 +17,9 @@ class TestFormatter(unittest.TestCase): frappe.db.set_default("currency", 'INR') # if currency field is not passed then default currency should be used. - self.assertEqual(format(100, df, doc), '₹ 100.00') + self.assertEqual(format(100000, df, doc, format="#,###.##"), '₹ 100,000.00') doc.currency = 'USD' - print('doc.currency') - print(doc.currency) - self.assertEqual(format(100, df, doc), "$ 100.00") + self.assertEqual(format(100000, df, doc, format="#,###.##"), "$ 100,000.00") frappe.db.set_default("currency", None) \ No newline at end of file