[FIX] web: search input date in another timezone
Put the browser in timezone Sao Paulo (Or like West of UTC) Trigger the autocomplete (and the subsequent search) on a date field by writing a date (in the locale format) in the search view Before this commit, the domain sent to the server contained the date as the day **before** the one asked for in the input This is because, the string input is parsed and gives: input = 12/02/2018 When creating the moment object: > since there is no explicit time, moment will interpret it as 12am (midnight) > We force moment to consider the string as being UTC (function: moment.utc()) > the moment contains, as output the time ** 2018-02-12T00:00:00 UTC ** When getting the facet value for making the domain > we call toDate on the moment object, which, according to the browser is UTC and will be converted to the locale timezone before formatting > And the domain will use the date 2018-02-11T22:00:00 Brazil/SaoPaulo which gives the day before the one we asked for After this commit, this issue doesn't arise, because we use the string representation of the moment object in search_inputs (i.e 2018-02-12T00:00:00 UTC), to create a new one *BUT* we create it with a date format that excludes the time from being interpreted. Also, the resulting moment object in this case is not flagged as UTC anymore OPW 1903224 closes odoo/odoo#28542
This commit is contained in:
@@ -341,7 +341,8 @@ var BooleanField = SelectionField.extend(/** @lends instance.web.search.BooleanF
|
||||
*/
|
||||
var DateField = Field.extend(/** @lends instance.web.search.DateField# */{
|
||||
value_from: function (facetValue) {
|
||||
return time.date_to_str(facetValue.get('value'));
|
||||
var serverFormat = (this.attrs && this.attrs.type === 'datetime') ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD';
|
||||
return facetValue.get('valueAsMoment').clone().format(serverFormat);
|
||||
},
|
||||
complete: function (needle) {
|
||||
// Make sure the needle has a correct format before the creation of the moment object. See
|
||||
@@ -355,6 +356,7 @@ var DateField = Field.extend(/** @lends instance.web.search.DateField# */{
|
||||
}
|
||||
|
||||
var m = moment(v, t === 'datetime' ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD');
|
||||
|
||||
if (!m.isValid()) { return $.when(null); }
|
||||
var date_string = field_utils.format[t](m, {type: t});
|
||||
var label = _.str.sprintf(_.str.escapeHTML(
|
||||
@@ -366,7 +368,7 @@ var DateField = Field.extend(/** @lends instance.web.search.DateField# */{
|
||||
facet: {
|
||||
category: this.attrs.string,
|
||||
field: this,
|
||||
values: [{label: date_string, value: m.toDate()}]
|
||||
values: [{label: date_string, value: m.toDate(), valueAsMoment: m}]
|
||||
}
|
||||
}]);
|
||||
}
|
||||
@@ -383,11 +385,7 @@ var DateField = Field.extend(/** @lends instance.web.search.DateField# */{
|
||||
* @class
|
||||
* @extends instance.web.DateField
|
||||
*/
|
||||
var DateTimeField = DateField.extend(/** @lends instance.web.search.DateTimeField# */{
|
||||
value_from: function (facetValue) {
|
||||
return time.datetime_to_str(facetValue.get('value'));
|
||||
}
|
||||
});
|
||||
var DateTimeField = DateField;
|
||||
|
||||
var ManyToOneField = CharField.extend({
|
||||
default_operator: {},
|
||||
|
||||
Reference in New Issue
Block a user