From e07f27d45e5faa782089361a13cc81db22945337 Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Tue, 28 Feb 2017 11:05:00 +0100 Subject: [PATCH] [FIX] web: kanban: conditions on relational fields This commit aims to correctly fill in the raw_value of each field in the qweb_context use to render the kanban templates. For relational fields, the absence of value should be false, instead of an empty array. Moreover, the Many2One case is different from the x2Many cases as in the first case the datapoint is a record, and it the last ones it is a list. --- .../src/js/views/kanban/kanban_record.js | 6 ++-- addons/web/static/test/views/kanban_tests.js | 33 ++++++++++++++++++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/js/views/kanban/kanban_record.js b/addons/web/static/src/js/views/kanban/kanban_record.js index 3bb0340d3fa..0bd38b44b02 100644 --- a/addons/web/static/src/js/views/kanban/kanban_record.js +++ b/addons/web/static/src/js/views/kanban/kanban_record.js @@ -179,8 +179,10 @@ var KanbanRecord = Widget.extend({ if ((r.type === 'date' || r.type === 'datetime') && value) { r.raw_value = value.toDate(); - } else if (r.type === 'one2many' || r.type === 'many2one' || r.type === 'many2many') { - r.raw_value = value ? value.res_ids : []; + } else if (r.type === 'one2many' || r.type === 'many2many') { + r.raw_value = value.count ? value.res_ids : false; + } else if (r.type === 'many2one' ) { + r.raw_value = value.res_id || false; } else { r.raw_value = value; } diff --git a/addons/web/static/test/views/kanban_tests.js b/addons/web/static/test/views/kanban_tests.js index 2a33cd3a9a8..5356fe42ffe 100644 --- a/addons/web/static/test/views/kanban_tests.js +++ b/addons/web/static/test/views/kanban_tests.js @@ -849,7 +849,38 @@ QUnit.module('Views', { kanban.destroy(); }); -}); + QUnit.test('evaluate conditions on relational fields', function (assert) { + assert.expect(3); + this.data.partner.records[0].product_id = false; + this.data.partner.records[0].category_ids = [6]; + + var kanban = createView({ + View: KanbanView, + model: 'partner', + data: this.data, + arch: '' + + '' + + '' + + '' + + '
' + + '' + + '' + + '
' + + '
' + + '
', + }); + + assert.strictEqual($('.o_kanban_record:not(.o_kanban_ghost)').length, 4, + "there should be 4 records"); + assert.strictEqual($('.o_kanban_record:not(.o_kanban_ghost) .btn_a').length, 1, + "only 1 of them should have the 'Action' button"); + assert.strictEqual($('.o_kanban_record:not(.o_kanban_ghost) .btn_b').length, 3, + "only 3 of them should have the 'Action' button"); + + kanban.destroy(); + }); + +}); });