[FIX] web: basic model now parse dates on lists

Before this commit, the BasicModel didn't parse the dates when loading
data for a list.  But the rest of the web client assumes that data is
properly parsed into their correct types, so a moment instance for date
and datetime.

Also, uppercase field_utils and properly reorder imports
This commit is contained in:
Géry Debongnie
2017-04-11 19:44:38 +02:00
committed by Aaron Bohy
parent 064d7f4621
commit 4a612171b3
2 changed files with 40 additions and 9 deletions
@@ -80,9 +80,9 @@ var AbstractModel = require('web.AbstractModel');
var concurrency = require('web.concurrency');
var Context = require('web.Context');
var data = require('web.data'); // TODO: remove dependency to data.js
var fieldUtils = require('web.field_utils');
var pyeval = require('web.pyeval');
var session = require('web.session');
var field_utils = require('web.field_utils');
var x2ManyCommands = {
// (0, _, {values})
@@ -537,10 +537,10 @@ var BasicModel = AbstractModel.extend({
});
} else if (field.type === 'date') {
// process date: convert into Date object
record._changes[name] = field_utils.parse_date(result[name]);
record._changes[name] = fieldUtils.parse_date(result[name]);
} else if (field.type === 'datetime') {
// process datetime: convert into Date object
record._changes[name] = field_utils.parse_datetime(result[name]);
record._changes[name] = fieldUtils.parse_datetime(result[name]);
} else {
record._changes[name] = result[name];
}
@@ -1278,10 +1278,10 @@ var BasicModel = AbstractModel.extend({
}
} else if (field.type === 'date') {
// process data: convert into Date object
record.data[name] = field_utils.parse_date(val);
record.data[name] = fieldUtils.parse_date(val);
} else if (field.type === 'datetime') {
// process datetime: convert into Date object
record.data[name] = field_utils.parse_datetime(val);
record.data[name] = fieldUtils.parse_datetime(val);
}
});
}).then(function () {
@@ -1926,6 +1926,12 @@ var BasicModel = AbstractModel.extend({
dataPoint.data[name] = r.id;
}
if (field.type === 'date') {
dataPoint.data[name] = fieldUtils.parse_date(dataPoint.data[name]);
}
if (field.type === 'datetime') {
dataPoint.data[name] = fieldUtils.parse_datetime(dataPoint.data[name]);
}
});
return dataPoint.id;
});
@@ -19,10 +19,11 @@ QUnit.module('Views', {
product_id: {string: "Favorite product", type: 'many2one', relation: 'product'},
product_ids: {string: "Favorite products", type: 'one2many', relation: 'product'},
category: {string: "Category M2M", type: 'many2many', relation: 'partner_type'},
date: {string: "Date Field", type: 'date'},
},
records: [
{id: 1, foo: 'blip', bar: 1, product_id: 37, category: [12], display_name: "first partner"},
{id: 2, foo: 'gnap', bar: 2, product_id: 41, display_name: "second partner"},
{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"},
],
onchanges: {},
},
@@ -717,5 +718,29 @@ QUnit.module('Views', {
});
});
});
QUnit.test('dates are properly loaded and parsed', function (assert) {
assert.expect(1);
var model = createModel({
Model: BasicModel,
data: this.data,
});
var params = {
fieldNames: ['date'],
fields: this.data.partner.fields,
modelName: 'partner',
type: 'list',
};
model.load(params).then(function (resultID) {
var record = model.get(resultID);
var firstRecord = record.data[0];
assert.ok(firstRecord.data.date instanceof moment,
"fetched date field should have been formatted");
});
});
});});