summaryrefslogtreecommitdiff
path: root/addons/web
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2018-11-02 10:52:55 +0100
committerChristophe Simonis <chs@odoo.com>2018-11-02 10:52:55 +0100
commit5e055a2afd23bd4e6a29c18c86d1978dcd98fc9f (patch)
tree058c2cef359de70f7bbabacaa63446fa189af12e /addons/web
parent486777654009aa372a21e9d6dd52e8c22173ee16 (diff)
parentf6ca72b3ce9ecc9007ae5825d2c648e3b26b098e (diff)
[MERGE] forward port branch saas-11.4 up to f6ca72b3ce9
Diffstat (limited to 'addons/web')
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js7
-rw-r--r--addons/web/static/src/js/views/basic/basic_view.js8
-rw-r--r--addons/web/static/src/js/views/kanban/kanban_controller.js2
-rw-r--r--addons/web/static/tests/fields/basic_fields_tests.js2
-rw-r--r--addons/web/static/tests/fields/relational_fields_tests.js87
-rw-r--r--addons/web/static/tests/views/kanban_tests.js24
6 files changed, 125 insertions, 5 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 de879018ad5..1e930ccf783 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -2188,7 +2188,7 @@ var BasicModel = AbstractModel.extend({
* @param {Object} [options]
* @param {string[]} [options.fieldNames] the list of fields to fetch. If
* not given, fetch all the fields in record.fieldNames (+ display_name)
- * @param {string} [optinos.viewType] the type of view for which the record
+ * @param {string} [options.viewType] the type of view for which the record
* is fetched (usefull to load the adequate fields), by defaults, uses
* record.viewType
* @returns {Deferred<Object>} resolves to the record or is rejected in
@@ -3785,11 +3785,12 @@ var BasicModel = AbstractModel.extend({
*/
_postprocess: function (record, options) {
var self = this;
+ var viewType = options && options.viewType || record.viewType;
var defs = [];
_.each(record.getFieldNames(options), function (name) {
var field = record.fields[name];
- var fieldInfo = record.fieldsInfo[record.viewType][name] || {};
+ var fieldInfo = record.fieldsInfo[viewType][name] || {};
var options = fieldInfo.options || {};
if (options.always_reload) {
if (record.fields[name].type === 'many2one' && record.data[name]) {
@@ -3798,7 +3799,7 @@ var BasicModel = AbstractModel.extend({
model: field.relation,
method: 'name_get',
args: [element.data.id],
- context: self._getContext(record, {fieldName: name}),
+ context: self._getContext(record, {fieldName: name, viewType: viewType}),
})
.then(function (result) {
element.data.display_name = result[0][1];
diff --git a/addons/web/static/src/js/views/basic/basic_view.js b/addons/web/static/src/js/views/basic/basic_view.js
index 9e1cde2aada..eb3efe7001d 100644
--- a/addons/web/static/src/js/views/basic/basic_view.js
+++ b/addons/web/static/src/js/views/basic/basic_view.js
@@ -150,6 +150,14 @@ var BasicView = AbstractView.extend({
}
}
}
+ // Many2one: context is not the same between the different views
+ // this means the result of a name_get could differ
+ if (fieldType === 'many2one') {
+ if (JSON.stringify(record.data[name].context) !==
+ JSON.stringify(fieldInfo.context)) {
+ fieldNames.push(name);
+ }
+ }
}
});
diff --git a/addons/web/static/src/js/views/kanban/kanban_controller.js b/addons/web/static/src/js/views/kanban/kanban_controller.js
index e195b33068c..6ffbad9612a 100644
--- a/addons/web/static/src/js/views/kanban/kanban_controller.js
+++ b/addons/web/static/src/js/views/kanban/kanban_controller.js
@@ -273,7 +273,7 @@ var KanbanController = BasicController.extend({
_onButtonNew: function () {
var state = this.model.get(this.handle, {raw: true});
var quickCreateEnabled = this.quickCreateEnabled && viewUtils.isQuickCreateEnabled(state);
- if (this.on_create === 'quick_create' && quickCreateEnabled) {
+ if (this.on_create === 'quick_create' && quickCreateEnabled && state.data.length) {
// Activate the quick create in the first column
this.renderer.addQuickCreate();
} else if (this.on_create && this.on_create !== 'quick_create') {
diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js
index 81c21cf6052..70effe45e72 100644
--- a/addons/web/static/tests/fields/basic_fields_tests.js
+++ b/addons/web/static/tests/fields/basic_fields_tests.js
@@ -2332,7 +2332,7 @@ QUnit.module('basic_fields', {
var evt = document.createEvent("MouseEvents"); //taken ref from https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/initMouseEvent
evt.initMouseEvent("mouseover", true, true, window, 0, 0, 0, 80, 20, false, false, false, false, 0, null);
$('.discreteBar')[0].dispatchEvent(evt);
- var tooltip = $('.nvtooltip').find('table').find('.key')[0].innerText;
+ var tooltip = $('.nvtooltip').find('table').find('.key')[0].innerText.trim();
assert.equal(tooltip, graph_key, "graph tooltip should be generated ");
$('.nvtooltip').remove();
diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js
index e1e91863448..7a96ede57ee 100644
--- a/addons/web/static/tests/fields/relational_fields_tests.js
+++ b/addons/web/static/tests/fields/relational_fields_tests.js
@@ -380,6 +380,93 @@ QUnit.module('relational_fields', {
form.destroy();
});
+ QUnit.test('show_address works in a view embedded in a view of another type', function (assert) {
+ assert.expect(1);
+
+ this.data.turtle.records[1].turtle_trululu = 2;
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form string="Partners">' +
+ '<field name="display_name"/>' +
+ '<field name="turtles"/>' +
+ '</form>',
+ res_id: 1,
+ archs: {
+ "turtle,false,form": '<form string="T">' +
+ '<field name="display_name"/>' +
+ '<field name="turtle_trululu" context="{\'show_address\': 1}" options="{\'always_reload\': True}"/>' +
+ '</form>',
+ "turtle,false,list": '<tree editable="bottom">' +
+ '<field name="display_name"/>' +
+ '</tree>',
+ },
+ mockRPC: function (route, args) {
+ if (args.method === 'name_get') {
+ return this._super(route, args).then(function (result) {
+ if (args.model === 'partner' && args.kwargs.context.show_address) {
+ result[0][1] += '\nrue morgue\nparis 75013';
+ }
+ return result;
+ });
+ }
+ return this._super(route, args);
+ },
+ });
+ // click the turtle field, opens a modal with the turtle form view
+ form.$('.o_data_row:first td.o_data_cell').click();
+
+ assert.strictEqual($('[name="turtle_trululu"]').text(), "second recordrue morgueparis 75013",
+ "The partner's address should be displayed");
+ form.destroy();
+ });
+
+ QUnit.test('many2one data is reloaded if there is a context to take into account', function (assert) {
+ assert.expect(1);
+
+ this.data.turtle.records[1].turtle_trululu = 2;
+
+ var form = createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form string="Partners">' +
+ '<field name="display_name"/>' +
+ '<field name="turtles"/>' +
+ '</form>',
+ res_id: 1,
+ archs: {
+ "turtle,false,form": '<form string="T">' +
+ '<field name="display_name"/>' +
+ '<field name="turtle_trululu" context="{\'show_address\': 1}" options="{\'always_reload\': True}"/>' +
+ '</form>',
+ "turtle,false,list": '<tree editable="bottom">' +
+ '<field name="display_name"/>' +
+ '<field name="turtle_trululu"/>' +
+ '</tree>',
+ },
+ mockRPC: function (route, args) {
+ if (args.method === 'name_get') {
+ return this._super(route, args).then(function (result) {
+ if (args.model === 'partner' && args.kwargs.context.show_address) {
+ result[0][1] += '\nrue morgue\nparis 75013';
+ }
+ return result;
+ });
+ }
+ return this._super(route, args);
+ },
+ });
+ // click the turtle field, opens a modal with the turtle form view
+ form.$('.o_data_row:first').click();
+
+ assert.strictEqual($('.modal [name=turtle_trululu]').text(), "second recordrue morgueparis 75013",
+ "The partner's address should be displayed");
+ form.destroy();
+ });
+
QUnit.test('many2ones in form views with search more', function (assert) {
assert.expect(3);
this.data.partner.records.push({
diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js
index 17c0c022e85..ba8113e7889 100644
--- a/addons/web/static/tests/views/kanban_tests.js
+++ b/addons/web/static/tests/views/kanban_tests.js
@@ -4737,6 +4737,30 @@ QUnit.module('Views', {
kanban.destroy();
});
+ QUnit.test('quick_create on grouped kanban without column', function (assert) {
+ assert.expect(1);
+ this.data.partner.records = [];
+ var kanban = createView({
+ View: KanbanView,
+ model: 'partner',
+ data: this.data,
+ arch: '<kanban class="o_kanban_test" on_create="quick_create"><templates><t t-name="kanban-box">' +
+ '<div>' +
+ '<field name="name"/>' +
+ '</div>' +
+ '</t></templates></kanban>',
+ groupBy: ['product_id'],
+
+ intercepts: {
+ switch_view: function (event) {
+ assert.ok(true, "switch_view was called instead of quick_create");
+ },
+ },
+ });
+ kanban.$buttons.find('.o-kanban-button-new').click();
+ kanban.destroy();
+ });
+
QUnit.test('keyboard navigation on kanban basic rendering', function (assert) {
assert.expect(3);