From 04f1e50ff360d8621cc42b2fec2041740c852252 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Mon, 6 Mar 2017 12:55:55 +0100 Subject: [PATCH] [FIX] web: date value must be parsed to moment object --- .../static/src/js/views/basic/basic_model.js | 12 ++++++++ .../static/test/views/basic_model_tests.js | 29 +++++++++++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) 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 119be6e7482..f04cac96400 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -1167,6 +1167,18 @@ var BasicModel = AbstractModel.extend({ .then(function (records) { _.each(records, function (record) { list_records[record.id].data = record; + _.each(record, function (val, fieldName) { + var field = list.fields[fieldName]; + if (field.type === 'date') { + // process data: convert into a moment instance + record[fieldName] = fieldUtils.parse.date(val); + } else if (field.type === 'datetime') { + // process datetime: convert into a moment instance + record[fieldName] = fieldUtils.parse.datetime(val); + } else { + record[fieldName] = val; + } + }); }); }); defs.push(def); diff --git a/addons/web/static/test/views/basic_model_tests.js b/addons/web/static/test/views/basic_model_tests.js index 0fb7876063d..950769c2c7b 100644 --- a/addons/web/static/test/views/basic_model_tests.js +++ b/addons/web/static/test/views/basic_model_tests.js @@ -38,10 +38,11 @@ QUnit.module('Views', { }, partner_type: { fields: { - display_name: {string: "Partner Type", type: "char"} + display_name: {string: "Partner Type", type: "char"}, + date: {string: "Date Field", type: 'date'}, }, records: [ - {id: 12, display_name: "gold"}, + {id: 12, display_name: "gold", date: "2017-01-25"}, {id: 14, display_name: "silver"}, {id: 15, display_name: "bronze"} ] @@ -328,6 +329,30 @@ QUnit.module('Views', { model.destroy(); }); + QUnit.test('can use command add and get many2many value with date field', function (assert) { + assert.expect(2); + + this.params.fieldNames = ['category']; + + var model = createModel({ + Model: BasicModel, + data: this.data, + }); + + model.load(this.params).then(function (resultID) { + var changes = { + category: {operation: 'ADD_M2M', ids: [{id: 12}]} + }; + model.notifyChanges(resultID, changes).then(function () { + var record = model.get(resultID); + assert.strictEqual(record.data.category.data.length, 1, "should have added one category"); + assert.strictEqual(record.data.category.data[0].data.date instanceof moment, + true, "should have a date parsed in a moment object"); + }); + }); + model.destroy(); + }); + QUnit.test('can fetch a list', function (assert) { assert.expect(4);