diff --git a/addons/web/static/lib/daterangepicker/daterangepicker.js b/addons/web/static/lib/daterangepicker/daterangepicker.js index 034692e4284..a0fd9672594 100644 --- a/addons/web/static/lib/daterangepicker/daterangepicker.js +++ b/addons/web/static/lib/daterangepicker/daterangepicker.js @@ -431,8 +431,11 @@ 'click.daterangepicker': $.proxy(this.show, this), // odoo cutomization, to align behavior of the daterange widget with the date picker one // 'focus.daterangepicker': $.proxy(this.show, this), - 'keyup.daterangepicker': $.proxy(this.elementChanged, this), - 'keydown.daterangepicker': $.proxy(this.keydown, this) //IE 11 compatibility + // odoo customization, we don't want this function to execute his normal behaviour + // as daterangepicker does not know which input has been modified (start, end) and it + // does not have reference to the other input. + // 'keyup.daterangepicker': $.proxy(this.elementChanged, this), + 'keydown.daterangepicker': $.proxy(this.keydown, this) }); } else { this.element.on('click.daterangepicker', $.proxy(this.toggle, this)); diff --git a/addons/web/static/tests/views/fields/daterange_field_tests.js b/addons/web/static/tests/views/fields/daterange_field_tests.js index 48cb94e7a3b..04715c05e69 100644 --- a/addons/web/static/tests/views/fields/daterange_field_tests.js +++ b/addons/web/static/tests/views/fields/daterange_field_tests.js @@ -466,6 +466,65 @@ QUnit.module("Fields", (hooks) => { } ); + QUnit.test( + "Daterange field keyup should not erase end date [REQUIRE FOCUS]", + async function (assert) { + serverData.models.partner.fields.datetime_end = { + string: "Datetime End", + type: "datetime", + }; + serverData.models.partner.records[0].datetime_end = "2017-03-13 00:00:00"; + + await makeView({ + type: "form", + resModel: "partner", + serverData, + arch: ` +
+ + + `, + resId: 1, + }); + + // check date display correctly in readonly + assert.strictEqual( + target.querySelector(".o_field_daterange input").value, + "02/08/2017 15:30:00", + "the start date should be correctly displayed" + ); + assert.strictEqual( + target.querySelectorAll(".o_field_daterange input")[1].value, + "03/13/2017 05:30:00", + "the end date should be correctly displayed" + ); + + // reveal the daterangepicker + await click(target.querySelector(".o_field_daterange[name='datetime'] input")); + + // the keyup event should not be handled by daterangepicker + await triggerEvent(target, ".o_field_daterange[name='datetime'] input", "keyup", { + key: "ArrowLeft", + }); + + const datepickers = document.querySelectorAll(`.daterangepicker`); + // TODO: check if the range is correctly displayed in the picker + await click(datepickers[1].querySelector(".applyBtn")); + + assert.strictEqual( + target.querySelector(".o_field_daterange input").value, + "02/08/2017 15:30:00", + "the start date should be correctly displayed after onkeyup" + ); + + assert.strictEqual( + target.querySelectorAll(".o_field_daterange input")[1].value, + "03/13/2017 05:30:00", + "the end date should be correctly displayed after onkeyup" + ); + } + ); + QUnit.test( "DateRangeField manually input wrong value should show toaster", async function (assert) {