diff options
| -rw-r--r-- | archaeological_files/models.py | 12 | ||||
| -rw-r--r-- | ishtar_common/utils_secretary.py | 51 | 
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 | 
