summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/widgets/data_export.js
diff options
context:
space:
mode:
authorJigar Patel <jat@openerp.com>2018-07-17 18:49:05 +0530
committerxmo-odoo <xmo@odoo.com>2018-07-17 15:19:05 +0200
commitb60de0db41bbe4af3c2f6e2369eda5d483702d76 (patch)
tree5b41a3654948efb6f758d63f7676f3a040d2d7d2 /addons/web/static/src/js/widgets/data_export.js
parent57676dc7d10b50bee44d122d48863586b18e4593 (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.js65
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();