summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--archaeological_files/models.py12
-rw-r--r--ishtar_common/utils_secretary.py51
2 files changed, 49 insertions, 14 deletions
diff --git a/archaeological_files/models.py b/archaeological_files/models.py
index fb0665a28..8546b8933 100644
--- a/archaeological_files/models.py
+++ b/archaeological_files/models.py
@@ -1170,7 +1170,17 @@ class File(
max_day_worked = max(max_day_worked, job.days_worked or 0)
if name not in jobs:
has_parents = job.job.has_parents
- jobs[name] = {"has_parents": has_parents}
+ jobs[name] = {
+ "has_parents": has_parents,
+ "ground_man_by_day_planned": "",
+ "ground_days_planned": "",
+ "ground_cost_planned": "",
+ "ground_cost_total_planned": "",
+ "ground_man_by_day_worked": "",
+ "ground_days_worked": "",
+ "ground_cost_worked": "",
+ "ground_cost_total_worked": "",
+ }
cost_total_planned = (
(job.man_by_day_planned or 0) * (job.days_planned or 0) *
(job.cost_planned or 0)
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