diff options
| -rw-r--r-- | ishtar_common/models.py | 9 | ||||
| -rw-r--r-- | ishtar_common/models_common.py | 6 | ||||
| -rw-r--r-- | ishtar_common/templatetags/ishtar_helpers.py | 6 | ||||
| -rw-r--r-- | ishtar_common/utils.py | 17 | ||||
| -rw-r--r-- | ishtar_common/views_item.py | 5 | 
5 files changed, 41 insertions, 2 deletions
| diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 110ac9a50..14b210ea2 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -85,6 +85,7 @@ from ishtar_common.utils import (      ugettext_lazy as _,      ugettext,      pgettext_lazy, +    format_date,      get_generated_id,      get_current_profile,      duplicate_item, @@ -770,6 +771,14 @@ class JsonDataField(models.Model):      def __str__(self):          return "{} - {}".format(self.content_type, self.name) +    def format_value(self, value): +        if value is None or value == "": +            return value +        if self.value_type == "D": +            return format_date(value) +        else: +            return value +      def clean(self):          if not self.section:              return diff --git a/ishtar_common/models_common.py b/ishtar_common/models_common.py index 26bc1c63f..9a595df84 100644 --- a/ishtar_common/models_common.py +++ b/ishtar_common/models_common.py @@ -1218,7 +1218,11 @@ class JsonData(models.Model, CachedGen):              if value is None:                  continue              if type(value) in (list, tuple): -                value = " ; ".join([str(v) for v in value]) +                value = " ; ".join([field.format_value(v) for v in value if v]) +                if not value: +                    continue +            else: +                value = field.format_value(value)              section_name = field.section.name if field.section else None              if not sections or section_name != sections[-1][0]:                  # if section name is identical it is the same diff --git a/ishtar_common/templatetags/ishtar_helpers.py b/ishtar_common/templatetags/ishtar_helpers.py index f94339fc5..8c8227312 100644 --- a/ishtar_common/templatetags/ishtar_helpers.py +++ b/ishtar_common/templatetags/ishtar_helpers.py @@ -4,6 +4,7 @@  from bs4 import BeautifulSoup  from django.template import Library  from django.utils.safestring import mark_safe +from ishtar_common.utils import format_date as python_format_date  register = Library() @@ -102,3 +103,8 @@ def can_edit_item(item, context):          request = context      if item.can_edit(request):          return True + + +@register.filter +def format_date(value): +    return python_format_date(value)
\ No newline at end of file diff --git a/ishtar_common/utils.py b/ishtar_common/utils.py index c30a5c5fc..dd21bec06 100644 --- a/ishtar_common/utils.py +++ b/ishtar_common/utils.py @@ -1,7 +1,6 @@  #!/usr/bin/env python3  # -*- coding: utf-8 -*-  # Copyright (C) 2013-2016 Étienne Loks  <etienne.loks_AT_peacefrogsDOTnet> -import json  # This program is free software: you can redistribute it and/or modify  # it under the terms of the GNU Affero General Public License as @@ -24,6 +23,7 @@ import datetime  from functools import wraps  from itertools import chain  from inspect import currentframe, getframeinfo +import json  import logging  import hashlib  from importlib import import_module @@ -72,6 +72,7 @@ from django.http import HttpResponseRedirect  from django.urls import reverse, NoReverseMatch  from django.utils.crypto import get_random_string  from django.utils.datastructures import MultiValueDict as BaseMultiValueDict +from django.utils.formats import date_format  from django.utils.safestring import mark_safe  from django.template.defaultfilters import slugify @@ -2715,6 +2716,20 @@ def create_osm_town(rel_id, name, numero_insee=None):      return town +def format_date(value, frmat="SHORT_DATE_FORMAT"): +    formats = ["%Y-%m-%d", "%d/%m/%Y"] +    date = None +    for forma in formats: +        try: +            date = datetime.datetime.strptime(value, forma).date() +            break +        except ValueError: +            continue +    if not date: +        return value +    return date_format(date, format=frmat, use_l10n=True) + +  def get_percent(current, total):      return f"{(current + 1) / total * 100:.1f}".rjust(4, "0") + "%" diff --git a/ishtar_common/views_item.py b/ishtar_common/views_item.py index 3f888ce14..26145161b 100644 --- a/ishtar_common/views_item.py +++ b/ishtar_common/views_item.py @@ -52,6 +52,8 @@ from unidecode import unidecode  from weasyprint import HTML, CSS  from weasyprint.fonts import FontConfiguration +from bootstrap_datepicker.widgets import DateField +  from ishtar_common.utils import (      check_model_access_control,      CSV_OPTIONS, @@ -2008,6 +2010,9 @@ def get_item(                          ):                              my_bool_fields.append(jkey)                              request_keys[jfield.alt_name] = jkey +                        elif isinstance(jfield, DateField): +                            my_dated_fields.append(jkey) +                            request_keys[jfield.alt_name] = jkey                          else:                              request_keys[jfield.alt_name] = jkey + "__iexact"          if "query" in dct: | 
