diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js index 15921f4332e..9d8df720436 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -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; }); diff --git a/addons/web/static/test/views/basic_model_tests.js b/addons/web/static/test/views/basic_model_tests.js index b68383fc9ca..2624fb77c8c 100644 --- a/addons/web/static/test/views/basic_model_tests.js +++ b/addons/web/static/test/views/basic_model_tests.js @@ -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"); + }); + }); + + +});});