You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

133 lines
4.9 KiB

/**********************************************************************************
*
* Copyright (c) 2017-2019 MuK IT GmbH.
*
* This file is part of MuK Search Panel
* (see https://mukit.at).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
**********************************************************************************/
odoo.define('muk_web_searchpanel.KanbanView', function (require) {
"use strict";
var core = require('web.core');
var config = require('web.config');
var pyUtils = require('web.py_utils');
var utils = require('web.utils');
var KanbanView = require('web.KanbanView');
var SearchPanel = require('web.SearchPanel');
var _t = core._t;
var QWeb = core.qweb;
KanbanView.include({
config: _.extend({}, KanbanView.prototype.config, {
SearchPanel: SearchPanel,
}),
init: function (viewInfo, params) {
this.searchPanelSections = Object.create(null);
this._super.apply(this, arguments);
this.hasSearchPanel = !_.isEmpty(this.searchPanelSections);
},
getController: function (parent) {
var self = this;
var def = undefined;
if (this.hasSearchPanel) {
def = this._createSearchPanel(parent);
}
var _super = this._super.bind(this);
return $.when(def).then(function (searchPanel) {
return _super(parent).done(function (controller) {
if (self.hasSearchPanel) {
self.controllerParams.searchPanel.setParent(controller);
}
return controller
});
});
},
_createSearchPanel: function (parent) {
var self = this;
var defaultCategoryValues = {};
Object.keys(this.loadParams.context).forEach(function (key) {
var match = /^searchpanel_default_(.*)$/.exec(key);
if (match) {
defaultCategoryValues[match[1]] = self.loadParams.context[key];
}
});
var controlPanelDomain = this.loadParams.domain;
var searchPanel = new this.config.SearchPanel(parent, {
defaultCategoryValues: defaultCategoryValues,
fields: this.fields,
model: this.loadParams.modelName,
searchDomain: controlPanelDomain,
sections: this.searchPanelSections,
});
this.controllerParams.searchPanel = searchPanel;
this.controllerParams.controlPanelDomain = controlPanelDomain;
return searchPanel.appendTo(document.createDocumentFragment()).then(function () {
var searchPanelDomain = searchPanel.getDomain();
self.loadParams.domain = controlPanelDomain.concat(searchPanelDomain);
});
},
_processNode: function (node, fv) {
if (node.tag === 'searchpanel') {
// if (!config.device.isMobile) {
// this._processSearchPanelNode(node, fv);
// }
this._processSearchPanelNode(node, fv);
return false;
}
return this._super.apply(this, arguments);
},
_processSearchPanelNode: function (node, fv) {
var self = this;
node.children.forEach(function (childNode, index) {
if (childNode.tag !== 'field') {
return;
}
if (childNode.attrs.invisible === "1") {
return;
}
var fieldName = childNode.attrs.name;
var type = childNode.attrs.select === 'multi' ? 'filter' : 'category';
var sectionId = _.uniqueId('section_');
var section = {
color: childNode.attrs.color,
description: childNode.attrs.string || fv.fields[fieldName].string,
fieldName: fieldName,
icon: childNode.attrs.icon,
id: sectionId,
index: index,
type: type,
};
if (section.type === 'category') {
section.icon = section.icon || 'fa-folder';
} else if (section.type === 'filter') {
section.disableCounters = !!pyUtils.py_eval(childNode.attrs.disable_counters || '0');
section.domain = childNode.attrs.domain || '[]';
section.groupBy = childNode.attrs.groupby;
section.icon = section.icon || 'fa-filter';
}
self.searchPanelSections[sectionId] = section;
});
},
});
});