From c2a402f10977dbc2bf99dd3c0cf36084f1743563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Mon, 12 Nov 2012 17:12:47 +0100 Subject: [PATCH] Use range for Date/Time fields in filter box review586003 --- CHANGELOG | 1 + tryton/common/domain_parser.py | 3 +- .../window/view_form/view/screen_container.py | 31 +++++++++++++++++-- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 72732e46ba..a42db36321 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Use range for Date/Time fields in filter box * Allow multi-selection for Selection field in filter box Version 2.6.0 - 2012-10-22 diff --git a/tryton/common/domain_parser.py b/tryton/common/domain_parser.py index 74970766b2..7bfe731f09 100644 --- a/tryton/common/domain_parser.py +++ b/tryton/common/domain_parser.py @@ -957,7 +957,8 @@ class DomainParser(object): operator = negate_operator(default_operator(field)) if 'like' in operator: value = likify(value) - if field['type'] in ('integer', 'float', 'numeric'): + if field['type'] in ('integer', 'float', 'numeric', + 'datetime', 'date', 'time'): if '..' in value: lvalue, rvalue = value.split('..', 1) lvalue = convert_value(field, lvalue) diff --git a/tryton/gui/window/view_form/view/screen_container.py b/tryton/gui/window/view_form/view/screen_container.py index 4d3ef4e6fe..be36034e68 100644 --- a/tryton/gui/window/view_form/view/screen_container.py +++ b/tryton/gui/window/view_form/view/screen_container.py @@ -15,6 +15,30 @@ from tryton.pyson import PYSONDecoder _ = gettext.gettext +class Dates(gtk.HBox): + + def __init__(self, format_): + super(Dates, self).__init__() + self.from_ = common.date_widget.DateEntry(format_) + self.pack_start(self.from_, expand=True, fill=True) + self.pack_start(gtk.Label(_('..')), expand=False, fill=False) + self.to = common.date_widget.DateEntry(format_) + self.pack_start(self.to, expand=True, fill=True) + + def get_value(self): + from_ = self.from_.get_text() + to = self.to.get_text() + if from_ and to: + if from_ != to: + return '%s..%s' % (quote(from_), quote(to)) + else: + return quote(from_) + elif from_: + return '>=%s' % quote(from_) + elif to: + return '<%s' % quote(to) + + class Selection(gtk.ScrolledWindow): def __init__(self, selections): @@ -243,7 +267,7 @@ class ScreenContainer(object): for label, entry in self.search_table.fields: if isinstance(entry, gtk.ComboBox): value = quote(entry.get_active_text()) - elif isinstance(entry, Selection): + elif isinstance(entry, (Dates, Selection)): value = entry.get_value() else: value = quote(entry.get_text()) @@ -308,8 +332,9 @@ class ScreenContainer(object): format_ = PYSONDecoder({}).decode(field['format']) if field['type'] == 'datetime': format_ = date_format() + ' ' + format_ - entry = common.date_widget.DateEntry(format_) - entry.connect('activate', date_activate) + entry = Dates(format_) + entry.from_.connect('activate', date_activate) + entry.to.connect('activate', date_activate) else: entry = gtk.Entry() entry.connect('activate', lambda *a: search())