diff --git a/tryton/tryton/common/datetime_.py b/tryton/tryton/common/datetime_.py index 41c49a116c..2dae89b154 100644 --- a/tryton/tryton/common/datetime_.py +++ b/tryton/tryton/common/datetime_.py @@ -10,7 +10,9 @@ from dateutil.parser import parse from .common import IconFactory -__all__ = ['Date', 'CellRendererDate', 'Time', 'CellRendererTime', 'DateTime'] +__all__ = [ + 'Date', 'CellRendererDate', 'Time', 'CellRendererTime', 'DateTime', + 'date_parse'] _ = gettext.gettext diff --git a/tryton/tryton/gui/window/view_form/view/list_gtk/widget.py b/tryton/tryton/gui/window/view_form/view/list_gtk/widget.py index 076f1642aa..382c94329c 100644 --- a/tryton/tryton/gui/window/view_form/view/list_gtk/widget.py +++ b/tryton/tryton/gui/window/view_form/view/list_gtk/widget.py @@ -28,7 +28,8 @@ from tryton.common import data2pixbuf from tryton.common.completion import get_completion, update_completion from tryton.common.selection import ( SelectionMixin, PopdownMixin, selection_shortcuts) -from tryton.common.datetime_ import CellRendererDate, CellRendererTime +from tryton.common.datetime_ import ( + CellRendererDate, CellRendererTime, date_parse) from tryton.common.domain_parser import quote from tryton.config import CONFIG @@ -474,6 +475,17 @@ class Date(GenericText): else: return '' + def value_from_text(self, record, text, callback=None): + if isinstance(text, str): + field = record[self.attrs['name']] + try: + # Use a datetime instance and rely on field to convert to the + # proper type + text = date_parse(text, self.get_format(record, field)) + except (ValueError, OverflowError): + text = None + return super().value_from_text(record, text, callback=callback) + class Time(Date):