odoo.define('web.DataExport', function (require) { "use strict"; var config = require('web.config'); var core = require('web.core'); var Dialog = require('web.Dialog'); var data = require('web.data'); var framework = require('web.framework'); var pyUtils = require('web.py_utils'); var QWeb = core.qweb; var _t = core._t; var DataExport = Dialog.extend({ template: 'ExportDialog', events: { 'change .o_exported_lists_select': '_onChangeExportList', 'change .o_import_compat input': '_onChangeCompatibleInput', 'click .o_add_field': '_onClickAddField', 'click .o_delete_exported_list': '_onClickDeleteExportListBtn', 'click .o_expand': '_onClickExpand', 'click .o_remove_field': '_onClickRemoveField', 'click .o_save_list .o_save_list_btn': '_onClickSaveListBtn', 'click .o_save_list .o_cancel_list_btn': '_resetTemplateField', 'click .o_export_tree_item': '_onClickTreeItem', 'dblclick .o_export_tree_item:not(.haschild)': '_onDblclickTreeItem', 'keydown .o_export_tree_item': '_onKeydownTreeItem', 'keydown .o_save_list_name': '_onKeydownSaveList', 'input .o_export_search_input': '_onSearchInput', }, /** * @constructor * @param {Widget} parent * @param {Object} record * @param {string[]} defaultExportFields */ init: function (parent, record, defaultExportFields, groupedBy, activeDomain, idsToExport) { var options = { title: _t("Export Data"), buttons: [ {text: _t("Export"), click: this._onExportData, classes: 'btn-primary'}, {text: _t("Close"), close: true}, ], }; this._super(parent, options); this.records = {}; this.record = record; this.defaultExportFields = defaultExportFields; this.groupby = groupedBy; this.exports = new data.DataSetSearch(this, 'ir.exports', this.record.getContext()); this.rowIndex = 0; this.rowIndexLevel = 0; this.isCompatibleMode = false; this.domain = activeDomain || this.record.domain; this.idsToExport = activeDomain ? false: idsToExport; }, /** * @override */ start: function () { var self = this; var proms = [this._super.apply(this, arguments)]; // The default for the ".modal_content" element is "max-height: 100%;" // but we want it to always expand to "height: 100%;" for this modal. // This can be achieved thanks to CSS modification without touching // the ".modal-content" rules... but not with Internet explorer (11). this.$modal.find('.modal-content').css('height', '100%'); this.$fieldsList = this.$('.o_fields_list'); proms.push(this._rpc({route: '/web/export/formats'}).then(doSetupExportFormats)); proms.push(this._onChangeCompatibleInput().then(function () { _.each(self.defaultExportFields, function (field) { var record = self.records[field]; self._addField(record.id, record.string); }); })); proms.push(this._showExportsList()); // Bind sortable events after Dialog is open this.opened().then(function () { self.$('.o_fields_list').sortable({ axis: 'y', handle: '.o_short_field', forcePlaceholderSize: true, placeholder: 'o-field-placeholder', update: self.proxy('_resetTemplateField'), }); }); return Promise.all(proms); function doSetupExportFormats(formats) { var $fmts = self.$('.o_export_format'); _.each(formats, function (format) { var $radio = $('', {type: 'radio', value: format.tag, name: 'o_export_format_name', class: 'form-check-input', id: 'o_radio' + format.label}); var $label = $('