From bc4b7c503673db29b0ea0d4a2b780378173fe3eb Mon Sep 17 00:00:00 2001 From: fw-bot Date: Thu, 10 Oct 2019 15:03:27 +0000 Subject: [PATCH] [FIX] web: can't edit subscription with end date beyond 200 years in the future -Import a subscription with end date beyond 200 in the future (ex: 2500-01-01). -Open the subscription and click the Edit button. Before this commit: A stacktrace appears indicating that a date is not valid. It's not possible to edit the subscription. After this commit: The maxDate of the date picker has been increased to 31/12/9999, allowing the user to edit subscriptions whose end date is that far in the future. A test `toggle datepicker far in the future` for this case has been created. closes odoo/odoo#38527 Opw: 2079696 X-original-commit: 32b6131c04fef7a542a0ccbdb924d177627bfe38 Signed-off-by: Nicolas Martinelli (nim) --- .../web/static/src/js/widgets/date_picker.js | 2 +- .../static/tests/fields/basic_fields_tests.js | 40 +++++++++++++++++++ .../static/src/js/website_form.js | 2 +- 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/addons/web/static/src/js/widgets/date_picker.js b/addons/web/static/src/js/widgets/date_picker.js index 95908433fec..bbe40a825ef 100644 --- a/addons/web/static/src/js/widgets/date_picker.js +++ b/addons/web/static/src/js/widgets/date_picker.js @@ -31,7 +31,7 @@ var DateWidget = Widget.extend({ locale: moment.locale(), format : this.type_of_date === 'datetime' ? time.getLangDatetimeFormat() : time.getLangDateFormat(), minDate: moment({ y: 1900 }), - maxDate: moment().add(200, "y"), + maxDate: moment({ y: 9999, M: 11, d: 31 }), useCurrent: false, icons: { time: 'fa fa-clock-o', diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js index c4bfc8a4341..e864f6341f9 100644 --- a/addons/web/static/tests/fields/basic_fields_tests.js +++ b/addons/web/static/tests/fields/basic_fields_tests.js @@ -2996,6 +2996,46 @@ QUnit.module('basic_fields', { form.destroy(); }); + QUnit.test('date field: toggle datepicker far in the future', async function (assert) { + assert.expect(3); + + this.data.partner.records = [{ + id: 1, + date: "9999-12-30", + foo: "yop", + }] + + var form = await createView({ + View: FormView, + model: 'partner', + data: this.data, + arch:'
', + translateParameters: { // Avoid issues due to localization formats + date_format: '%m/%d/%Y', + }, + res_id: 1, + viewOptions: { + mode: 'edit', + }, + }); + + assert.strictEqual($('.bootstrap-datetimepicker-widget:visible').length, 0, + "datepicker should be closed initially"); + + testUtils.openDatepicker(form.$('.o_datepicker')); + + assert.strictEqual($('.bootstrap-datetimepicker-widget:visible').length, 1, + "datepicker should be opened"); + + // focus another field + form.$('.o_field_widget[name=foo]').click().focus(); + + assert.strictEqual($('.bootstrap-datetimepicker-widget:visible').length, 0, + "datepicker should close itself when the user clicks outside"); + + form.destroy(); + }); + QUnit.test('date field is empty if no date is set', async function (assert) { assert.expect(2); diff --git a/addons/website_form/static/src/js/website_form.js b/addons/website_form/static/src/js/website_form.js index 4fdbf0fd2c1..f67565e3c15 100644 --- a/addons/website_form/static/src/js/website_form.js +++ b/addons/website_form/static/src/js/website_form.js @@ -33,7 +33,7 @@ odoo.define('website_form.animation', function (require) { var l10n = _t.database.parameters; var datepickers_options = { minDate: moment({ y: 1900 }), - maxDate: moment().add(200, "y"), + maxDate: moment({ y: 9999, M: 11, d: 31 }), calendarWeeks: true, icons : { time: 'fa fa-clock-o',