diff options
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/utils_secretary.py | 51 |
1 files changed, 38 insertions, 13 deletions
diff --git a/ishtar_common/utils_secretary.py b/ishtar_common/utils_secretary.py index 188441120..fc6975fc9 100644 --- a/ishtar_common/utils_secretary.py +++ b/ishtar_common/utils_secretary.py @@ -12,7 +12,17 @@ from PIL import Image import re from django.conf import settings -from django.utils import formats + + +def set_locale(): + language_code = settings.LANGUAGE_CODE.split("-") + language_code = language_code[0] + "_" + language_code[1].upper() + for language_suffix in (".utf8", ""): + try: + locale.setlocale(locale.LC_TIME, language_code + language_suffix) + break + except locale.Error: + pass RE_UNITS = re.compile("([.0-9]+)([a-z]+)") @@ -28,16 +38,37 @@ def parse_value_unit(value): def float_format(value): + """ + 10350.5 -> 10 350,5 + 5 -> 5 + 5.449999 -> 5,45 + """ if value is None or value == "": return "" try: value = float(value) except ValueError: return "" - if int(value) == value: - return int(value) - value = int(value * 100)/100 - return formats.localize(value, use_l10n=True) + locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8") + if int(value) != value: + value = int(value * 100)/100 + return f"{value:n}" + + +def euro_format(value): + """ + 15000 -> 15 000,00 € + 5 -> 5,00 € + """ + value = float_format(value) + if not value: + return "" + parts = value.split(",") + if len(parts) < 2: + return value + ",00 €" + elif len(parts[1]) == 1: + return value + "0 €" + return value + " €" def number_to_words(value): @@ -108,14 +139,7 @@ def human_date_filter(value): value = datetime.strptime(value, "%Y-%m-%d") except (ValueError, TypeError) as __: return "" - language_code = settings.LANGUAGE_CODE.split("-") - language_code = language_code[0] + "_" + language_code[1].upper() - for language_suffix in (".utf8", ""): - try: - locale.setlocale(locale.LC_TIME, language_code + language_suffix) - break - except locale.Error: - pass + set_locale() return value.strftime(settings.DATE_FORMAT) @@ -156,6 +180,7 @@ class IshtarSecretaryRenderer(Renderer): self.environment.filters["lowerfirst"] = lowerfirst_filter self.environment.filters["capitalize"] = capitalize_filter self.environment.filters["float_format"] = float_format + self.environment.filters["euro_format"] = euro_format self.environment.filters["number_to_words"] = number_to_words self.environment.filters["replace_line_breaks"] = replace_line_breaks self.environment.filters["splitpart"] = splitpart |