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.
116 lines
4.5 KiB
116 lines
4.5 KiB
// @@@ web_export_view custom JS @@@
|
|
//#############################################################################
|
|
//
|
|
// Copyright (C) 2012 Agile Business Group sagl (<http://www.agilebg.com>)
|
|
// Copyright (C) 2012 Therp BV (<http://therp.nl>)
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU Affero General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
//
|
|
//#############################################################################
|
|
|
|
openerp.web_export_view = function(openerp) {
|
|
|
|
_t = openerp.web._t;
|
|
|
|
openerp.web.Sidebar = openerp.web.Sidebar.extend({
|
|
|
|
add_default_sections: function() {
|
|
// IMHO sections should be registered objects
|
|
// as views and retrieved using a specific registry
|
|
// so that we don't have to override this
|
|
|
|
var self = this,
|
|
view = this.widget_parent,
|
|
view_manager = view.widget_parent,
|
|
action = view_manager.action;
|
|
if (this.session.uid === 1) {
|
|
this.add_section(_t('Customize'), 'customize');
|
|
this.add_items('customize', [{
|
|
label: _t("Translate"),
|
|
callback: view.on_sidebar_translate,
|
|
title: _t("Technical translation")
|
|
}]);
|
|
}
|
|
|
|
this.add_section(_t('Other Options'), 'other');
|
|
this.add_items('other', [
|
|
{
|
|
label: _t("Export"),
|
|
callback: view.on_sidebar_export
|
|
},
|
|
{
|
|
label: _t("Export current view"),
|
|
callback: this.on_sidebar_export_view
|
|
}
|
|
]);
|
|
},
|
|
|
|
on_sidebar_export_view: function() {
|
|
// Select the first list of the current (form) view
|
|
// or assume the main view is a list view and use that
|
|
var self = this,
|
|
view = this.widget_parent; // valid for list view
|
|
if (view.widget_children) {
|
|
view.widget_children.every(function(child) {
|
|
if (child.field && child.field.type == 'one2many') {
|
|
view = child.viewmanager.views.list.controller;
|
|
return false; // break out of the loop
|
|
}
|
|
if (child.field && child.field.type == 'many2many') {
|
|
view = child.list_view;
|
|
return false; // break out of the loop
|
|
}
|
|
return true;
|
|
});
|
|
}
|
|
var columns = view.visible_columns;
|
|
export_columns_keys = [];
|
|
export_columns_names = [];
|
|
$.each(columns,function(){
|
|
if(this.tag=='field'){
|
|
// non-fields like `_group` or buttons
|
|
export_columns_keys.push(this.id);
|
|
export_columns_names.push(this.string);
|
|
}
|
|
});
|
|
rows = view.$element.find('.ui-widget-content tr');
|
|
export_rows = [];
|
|
$.each(rows,function(){
|
|
$row = $(this);
|
|
// find only rows with data
|
|
if($row.attr('data-id')){
|
|
export_row = [];
|
|
$.each(export_columns_keys,function(){
|
|
cell = $row.find('td[data-field="'+this+'"]').get(0);
|
|
text = cell.text || cell.textContent || cell.innerHTML || "";
|
|
export_row.push(text.trim());
|
|
});
|
|
export_rows.push(export_row);
|
|
}
|
|
});
|
|
$.blockUI();
|
|
view.session.get_file({
|
|
url: '/web/export/xls_view',
|
|
data: {data: JSON.stringify({
|
|
model : view.model,
|
|
headers : export_columns_names,
|
|
rows : export_rows,
|
|
})},
|
|
complete: $.unblockUI
|
|
});
|
|
},
|
|
|
|
});
|
|
|
|
}
|