diff options
| author | Jigar Patel <jat@openerp.com> | 2018-07-17 18:49:05 +0530 |
|---|---|---|
| committer | xmo-odoo <xmo@odoo.com> | 2018-07-17 15:19:05 +0200 |
| commit | b60de0db41bbe4af3c2f6e2369eda5d483702d76 (patch) | |
| tree | 5b41a3654948efb6f758d63f7676f3a040d2d7d2 /addons/web/static/src/js/widgets/data_export.js | |
| parent | 57676dc7d10b50bee44d122d48863586b18e4593 (diff) | |
[IMP] import/export UIs
Task 40692
Various changes to import/export (mainly) UIs:
* default to excel & "full" (non-import-compatible) export
* auto-detect encoding of CSV using chardet
* remember column -> field mapping after having imported a file (useful
for repeated imports where auto-matching failed)
* better handle localised booleans & column names
* automatically select source list view's fields when exporting
* better integrate import templates feature and add a number of templates
Diffstat (limited to 'addons/web/static/src/js/widgets/data_export.js')
| -rw-r--r-- | addons/web/static/src/js/widgets/data_export.js | 65 |
1 files changed, 45 insertions, 20 deletions
diff --git a/addons/web/static/src/js/widgets/data_export.js b/addons/web/static/src/js/widgets/data_export.js index 8a09f7fa034..30e17604077 100644 --- a/addons/web/static/src/js/widgets/data_export.js +++ b/addons/web/static/src/js/widgets/data_export.js @@ -14,7 +14,7 @@ var _t = core._t; var DataExport = Dialog.extend({ template: 'ExportDialog', events: { - 'click .o_expand_parent': function(e) { + 'click .o_expand': function(e) { this.on_expand_action(this.records[$(e.target).closest('.o_export_tree_item').data('id')]); }, 'click .o_export_tree_item': function(e) { @@ -56,10 +56,19 @@ var DataExport = Dialog.extend({ } } }, - 'dblclick .o_export_tree_item': function(e) { - var $elem = $(e.currentTarget); - $elem.removeClass('o_selected'); - this.add_field($elem.data('id'), $elem.find('.o_tree_column').first().text()); + 'dblclick .o_export_tree_item:not(.haschild)': function(e) { + var self = this; + function addElement(el) { + self.add_field(el.getAttribute('data-id'), el.querySelector('.o_tree_column').textContent); + } + var target = e.currentTarget; + target.classList.remove('o_selected'); + // Add parent fields to export + [].reverse.call($(target).parents('.o_export_tree_item')).each(function () { + addElement(this); + }); + // add field itself + addElement(target); }, 'keydown .o_export_tree_item': function(e) { e.stopPropagation(); @@ -195,7 +204,7 @@ var DataExport = Dialog.extend({ }); }, }, - init: function(parent, record) { + init: function(parent, record, defaultExportFields) { var options = { title: _t("Export Data"), buttons: [ @@ -206,6 +215,7 @@ var DataExport = Dialog.extend({ this._super(parent, options); this.records = {}; this.record = record; + this.defaultExportFields = defaultExportFields; this.exports = new data.DataSetSearch(this, 'ir.exports', this.record.getContext()); this.row_index = 0; @@ -228,13 +238,14 @@ var DataExport = Dialog.extend({ var got_fields = new $.Deferred(); this.$import_compat_radios.change(function(e) { + self.isCompatibleMode = !!$(e.target).val(); self.$('.o_field_tree_structure').remove(); self._rpc({ route: '/web/export/get_fields', params: { model: self.record.model, - import_compat: !!$(e.target).val(), + import_compat: self.isCompatibleMode, }, }) .done(function (records) { @@ -250,6 +261,15 @@ var DataExport = Dialog.extend({ .remove(); got_fields.resolve(); self.on_show_data(records); + // In compatible mode add ID field as first field to export + if (self.isCompatibleMode) { + self.$('.o_fields_list').prepend(new Option(_('External ID'), 'id')); + } + _.each(records, function (record) { + if (_.contains(self.defaultExportFields, record.id)) { + self.add_field(record.id, record.string); + } + }); }); }).eq(0).change(); waitFor.push(got_fields); @@ -262,10 +282,15 @@ var DataExport = Dialog.extend({ self.ids_to_export = false; self.domain = domain; } - self.on_show_domain(); })); - waitFor.push(this.show_exports_list()); + waitFor.push(this.show_exports_list().then(function () { + _.each(self.records, function (record, key) { + if (_.contains(self.defaultExportFields, key)) { + self.add_field(key, record.string); + } + }); + })); return $.when.apply($, waitFor); @@ -274,14 +299,15 @@ var DataExport = Dialog.extend({ _.each(formats, function(format, i) { var $radio = $('<input/>', {type: 'radio', value: format.tag, name: 'o_export_format_name'}); - var $label = $('<label/>', {html: format.label}); + var $label = $('<span/>', {html: format.label}); if (format.error) { $radio.prop('disabled', true); $label.html(_.str.sprintf("%s — %s", format.label, format.error)); } - $fmts.append($("<div/>").append($radio, $label)); + var $radioButton = $('<label/>').append($radio, $label); + $fmts.append($("<div class='radio'></div>").append($radioButton)); }); self.$export_format_inputs = $fmts.find('input'); @@ -366,7 +392,8 @@ var DataExport = Dialog.extend({ parent_name: name, import_compat: !!this.$import_compat_radios.filter(':checked').val(), parent_field_type : record['field_type'], - exclude: exclude_fields + parent_field: record['params']['parent_field'], + exclude: exclude_fields, }, }) .done(function(results) { @@ -377,17 +404,13 @@ var DataExport = Dialog.extend({ this.show_content(record.id); } }, - on_show_domain: function() { - this.$('p').first() - .after(QWeb.render('Export.DomainMessage', {record: this})); - }, on_show_data: function(records, expansion) { var self = this; if(expansion) { this.$('.o_export_tree_item[data-id="' + expansion + '"]') .addClass('open') .find('.o_expand_parent') - .toggleClass('fa-plus fa-minus') + .toggleClass('fa-chevron-right fa-chevron-down') .next() .after(QWeb.render('Export.TreeItems', {'fields': records, 'debug': this.getSession().debug})); } else { @@ -409,7 +432,7 @@ var DataExport = Dialog.extend({ $this.toggleClass('open'); var is_open = $this.hasClass('open'); - $this.children('.o_expand_parent').toggleClass('fa-minus', !!is_open).toggleClass('fa-plus', !is_open); + $this.children('.o_expand_parent').toggleClass('fa-chevron-down', !!is_open).toggleClass('fa-chevron-right', !is_open); var $child_field = $this.find('.o_export_tree_item'); var child_len = (id.split("/")).length + 1; @@ -420,7 +443,7 @@ var DataExport = Dialog.extend({ } else if(child_len === $child_field.eq(i).data('id').split("/").length) { if ($child.hasClass('open')) { $child.removeClass('open'); - $child.children('.o_expand_parent').removeClass('fa-minus').addClass('fa-plus'); + $child.children('.o_expand_parent').removeClass('fa-chevron-down').addClass('fa-chevron-right'); } $child.show(); } @@ -455,7 +478,9 @@ var DataExport = Dialog.extend({ Dialog.alert(this, _t("Please select fields to export...")); return; } - exported_fields.unshift({name: 'id', label: _t('External ID')}); + if (!this.isCompatibleMode) { + exported_fields.unshift({name: 'id', label: _t('External ID')}); + } var export_format = this.$export_format_inputs.filter(':checked').val(); |
