[FIX] web: Kanban: deal with group_create attribute
This attribute is used to determine one can create a new column in the kanban view. Before this commit, it was always true and not specified in the controller `activeActions` (which was causing a bug where the no content helper was displayed instead of the column quick create). The controller was also always initiated with false so the column was only available after an update.
This commit is contained in:
@@ -40,8 +40,7 @@ var KanbanController = BasicController.extend({
|
||||
this.on_create = params.on_create;
|
||||
this.hasButtons = params.hasButtons;
|
||||
|
||||
// true iff grouped by an m2o field and group_create action enabled
|
||||
this.create_column_enabled = false;
|
||||
this.createColumnEnabled = this._isCreateColumnEnabled();
|
||||
},
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
@@ -60,16 +59,12 @@ var KanbanController = BasicController.extend({
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Override update method to recompute create_column_enabled.
|
||||
* Override update method to recompute createColumnEnabled.
|
||||
*
|
||||
* @returns {Deferred}
|
||||
*/
|
||||
update: function () {
|
||||
var state = this.model.get(this.handle, {raw: true});
|
||||
var group_by_field = state.fields[state.groupedBy[0]];
|
||||
var grouped_by_m2o = group_by_field && (group_by_field.type === 'many2one');
|
||||
var groupCreate = this.is_action_enabled('group_create');
|
||||
this.create_column_enabled = grouped_by_m2o && groupCreate;
|
||||
this.createColumnEnabled = this._isCreateColumnEnabled();
|
||||
return this._super.apply(this, arguments);
|
||||
},
|
||||
|
||||
@@ -95,9 +90,26 @@ var KanbanController = BasicController.extend({
|
||||
*/
|
||||
_hasContent: function (state) {
|
||||
return this._super.apply(this, arguments) ||
|
||||
this.create_column_enabled ||
|
||||
this.createColumnEnabled ||
|
||||
(state.groupedBy.length && state.data.length);
|
||||
},
|
||||
/**
|
||||
* The column quick create should be displayed in kanban iff grouped by an
|
||||
* m2o field and group_create action enabled.
|
||||
*
|
||||
* @returns {Boolean}
|
||||
*/
|
||||
_isCreateColumnEnabled: function () {
|
||||
var groupCreate = this.is_action_enabled('group_create');
|
||||
if (!groupCreate) {
|
||||
// pre-return to avoid a lot of the following processing
|
||||
return false;
|
||||
}
|
||||
var state = this.model.get(this.handle, {raw: true});
|
||||
var groupByField = state.fields[state.groupedBy[0]];
|
||||
var groupedByM2o = groupByField && (groupByField.type === 'many2one');
|
||||
return groupedByM2o;
|
||||
},
|
||||
/**
|
||||
* This method calls the server to ask for a resequence. Note that this
|
||||
* does not rerender the user interface, because in most case, the
|
||||
@@ -119,7 +131,7 @@ var KanbanController = BasicController.extend({
|
||||
_updateButtons: function () {
|
||||
if (this.$buttons) {
|
||||
var data = this.model.get(this.handle, {raw: true});
|
||||
var create_muted = data.count === 0 && this.create_column_enabled;
|
||||
var create_muted = data.count === 0 && this.createColumnEnabled;
|
||||
this.$buttons.find('.o-kanban-button-new')
|
||||
.toggleClass('btn-primary', !create_muted)
|
||||
.toggleClass('btn-default', create_muted);
|
||||
|
||||
@@ -34,6 +34,7 @@ var KanbanView = BasicView.extend({
|
||||
|
||||
var activeActions = this.controllerParams.activeActions;
|
||||
activeActions = _.extend(activeActions, {
|
||||
group_create: arch.attrs.group_create ? JSON.parse(arch.attrs.group_create) : true,
|
||||
group_edit: arch.attrs.group_edit ? JSON.parse(arch.attrs.group_edit) : true,
|
||||
group_delete: arch.attrs.group_delete ? JSON.parse(arch.attrs.group_delete) : true,
|
||||
});
|
||||
@@ -41,7 +42,7 @@ var KanbanView = BasicView.extend({
|
||||
this.rendererParams.column_options = {
|
||||
editable: activeActions.group_edit,
|
||||
deletable: activeActions.group_delete,
|
||||
group_creatable: true,
|
||||
group_creatable: activeActions.group_create,
|
||||
quick_create: params.isQuickCreateEnabled || this._isQuickCreateEnabled(viewInfo),
|
||||
};
|
||||
this.rendererParams.record_options = {
|
||||
|
||||
@@ -913,6 +913,72 @@ QUnit.module('Views', {
|
||||
kanban.destroy();
|
||||
});
|
||||
|
||||
QUnit.test('no nocontent helper for grouped kanban with no records', function (assert) {
|
||||
assert.expect(4);
|
||||
|
||||
this.data.partner.records = [];
|
||||
|
||||
var kanban = createView({
|
||||
View: KanbanView,
|
||||
model: 'partner',
|
||||
data: this.data,
|
||||
arch: '<kanban>' +
|
||||
'<templates><t t-name="kanban-box">' +
|
||||
'<div><field name="foo"/></div>' +
|
||||
'</t></templates>' +
|
||||
'</kanban>',
|
||||
groupBy: ['product_id'],
|
||||
viewOptions: {
|
||||
action: {
|
||||
help: "No content helper",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.strictEqual(kanban.$('.o_kanban_group').length, 0,
|
||||
"there should be no columns");
|
||||
assert.strictEqual(kanban.$('.o_kanban_record').length, 0,
|
||||
"there should be no records");
|
||||
assert.strictEqual(kanban.$('.oe_view_nocontent').length, 0,
|
||||
"there should be no nocontent helper");
|
||||
assert.strictEqual(kanban.$('.o_column_quick_create').length, 1,
|
||||
"there should be a column quick create");
|
||||
kanban.destroy();
|
||||
});
|
||||
|
||||
QUnit.test('nocontent helper for grouped kanban with no records with no group_create', function (assert) {
|
||||
assert.expect(4);
|
||||
|
||||
this.data.partner.records = [];
|
||||
|
||||
var kanban = createView({
|
||||
View: KanbanView,
|
||||
model: 'partner',
|
||||
data: this.data,
|
||||
arch: '<kanban group_create="false">' +
|
||||
'<templates><t t-name="kanban-box">' +
|
||||
'<div><field name="foo"/></div>' +
|
||||
'</t></templates>' +
|
||||
'</kanban>',
|
||||
groupBy: ['product_id'],
|
||||
viewOptions: {
|
||||
action: {
|
||||
help: "No content helper",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
assert.strictEqual(kanban.$('.o_kanban_group').length, 0,
|
||||
"there should be no columns");
|
||||
assert.strictEqual(kanban.$('.o_kanban_record').length, 0,
|
||||
"there should be no records");
|
||||
assert.strictEqual(kanban.$('.oe_view_nocontent').length, 1,
|
||||
"there should be a nocontent helper");
|
||||
assert.strictEqual(kanban.$('.o_column_quick_create').length, 0,
|
||||
"there should not be a column quick create");
|
||||
kanban.destroy();
|
||||
});
|
||||
|
||||
QUnit.test('buttons with modifiers', function (assert) {
|
||||
assert.expect(2);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user