[FIX] web: various fixes for date and datetime in client

The field_utils date method have been modified recently, and the idea
behind those changes is that the BasicModel keeps at all time a moment
instance as its internal representation of a date or datetime.

But the parse and format methods did not properly support unset dates,
so we have to slighlty change them to support the case where their values is
not set.
This commit is contained in:
Géry Debongnie
2017-04-11 19:44:38 +02:00
committed by Aaron Bohy
parent 4a612171b3
commit da4e653695
3 changed files with 87 additions and 7 deletions
+16 -4
View File
@@ -36,20 +36,26 @@ function format_char(value) {
}
/**
* @params {Moment}
* @params {Moment|false}
* @returns {string}
*/
function format_date(value) {
if (!value) {
return "";
}
var l10n = core._t.database.parameters;
var date_format = time.strftime_to_moment_format(l10n.date_format);
return value.format(date_format);
}
/**
* @params {Moment}
* @params {Moment|false}
* @returns {string}
*/
function format_datetime(value) {
if (!value) {
return "";
}
var l10n = core._t.database.parameters;
var date_format = time.strftime_to_moment_format(l10n.date_format);
var time_format = time.strftime_to_moment_format(l10n.time_format);
@@ -160,9 +166,12 @@ function format_selection(value, field) {
* The method toJSON return the formated value to send value server side
*
* @params {string}
* @returns {Moment} Moment date object
* @returns {Moment|false} Moment date object
*/
function parse_date(value) {
if (!value) {
return false;
}
var date_pattern = time.strftime_to_moment_format(core._t.database.parameters.date_format);
var date_pattern_wo_zero = date_pattern.replace('MM','M').replace('DD','D');
var date = moment(value, [date_pattern, date_pattern_wo_zero, moment.ISO_8601], true);
@@ -188,9 +197,12 @@ function parse_date(value) {
* The method toJSON return the formated value to send value server side
*
* @params {string}
* @returns {Moment} Moment date object
* @returns {Moment|false} Moment date object
*/
function parse_datetime(value) {
if (!value) {
return false;
}
var date_pattern = time.strftime_to_moment_format(core._t.database.parameters.date_format),
time_pattern = time.strftime_to_moment_format(core._t.database.parameters.time_format);
var date_pattern_wo_zero = date_pattern.replace('MM','M').replace('DD','D'),
@@ -479,6 +479,22 @@ QUnit.module('basic_fields', {
QUnit.module('FieldDate');
QUnit.test('date field is empty if no date is set', function (assert) {
assert.expect(2);
var form = createView({
View: FormView,
model: 'partner',
data: this.data,
arch:'<form string="Partners"><field name="date"/></form>',
res_id: 4,
});
var $span = form.$('span.o_form_field');
assert.strictEqual($span.length, 1, "should have one span in the form view");
assert.strictEqual($span.text(), "", "and it should be empty");
});
QUnit.test('date field in edit mode', function (assert) {
assert.expect(7);
@@ -23,7 +23,7 @@ QUnit.module('Views', {
},
records: [
{id: 1, foo: 'blip', bar: 1, product_id: 37, category: [12], display_name: "first partner", date: "2017-01-25"},
{id: 2, foo: 'gnap', bar: 2, product_id: 41, display_name: "second partner", date: "2017-01-26"},
{id: 2, foo: 'gnap', bar: 2, product_id: 41, display_name: "second partner"},
],
onchanges: {},
},
@@ -718,9 +718,38 @@ QUnit.module('Views', {
});
QUnit.test('dates are properly loaded and parsed', function (assert) {
assert.expect(1);
QUnit.test('dates are properly loaded and parsed (record)', function (assert) {
assert.expect(2);
var model = createModel({
Model: BasicModel,
data: this.data,
});
var params = {
fieldNames: ['date'],
fields: this.data.partner.fields,
modelName: 'partner',
res_id: 1,
};
model.load(params).then(function (resultID) {
var record = model.get(resultID);
assert.ok(record.data.date instanceof moment,
"fetched date field should have been formatted");
});
params.res_id = 2;
model.load(params).then(function (resultID) {
var record = model.get(resultID);
assert.strictEqual(record.data.date, false,
"unset date field should be false");
});
});
QUnit.test('dates are properly loaded and parsed (list)', function (assert) {
assert.expect(2);
var model = createModel({
Model: BasicModel,
@@ -737,8 +766,31 @@ QUnit.module('Views', {
model.load(params).then(function (resultID) {
var record = model.get(resultID);
var firstRecord = record.data[0];
var secondRecord = record.data[1];
assert.ok(firstRecord.data.date instanceof moment,
"fetched date field should have been formatted");
assert.strictEqual(secondRecord.data.date, false,
"if date is not set, it should be false");
});
});
QUnit.test('dates are properly loaded and parsed (default_get)', function (assert) {
assert.expect(1);
var model = createModel({
Model: BasicModel,
data: this.data,
});
var params = {
fieldNames: ['date'],
fields: this.data.partner.fields,
modelName: 'partner',
};
model.makeDefaultRecord('partner', params).then(function (resultID) {
var record = model.get(resultID);
assert.strictEqual(record.data.date, false, "date default value should be false");
});
});