From ac649d5cccb49326e46c8716e78a4ef7e8b5b0ff Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Fri, 1 Apr 2011 17:17:35 +0200 Subject: [PATCH] [ADD] date search widget bzr revid: xmo@openerp.com-20110401151735-hdxo0289ilmik1go --- addons/base/static/src/js/search.js | 78 +++++++++++++++++++++++--- addons/base/static/src/xml/base.xml | 15 +++++ addons/base/static/test/search-date.js | 73 ++++++++++++++++++++++++ addons/base/static/test/test.html | 11 +++- 4 files changed, 169 insertions(+), 8 deletions(-) create mode 100644 addons/base/static/test/search-date.js diff --git a/addons/base/static/src/js/search.js b/addons/base/static/src/js/search.js index b1a9e295d87..e7becef4e20 100644 --- a/addons/base/static/src/js/search.js +++ b/addons/base/static/src/js/search.js @@ -654,15 +654,79 @@ openerp.base.search.SelectionField = openerp.base.search.Field.extend({ return this.$element.val(); } }); -openerp.base.search.DateTimeField = openerp.base.search.Field.extend({ - get_value: function () { - return this.$element.val(); +/** + * @class + * @extends openerp.base.search.Field + */ +openerp.base.search.DateField = openerp.base.search.Field.extend( + /** @lends openerp.base.search.DateField# */{ + template: 'SearchView.fields.date', + /** + * enables date picker on the HTML widgets + */ + start: function () { + this._super(); + this.$element.find('input').datepicker(); + }, + stop: function () { + this.$element.find('input').datepicker('destroy'); + }, + /** + * Returns an object with two optional keys ``from`` and ``to`` providing + * the values for resp. the from and to sections of the date widget. + * + * If a key is absent, then the corresponding field was not filled. + * + * @returns {Object} + */ + get_values: function () { + var values_array = this.$element.find('input').serializeArray(); + + var from = values_array[0].value; + var to = values_array[1].value; + + var field_values = {}; + if (from) { + field_values.from = from; + } + if (to) { + field_values.to = to; + } + return field_values; + }, + get_context: function () { + var values = this.get_values(); + if (!this.attrs.context || _.isEmpty(values)) { + return null; + } + return _.extend( + {}, this.attrs.context, + {own_values: {self: values}}); + }, + get_domain: function () { + var values = this.get_values(); + if (_.isEmpty(values)) { + return null; + } + var domain = this.attrs['filter_domain']; + if (!domain) { + domain = []; + if (values.from) { + domain.push([this.attrs.name, '>=', values.from]); + } + if (values.to) { + domain.push([this.attrs.name, '<=', values.to]); + } + return domain; + } + + return _.extend( + {}, domain, + {own_values: {self: values}}); } }); -openerp.base.search.DateField = openerp.base.search.Field.extend({ - get_value: function () { - return this.$element.val(); - } +openerp.base.search.DateTimeField = openerp.base.search.DateField.extend({ + // TODO: time? }); openerp.base.search.OneToManyField = openerp.base.search.IntegerField.extend({ // TODO: .relation, .context, .domain diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 06c6ea43df7..e7dcf3a2b7e 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -319,6 +319,21 @@ + + +
+ + to + + +
+