diff --git a/addons/web/static/src/js/views/abstract_view.js b/addons/web/static/src/js/views/abstract_view.js
index 7ce12926fba..5756e6cd301 100644
--- a/addons/web/static/src/js/views/abstract_view.js
+++ b/addons/web/static/src/js/views/abstract_view.js
@@ -280,3 +280,35 @@ var AbstractView = Class.extend({
return AbstractView;
});
+
+odoo.define('web.viewUtils', function () {
+"use strict";
+
+/**
+ * FIXME: move this module to its own file in master
+ */
+
+var utils = {
+ /**
+ * States whether or not the quick create feature is available for the given
+ * datapoint, depending on its groupBy field.
+ *
+ * @param {Object} list dataPoint of type list
+ * @returns {Boolean} true iff the kanban quick create feature is available
+ */
+ isQuickCreateEnabled: function (list) {
+ var groupByField = list.groupedBy[0] && list.groupedBy[0].split(':')[0];
+ if (!groupByField) {
+ return false;
+ }
+ var availableTypes = ['char', 'boolean', 'many2one'];
+ if (!_.contains(availableTypes, list.fields[groupByField].type)) {
+ return false;
+ }
+ return true;
+ },
+};
+
+return utils;
+
+});
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 7d3da850a7e..7552d252a79 100644
--- a/addons/web/static/src/js/views/kanban/kanban_controller.js
+++ b/addons/web/static/src/js/views/kanban/kanban_controller.js
@@ -12,6 +12,7 @@ var Context = require('web.Context');
var core = require('web.core');
var Domain = require('web.Domain');
var view_dialogs = require('web.view_dialogs');
+var viewUtils = require('web.viewUtils');
var _t = core._t;
var qweb = core.qweb;
@@ -35,6 +36,8 @@ var KanbanController = BasicController.extend({
/**
* @override
* @param {Object} params
+ * @param {boolean} params.quickCreateEnabled set to false to disable the
+ * quick create feature
*/
init: function (parent, model, renderer, params) {
this._super.apply(this, arguments);
@@ -43,6 +46,7 @@ var KanbanController = BasicController.extend({
this.hasButtons = params.hasButtons;
this.createColumnEnabled = this._isCreateColumnEnabled();
+ this.quickCreateEnabled = params.quickCreateEnabled;
},
//--------------------------------------------------------------------------
@@ -303,8 +307,8 @@ var KanbanController = BasicController.extend({
*/
_onButtonNew: function () {
var state = this.model.get(this.handle, {raw: true});
- var hasColumns = state.groupedBy.length > 0 && state.data.length > 0;
- if (hasColumns && this.on_create === 'quick_create') {
+ var quickCreateEnabled = this.quickCreateEnabled && viewUtils.isQuickCreateEnabled(state);
+ if (this.on_create === 'quick_create' && quickCreateEnabled) {
// 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/src/js/views/kanban/kanban_renderer.js b/addons/web/static/src/js/views/kanban/kanban_renderer.js
index e4e37095afa..2947345a2f7 100644
--- a/addons/web/static/src/js/views/kanban/kanban_renderer.js
+++ b/addons/web/static/src/js/views/kanban/kanban_renderer.js
@@ -9,6 +9,7 @@ var quick_create = require('web.kanban_quick_create');
var QWeb = require('web.QWeb');
var session = require('web.session');
var utils = require('web.utils');
+var viewUtils = require('web.viewUtils');
var ColumnQuickCreate = quick_create.ColumnQuickCreate;
@@ -89,6 +90,9 @@ var KanbanRenderer = BasicRenderer.extend({
/**
* @override
+ * @param {Object} params
+ * @param {boolean} params.quickCreateEnabled set to false to disable the
+ * quick create feature
*/
init: function (parent, state, params) {
this._super.apply(this, arguments);
@@ -107,6 +111,7 @@ var KanbanRenderer = BasicRenderer.extend({
if (this.columnOptions.hasProgressBar) {
this.columnOptions.progressBarStates = {};
}
+ this.quickCreateEnabled = params.quickCreateEnabled;
this._setState(state);
},
@@ -359,6 +364,7 @@ var KanbanRenderer = BasicRenderer.extend({
draggable: draggable,
group_by_tooltip: groupByTooltip,
grouped_by_m2o: this.groupedByM2O,
+ quick_create: this.quickCreateEnabled && viewUtils.isQuickCreateEnabled(state),
relation: grouped_by_field,
});
this.createColumnEnabled = this.groupedByM2O && this.columnOptions.group_creatable;
diff --git a/addons/web/static/src/js/views/kanban/kanban_view.js b/addons/web/static/src/js/views/kanban/kanban_view.js
index 730b761b870..dc03d2d6179 100644
--- a/addons/web/static/src/js/views/kanban/kanban_view.js
+++ b/addons/web/static/src/js/views/kanban/kanban_view.js
@@ -63,7 +63,6 @@ var KanbanView = BasicView.extend({
editable: activeActions.group_edit,
deletable: activeActions.group_delete,
group_creatable: activeActions.group_create && !config.device.isMobile,
- quick_create: params.isQuickCreateEnabled || this._isQuickCreateEnabled(viewInfo),
hasProgressBar: !!progressBar,
};
this.rendererParams.record_options = {
@@ -71,11 +70,12 @@ var KanbanView = BasicView.extend({
deletable: activeActions.delete,
read_only_mode: params.readOnlyMode,
};
+ this.rendererParams.quickCreateEnabled = this._isQuickCreateEnabled(viewInfo);
this.controllerParams.on_create = arch.attrs.on_create;
-
this.controllerParams.readOnlyMode = false;
this.controllerParams.hasButtons = true;
+ this.controllerParams.quickCreateEnabled = this.rendererParams.quickCreateEnabled;
if (config.device.isMobile) {
this.jsLibs.push('/web/static/lib/jquery.touchSwipe/jquery.touchSwipe.js');
@@ -89,13 +89,10 @@ var KanbanView = BasicView.extend({
/**
* @private
* @param {Object} viewInfo
+ * @returns {boolean} true iff the quick create feature is not explicitely
+ * disabled (with create="False" or quick_create="False" in the arch)
*/
_isQuickCreateEnabled: function (viewInfo) {
- var groupBy = this.loadParams.groupBy[0];
- groupBy = groupBy !== undefined ? groupBy.split(':')[0] : undefined;
- if (groupBy !== undefined && !_.contains(['char', 'boolean', 'many2one'], viewInfo.fields[groupBy].type)) {
- return false;
- }
if (!this.controllerParams.activeActions.create) {
return false;
}
diff --git a/addons/web/static/tests/views/kanban_tests.js b/addons/web/static/tests/views/kanban_tests.js
index 73404ec4a15..fd1b5ab312f 100644
--- a/addons/web/static/tests/views/kanban_tests.js
+++ b/addons/web/static/tests/views/kanban_tests.js
@@ -769,6 +769,81 @@ QUnit.module('Views', {
kanban.destroy();
});
+ QUnit.test('quick create record in grouped on date(time) field', function (assert) {
+ assert.expect(6);
+
+ var kanban = createView({
+ View: KanbanView,
+ model: 'partner',
+ data: this.data,
+ arch: '