odoo.define('web.DataExport', function (require) { "use strict"; var config = require('web.config'); var core = require('web.core'); var crash_manager = require('web.crash_manager'); 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_move_down': '_onClickMovedown', 'click .o_move_up': '_onClickMoveup', 'click .o_remove_all_field': '_onClickRemoveAllFields', 'click .o_remove_field': '_onClickRemoveField', 'click .o_toggle_save_list': '_onClickSaveList', 'click .o_save_list > button': '_onClickSaveListBtn', 'click .o_export_tree_item': '_onClickTreeItem', 'dblclick .o_export_tree_item:not(.haschild)': '_onDblclickTreeItem', 'keydown .o_export_tree_item': '_onKeydownTreeItem' }, /** * @constructor * @param {Widget} parent * @param {Object} record * @param {string[]} defaultExportFields */ init: function (parent, record, defaultExportFields) { var options = { title: _t("Export Data"), buttons: [ {text: _t("Export To File"), click: this._exportData, classes: 'btn-primary'}, {text: _t("Close"), close: true}, ], }; this._super(parent, options); this.records = {}; this.record = record; this.defaultExportFields = defaultExportFields; this.exports = new data.DataSetSearch(this, 'ir.exports', this.record.getContext()); this.rowIndex = 0; this.rowIndexLevel = 0; }, /** * @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'); this.$importCompatRadios = this.$('.o_import_compat input'); proms.push(this._rpc({route: '/web/export/formats'}).then(doSetupExportFormats)); proms.push(this._onChangeCompatibleInput()); proms.push(this.getParent().getActiveDomain().then(function (domain) { if (domain === undefined) { self.idsToExport = self.getParent().getSelectedIds(); self.domain = self.record.domain; } else { self.idsToExport = false; self.domain = domain; } })); proms.push(this._showExportsList().then(function () { _.each(self.records, function (record, key) { if (_.contains(self.defaultExportFields, key)) { self._addField(key, record.string); } }); })); 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'}); var $label = $('', {html: format.label}); if (format.error) { $radio.prop('disabled', true); $label.html(_.str.sprintf("%s — %s", format.label, format.error)); } var $radioButton = $('