diff options
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/models.py | 5 | ||||
-rw-r--r-- | ishtar_common/utils_secretary.py | 30 |
2 files changed, 33 insertions, 2 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index f7512b606..a827fa902 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -2310,6 +2310,11 @@ class DocumentTemplate(models.Model): ensure_ascii=False, separators=("", " : "), ).replace(" " * 4, "\t") + # initialize missing values + if filtr: + for k in filtr: + if k not in values: + values[k] = "" engine = IshtarSecretaryRenderer() try: result = engine.render(self.template, **values) diff --git a/ishtar_common/utils_secretary.py b/ishtar_common/utils_secretary.py index e4e6e8e0b..318f50bdc 100644 --- a/ishtar_common/utils_secretary.py +++ b/ishtar_common/utils_secretary.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # -*- coding: utf-8 -*- from secretary import Renderer from lxml import etree @@ -7,10 +7,12 @@ from xml.parsers.expat import ExpatError, ErrorString from datetime import datetime import locale +from num2words import num2words from PIL import Image import re from django.conf import settings +from django.utils import formats RE_UNITS = re.compile("([.0-9]+)([a-z]+)") @@ -25,6 +27,28 @@ def parse_value_unit(value): return value, unit +def float_format(value): + if value is None or value == "": + return "" + try: + value = float(value) + except ValueError: + return "" + if int(value) == value: + return int(value) + return formats.localize(value, use_l10n=True) + + +def number_to_words(value): + if value is None or value == "": + return "" + try: + value = float(value) + except ValueError: + return "" + return num2words(value, lang=settings.LANGUAGE_CODE.split("-")[0]) + + def replace_line_breaks(value): return (value or "").replace("\r\n", "\n") @@ -60,7 +84,7 @@ def capitalize_filter(value): def human_date_filter(value): try: value = datetime.strptime(value, "%Y-%m-%d") - except ValueError: + except (ValueError, TypeError) as __: return "" language_code = settings.LANGUAGE_CODE.split("-") language_code = language_code[0] + "_" + language_code[1].upper() @@ -109,6 +133,8 @@ class IshtarSecretaryRenderer(Renderer): self.environment.filters["capfirst"] = capfirst_filter self.environment.filters["lowerfirst"] = lowerfirst_filter self.environment.filters["capitalize"] = capitalize_filter + self.environment.filters["float_format"] = float_format + self.environment.filters["number_to_words"] = number_to_words self.environment.filters["replace_line_breaks"] = replace_line_breaks self.environment.filters["splitpart"] = splitpart |