From 2455350c40df86266eabd614ceab451159d67be3 Mon Sep 17 00:00:00 2001 From: Martin Geubelle Date: Thu, 19 Oct 2017 18:05:17 +0200 Subject: [FIX] web: deal with `date` widget on datetime This use case was not correctly managed as the function evaluating if the value has changed compares datetime and date. This triggered an issue if the widget `date` was set on the field `date_order` on a purchase order for example ; it was not possible to create a record as the datapoint was set `dirty`. This rev. ensures that a `field_changed` is not triggered if the day is the same on a date widget. This rev. also adds support of `datetime` fields on date widget, which appears to be a valid use case. Fixes https://github.com/odoo/odoo/issues/20311 --- addons/web/static/src/js/fields/basic_fields.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'addons/web/static/src/js/fields/basic_fields.js') diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index 21205bfc033..7420c1bceff 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -352,7 +352,7 @@ var FieldChar = InputField.extend(TranslatableFieldMixin, { var FieldDate = InputField.extend({ className: "o_field_date", tagName: "span", - supportedFieldTypes: ['date'], + supportedFieldTypes: ['date', 'datetime'], /** * @override @@ -411,12 +411,13 @@ var FieldDate = InputField.extend({ * @override * @private * @param {Moment|false} value + * @returns {boolean} */ _isSameValue: function (value) { if (value === false) { return this.value === false; } - return value.isSame(this.value); + return value.isSame(this.value, 'day'); }, /** * Instantiates a new DateWidget datepicker. @@ -455,7 +456,16 @@ var FieldDateTime = FieldDate.extend({ var value = this.datewidget.getValue(); return value && value.add(-this.getSession().getTZOffset(value), 'minutes'); }, - + /** + * @override + * @private + */ + _isSameValue: function (value) { + if (value === false) { + return this.value === false; + } + return value.isSame(this.value); + }, /** * Instantiates a new DateTimeWidget datepicker rather than DateWidget. * -- cgit v1.2.3