From b3a88b6ed846a13c0cd07cc25ea49bccbdf84aa8 Mon Sep 17 00:00:00 2001 From: Goffin Simon Date: Wed, 4 May 2016 13:37:40 +0200 Subject: [FIX] web: raise a warning for bad domain When a user wrote a wrong value in char_domain field it should raise a warning message instead of a traceback. opw:676783 --- addons/web/static/src/js/views/form_widgets.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/views/form_widgets.js b/addons/web/static/src/js/views/form_widgets.js index 1214f6e2ce3..b33177eb1d5 100644 --- a/addons/web/static/src/js/views/form_widgets.js +++ b/addons/web/static/src/js/views/form_widgets.js @@ -455,7 +455,13 @@ var FieldCharDomain = common.AbstractField.extend(common.ReinitializeFieldMixin, if (this.get('value')) { var model = this.options.model || this.field_manager.get_field_value(this.options.model_field); - var domain = pyeval.eval('domain', this.get('value')); + try{ + var domain = pyeval.eval('domain', this.get('value')); + } + catch(e){ + this.do_warn(_t('Error: Bad domain'), _t('The domain is wrong.')); + return; + } var ds = new data.DataSetStatic(self, model, self.build_context()); ds.call('search_count', [domain]).then(function (results) { self.$('.o_count').text(results + _t(' selected records')); -- cgit v1.2.3 From 50b94ef079b2fd9f4e9201ea8f977fadab109aea Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Mon, 9 May 2016 15:11:35 +0200 Subject: [FIX] web: search input of date When the user searches for date (or a datetime) in the search bar, the suggested date can become completely wrong. For example, in the French localization where the date format is DD/MM/YYYY, the system will search for the date MM/DD/YYYY. This is even worse when the date is not fully written: DD/MM could be converted to MM/DD/0000, which doesn't make any sense. This is related to the moment issue https://github.com/moment/moment/issues/1407. The fix is to make sure that the input date has a correct format thanks to `parse_value`. The latter converts the date into a fixed format. Fixes #11876 opw-676604 --- addons/web/static/src/js/framework/formats.js | 6 +++--- addons/web/static/src/js/views/search_inputs.js | 12 +++++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'addons/web/static/src/js') diff --git a/addons/web/static/src/js/framework/formats.js b/addons/web/static/src/js/framework/formats.js index 4b5ff8b4048..52a2fa5b0b0 100644 --- a/addons/web/static/src/js/framework/formats.js +++ b/addons/web/static/src/js/framework/formats.js @@ -160,17 +160,17 @@ function parse_value (value, descriptor, value_if_empty) { case 'progressbar': return parse_value(value, {type: "float"}); case 'datetime': - var datetime = moment(value, [date_pattern + ' ' + time_pattern, date_pattern_wo_zero + ' ' + time_pattern_wo_zero], true); + var datetime = moment(value, [date_pattern + ' ' + time_pattern, date_pattern_wo_zero + ' ' + time_pattern_wo_zero, moment.ISO_8601], true); if (datetime.isValid()) return time.datetime_to_str(datetime.toDate()); throw new Error(_.str.sprintf(_t("'%s' is not a correct datetime"), value)); case 'date': - var date = moment(value, [date_pattern, date_pattern_wo_zero], true); + var date = moment(value, [date_pattern, date_pattern_wo_zero, moment.ISO_8601], true); if (date.isValid()) return time.date_to_str(date.toDate()); throw new Error(_.str.sprintf(_t("'%s' is not a correct date"), value)); case 'time': - var _time = moment(value, [time_pattern, time_pattern_wo_zero], true); + var _time = moment(value, [time_pattern, time_pattern_wo_zero, moment.ISO_8601], true); if (_time.isValid()) return time.time_to_str(_time.toDate()); throw new Error(_.str.sprintf(_t("'%s' is not a correct time"), value)); diff --git a/addons/web/static/src/js/views/search_inputs.js b/addons/web/static/src/js/views/search_inputs.js index 9d08a537e9d..edeffd874b0 100644 --- a/addons/web/static/src/js/views/search_inputs.js +++ b/addons/web/static/src/js/views/search_inputs.js @@ -341,7 +341,17 @@ var DateField = Field.extend(/** @lends instance.web.search.DateField# */{ return time.date_to_str(facetValue.get('value')); }, complete: function (needle) { - var m = moment(needle); + // Make sure the needle has a correct format before the creation of the moment object. See + // issue https://github.com/moment/moment/issues/1407 + var t, v; + try { + t = (this.attrs && this.attrs.type === 'datetime') ? 'datetime' : 'date'; + v = formats.parse_value(needle, {'widget': t}); + } catch (e) { + return $.when(null); + } + + var m = moment(v, t === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD'); if (!m.isValid()) { return $.when(null); } var d = m.toDate(); var date_string = formats.format_value(d, this.attrs); -- cgit v1.2.3