mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-28 19:46:46 +00:00
Allow currency symbol to be omitted from render_currency (#6580)
- Closes https://github.com/inventree/InvenTree/issues/6578
This commit is contained in:
parent
ea63a03fe4
commit
8db769968f
@ -180,7 +180,12 @@ def extract_named_group(name: str, value: str, fmt_string: str) -> str:
|
|||||||
return result.group(name)
|
return result.group(name)
|
||||||
|
|
||||||
|
|
||||||
def format_money(money: Money, decimal_places: int = None, format: str = None) -> str:
|
def format_money(
|
||||||
|
money: Money,
|
||||||
|
decimal_places: int = None,
|
||||||
|
format: str = None,
|
||||||
|
include_symbol: bool = True,
|
||||||
|
) -> str:
|
||||||
"""Format money object according to the currently set local.
|
"""Format money object according to the currently set local.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@ -203,10 +208,12 @@ def format_money(money: Money, decimal_places: int = None, format: str = None) -
|
|||||||
if decimal_places is not None:
|
if decimal_places is not None:
|
||||||
pattern.frac_prec = (decimal_places, decimal_places)
|
pattern.frac_prec = (decimal_places, decimal_places)
|
||||||
|
|
||||||
return pattern.apply(
|
result = pattern.apply(
|
||||||
money.amount,
|
money.amount,
|
||||||
locale,
|
locale,
|
||||||
currency=money.currency.code,
|
currency=money.currency.code if include_symbol else '',
|
||||||
currency_digits=decimal_places is None,
|
currency_digits=decimal_places is None,
|
||||||
decimal_quantization=decimal_places is not None,
|
decimal_quantization=decimal_places is not None,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
return result
|
||||||
|
@ -204,6 +204,7 @@ def render_currency(
|
|||||||
currency=None,
|
currency=None,
|
||||||
min_decimal_places=None,
|
min_decimal_places=None,
|
||||||
max_decimal_places=None,
|
max_decimal_places=None,
|
||||||
|
include_symbol=True,
|
||||||
):
|
):
|
||||||
"""Render a currency / Money object to a formatted string (e.g. for reports).
|
"""Render a currency / Money object to a formatted string (e.g. for reports).
|
||||||
|
|
||||||
@ -213,6 +214,7 @@ def render_currency(
|
|||||||
currency: Optionally convert to the specified currency
|
currency: Optionally convert to the specified currency
|
||||||
min_decimal_places: The minimum number of decimal places to render to. If unspecified, uses the PRICING_DECIMAL_PLACES_MIN setting.
|
min_decimal_places: The minimum number of decimal places to render to. If unspecified, uses the PRICING_DECIMAL_PLACES_MIN setting.
|
||||||
max_decimal_places: The maximum number of decimal places to render to. If unspecified, uses the PRICING_DECIMAL_PLACES setting.
|
max_decimal_places: The maximum number of decimal places to render to. If unspecified, uses the PRICING_DECIMAL_PLACES setting.
|
||||||
|
include_symbol: If True, include the currency symbol in the output
|
||||||
"""
|
"""
|
||||||
if money in [None, '']:
|
if money in [None, '']:
|
||||||
return '-'
|
return '-'
|
||||||
@ -258,7 +260,9 @@ def render_currency(
|
|||||||
|
|
||||||
decimal_places = max(decimal_places, max_decimal_places)
|
decimal_places = max(decimal_places, max_decimal_places)
|
||||||
|
|
||||||
return format_money(money, decimal_places=decimal_places)
|
return format_money(
|
||||||
|
money, decimal_places=decimal_places, include_symbol=include_symbol
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def getModelsWithMixin(mixin_class) -> list:
|
def getModelsWithMixin(mixin_class) -> list:
|
||||||
|
@ -358,30 +358,31 @@ class FormatTest(TestCase):
|
|||||||
def test_currency_formatting(self):
|
def test_currency_formatting(self):
|
||||||
"""Test that currency formatting works correctly for multiple currencies."""
|
"""Test that currency formatting works correctly for multiple currencies."""
|
||||||
test_data = (
|
test_data = (
|
||||||
(Money(3651.285718, 'USD'), 4, '$3,651.2857'), # noqa: E201,E202
|
(Money(3651.285718, 'USD'), 4, True, '$3,651.2857'), # noqa: E201,E202
|
||||||
(Money(487587.849178, 'CAD'), 5, 'CA$487,587.84918'), # noqa: E201,E202
|
(Money(487587.849178, 'CAD'), 5, True, 'CA$487,587.84918'), # noqa: E201,E202
|
||||||
(Money(0.348102, 'EUR'), 1, '€0.3'), # noqa: E201,E202
|
(Money(0.348102, 'EUR'), 1, False, '0.3'), # noqa: E201,E202
|
||||||
(Money(0.916530, 'GBP'), 1, '£0.9'), # noqa: E201,E202
|
(Money(0.916530, 'GBP'), 1, True, '£0.9'), # noqa: E201,E202
|
||||||
(Money(61.031024, 'JPY'), 3, '¥61.031'), # noqa: E201,E202
|
(Money(61.031024, 'JPY'), 3, False, '61.031'), # noqa: E201,E202
|
||||||
(Money(49609.694602, 'JPY'), 1, '¥49,609.7'), # noqa: E201,E202
|
(Money(49609.694602, 'JPY'), 1, True, '¥49,609.7'), # noqa: E201,E202
|
||||||
(Money(155565.264777, 'AUD'), 2, 'A$155,565.26'), # noqa: E201,E202
|
(Money(155565.264777, 'AUD'), 2, False, '155,565.26'), # noqa: E201,E202
|
||||||
(Money(0.820437, 'CNY'), 4, 'CN¥0.8204'), # noqa: E201,E202
|
(Money(0.820437, 'CNY'), 4, True, 'CN¥0.8204'), # noqa: E201,E202
|
||||||
(Money(7587.849178, 'EUR'), 0, '€7,588'), # noqa: E201,E202
|
(Money(7587.849178, 'EUR'), 0, True, '€7,588'), # noqa: E201,E202
|
||||||
(Money(0.348102, 'GBP'), 3, '£0.348'), # noqa: E201,E202
|
(Money(0.348102, 'GBP'), 3, False, '0.348'), # noqa: E201,E202
|
||||||
(Money(0.652923, 'CHF'), 0, 'CHF1'), # noqa: E201,E202
|
(Money(0.652923, 'CHF'), 0, True, 'CHF1'), # noqa: E201,E202
|
||||||
(Money(0.820437, 'CNY'), 1, 'CN¥0.8'), # noqa: E201,E202
|
(Money(0.820437, 'CNY'), 1, True, 'CN¥0.8'), # noqa: E201,E202
|
||||||
(Money(98789.5295680, 'CHF'), 0, 'CHF98,790'), # noqa: E201,E202
|
(Money(98789.5295680, 'CHF'), 0, False, '98,790'), # noqa: E201,E202
|
||||||
(Money(0.585787, 'USD'), 1, '$0.6'), # noqa: E201,E202
|
(Money(0.585787, 'USD'), 1, True, '$0.6'), # noqa: E201,E202
|
||||||
(Money(0.690541, 'CAD'), 3, 'CA$0.691'), # noqa: E201,E202
|
(Money(0.690541, 'CAD'), 3, True, 'CA$0.691'), # noqa: E201,E202
|
||||||
(Money(427.814104, 'AUD'), 5, 'A$427.81410'), # noqa: E201,E202
|
(Money(427.814104, 'AUD'), 5, True, 'A$427.81410'), # noqa: E201,E202
|
||||||
)
|
)
|
||||||
|
|
||||||
with self.settings(LANGUAGE_CODE='en-us'):
|
with self.settings(LANGUAGE_CODE='en-us'):
|
||||||
for value, decimal_places, expected_result in test_data:
|
for value, decimal_places, include_symbol, expected_result in test_data:
|
||||||
result = InvenTree.format.format_money(
|
result = InvenTree.format.format_money(
|
||||||
value, decimal_places=decimal_places
|
value, decimal_places=decimal_places, include_symbol=include_symbol
|
||||||
)
|
)
|
||||||
assert result == expected_result
|
|
||||||
|
self.assertEqual(result, expected_result)
|
||||||
|
|
||||||
|
|
||||||
class TestHelpers(TestCase):
|
class TestHelpers(TestCase):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user