summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ishtar_common/models.py9
-rw-r--r--ishtar_common/models_common.py6
-rw-r--r--ishtar_common/templatetags/ishtar_helpers.py6
-rw-r--r--ishtar_common/utils.py17
-rw-r--r--ishtar_common/views_item.py5
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: