[IMP] web: remove min date limitation of year 1900
Before this commit, user could not selecta a date before year 1900. This was an historical limitation due to python < 3.2 that didn't support dates before 1900. After this commit, user can select any date, user can select any date from 01/01/0001. taskID: 2166761 Fixes #41788 Closes #43055 closes odoo/odoo#51406 Signed-off-by: Géry Debongnie (ged) <ged@openerp.com> Co-authored-by: Mohammed Shekha <msh@odoo.com> Co-authored-by: Aaron Bohy <aab@odoo.com>
This commit is contained in:
committed by
Aaron Bohy
co-authored by
Mohammed Shekha
Aaron Bohy
parent
684b628c5a
commit
6aa6c321a6
@@ -894,7 +894,7 @@ publicWidget.registry.SurveyFormWidget = publicWidget.Widget.extend({
|
||||
|
||||
var minDate = minDateData
|
||||
? this._formatDateTime(minDateData, datetimepickerFormat)
|
||||
: moment({ y: 1900 });
|
||||
: moment({ y: 1 });
|
||||
|
||||
var maxDate = maxDateData
|
||||
? this._formatDateTime(maxDateData, datetimepickerFormat)
|
||||
|
||||
@@ -167,7 +167,7 @@ odoo.define('web.DatePickerOwl', function (require) {
|
||||
},
|
||||
locale: moment.locale(),
|
||||
maxDate: moment({ y: 9999, M: 11, d: 31 }),
|
||||
minDate: moment({ y: 1900 }),
|
||||
minDate: moment({ y: 1 }),
|
||||
useCurrent: false,
|
||||
widgetParent: 'body',
|
||||
};
|
||||
|
||||
@@ -431,9 +431,10 @@ function parseDate(value, field, options) {
|
||||
return false;
|
||||
}
|
||||
var datePattern = time.getLangDateFormat();
|
||||
var datePatternWoZero = datePattern.replace('MM','M').replace('DD','D');
|
||||
var datePatternWoZero = datePattern.replace('MM', 'M').replace('DD', 'D');
|
||||
var date;
|
||||
if (options && options.isUTC) {
|
||||
value = value.padStart(10, "0"); // server may send "932-10-10" for "0932-10-10" on some OS
|
||||
date = moment.utc(value);
|
||||
} else {
|
||||
date = moment.utc(value, [datePattern, datePatternWoZero, moment.ISO_8601]);
|
||||
@@ -442,12 +443,10 @@ function parseDate(value, field, options) {
|
||||
if (date.year() === 0) {
|
||||
date.year(moment.utc().year());
|
||||
}
|
||||
if (date.year() >= 1900) {
|
||||
date.toJSON = function () {
|
||||
return this.clone().locale('en').format('YYYY-MM-DD');
|
||||
};
|
||||
return date;
|
||||
}
|
||||
date.toJSON = function () {
|
||||
return this.clone().locale('en').format('YYYY-MM-DD');
|
||||
};
|
||||
return date;
|
||||
}
|
||||
throw new Error(_.str.sprintf(core._t("'%s' is not a correct date"), value));
|
||||
}
|
||||
@@ -489,12 +488,10 @@ function parseDateTime(value, field, options) {
|
||||
if (datetime.year() === 0) {
|
||||
datetime.year(moment.utc().year());
|
||||
}
|
||||
if (datetime.year() >= 1900) {
|
||||
datetime.toJSON = function () {
|
||||
return this.clone().locale('en').format('YYYY-MM-DD HH:mm:ss');
|
||||
};
|
||||
return datetime;
|
||||
}
|
||||
datetime.toJSON = function () {
|
||||
return this.clone().locale('en').format('YYYY-MM-DD HH:mm:ss');
|
||||
};
|
||||
return datetime;
|
||||
}
|
||||
throw new Error(_.str.sprintf(core._t("'%s' is not a correct datetime"), value));
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ var DateWidget = Widget.extend({
|
||||
this.options = _.extend({
|
||||
locale: moment.locale(),
|
||||
format : this.type_of_date === 'datetime' ? time.getLangDatetimeFormat() : time.getLangDateFormat(),
|
||||
minDate: moment({ y: 1900 }),
|
||||
minDate: moment({ y: 1 }),
|
||||
maxDate: moment({ y: 9999, M: 11, d: 31 }),
|
||||
useCurrent: false,
|
||||
icons: {
|
||||
|
||||
@@ -316,7 +316,7 @@ QUnit.test('parse percentage', function(assert) {
|
||||
});
|
||||
|
||||
QUnit.test('parse datetime', function (assert) {
|
||||
assert.expect(5);
|
||||
assert.expect(6);
|
||||
|
||||
var originalParameters = _.clone(core._t.database.parameters);
|
||||
var originalLocale = moment.locale();
|
||||
@@ -343,8 +343,12 @@ QUnit.test('parse datetime', function (assert) {
|
||||
|
||||
moment.locale('englishForTest');
|
||||
_.extend(core._t.database.parameters, {date_format: '%m/%d/%Y', time_format: '%H:%M:%S'});
|
||||
assert.throws(function () {fieldUtils.parse.datetime("13/01/2019 12:00:00", {}, {})}, /is not a correct/, "Wrongly formated dates should be invalids");
|
||||
assert.throws(function () {fieldUtils.parse.datetime("1899-01-01 12:00:00", {}, {})}, /is not a correct/, "Dates before 1900 should be invalids");
|
||||
assert.throws(function () {
|
||||
fieldUtils.parse.datetime("13/01/2019 12:00:00", {}, {});
|
||||
}, /is not a correct/, "Wrongly formated dates should be invalid");
|
||||
assert.throws(function () {
|
||||
fieldUtils.parse.datetime("10000-01-01 12:00:00", {}, {});
|
||||
}, /is not a correct/, "Dates after 9999 should be invalid");
|
||||
|
||||
dateStr = '01/13/2019 10:05:45';
|
||||
date1 = fieldUtils.parse.datetime(dateStr);
|
||||
@@ -356,6 +360,11 @@ QUnit.test('parse datetime', function (assert) {
|
||||
date2 = moment.utc(dateStr, ['M/D/YYYY H:m:s'], true);
|
||||
assert.equal(date1.format(), date2.format(), "Date without leading 0");
|
||||
|
||||
dateStr = '01/01/0001 10:15:45';
|
||||
date1 = fieldUtils.parse.datetime(dateStr);
|
||||
date2 = moment.utc(dateStr, ['MM/DD/YYYY HH:mm:ss'], true);
|
||||
assert.equal(date1.format(), date2.format(), "can parse dates of year 1");
|
||||
|
||||
moment.locale('norvegianForTest');
|
||||
_.extend(core._t.database.parameters, {date_format: '%d. %b %Y', time_format: '%H:%M:%S'});
|
||||
dateStr = '16. jan. 2019 10:05:45';
|
||||
|
||||
@@ -1443,7 +1443,7 @@ const DatetimePickerUserValueWidget = InputUserValueWidget.extend({
|
||||
this.inputEl.setAttribute('data-target', '#' + datetimePickerId);
|
||||
|
||||
const datepickersOptions = {
|
||||
minDate: moment({y: 1900}),
|
||||
minDate: moment({ y: 1 }),
|
||||
maxDate: moment().add(200, 'y'),
|
||||
calendarWeeks: true,
|
||||
defaultDate: moment().format(),
|
||||
|
||||
@@ -165,7 +165,7 @@ var PagePropertiesDialog = weWidgets.Dialog.extend({
|
||||
}));
|
||||
|
||||
var datepickersOptions = {
|
||||
minDate: moment({y: 1900}),
|
||||
minDate: moment({ y: 1 }),
|
||||
maxDate: moment().add(200, 'y'),
|
||||
calendarWeeks: true,
|
||||
icons : {
|
||||
|
||||
@@ -37,7 +37,7 @@ odoo.define('website_form.s_website_form', function (require) {
|
||||
|
||||
// Initialize datetimepickers
|
||||
var datepickers_options = {
|
||||
minDate: moment({y: 1900}),
|
||||
minDate: moment({ y: 1 }),
|
||||
maxDate: moment({y: 9999, M: 11, d: 31}),
|
||||
calendarWeeks: true,
|
||||
icons: {
|
||||
|
||||
Reference in New Issue
Block a user