diff --git a/tryton/tryton/common/datetime_.py b/tryton/tryton/common/datetime_.py index 0501e65d75..e70b4a306d 100644 --- a/tryton/tryton/common/datetime_.py +++ b/tryton/tryton/common/datetime_.py @@ -9,7 +9,9 @@ from gi.repository import Gdk, GObject, Gtk 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 442903e2b5..fb05fd1d39 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 @@ -23,7 +23,8 @@ from tryton.common.cellrenderertext import ( CellRendererText, CellRendererTextCompletion) from tryton.common.cellrenderertoggle import CellRendererToggle from tryton.common.completion import get_completion, update_completion -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.common.selection import ( PopdownMixin, SelectionMixin, selection_shortcuts) @@ -497,6 +498,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):