summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/models.py5
-rw-r--r--ishtar_common/utils_secretary.py30
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