[IMP] base_import: Improve import preview for related fields
normal mode: Importing only regular/basic fields from source file advanced mode: Importing any related fields from source file(i.e. if detected pattern in header like '<relational_fieldname>/<fname>') - Rename following checkbox "Show all fields for completion (advanced)" in "Show fields of relation fields (advanced)" - If the import file contains a column with a field of a relation field, show the column label in the preview, even if "Show fields of relation fields (advanced)" is not checked > to make it less confusing when importing advanced files (e.g. products with attributes)
This commit is contained in:
committed by
Yannick Tivisse
parent
a07012fbc2
commit
1ba4fbe640
@@ -500,6 +500,7 @@ class Import(models.TransientModel):
|
|||||||
'headers_type': header_types or False,
|
'headers_type': header_types or False,
|
||||||
'preview': preview,
|
'preview': preview,
|
||||||
'options': options,
|
'options': options,
|
||||||
|
'advanced_mode': any([len(models.fix_import_export_id_paths(col)) > 1 for col in headers]),
|
||||||
'debug': self.user_has_groups('base.group_no_one'),
|
'debug': self.user_has_groups('base.group_no_one'),
|
||||||
}
|
}
|
||||||
except Exception, error:
|
except Exception, error:
|
||||||
|
|||||||
@@ -366,6 +366,7 @@ var DataImport = Widget.extend(ControlPanelMixin, {
|
|||||||
this.$buttons.filter('.o_import_button').add(this.$('.oe_import_file_reload'))
|
this.$buttons.filter('.o_import_button').add(this.$('.oe_import_file_reload'))
|
||||||
.prop('disabled', false);
|
.prop('disabled', false);
|
||||||
this.$el.addClass('oe_import_preview');
|
this.$el.addClass('oe_import_preview');
|
||||||
|
this.$('input.oe_import_advanced_mode').prop('checked', result.advanced_mode);
|
||||||
this.$('.oe_import_grid').html(QWeb.render('ImportView.preview', result));
|
this.$('.oe_import_grid').html(QWeb.render('ImportView.preview', result));
|
||||||
|
|
||||||
if (result.headers.length === 1) {
|
if (result.headers.length === 1) {
|
||||||
|
|||||||
@@ -67,9 +67,9 @@
|
|||||||
id="oe_import_has_header" checked="checked"/>
|
id="oe_import_has_header" checked="checked"/>
|
||||||
<label for="oe_import_has_header">The first row
|
<label for="oe_import_has_header">The first row
|
||||||
contains the label of the column</label>
|
contains the label of the column</label>
|
||||||
<input type="checkbox" class="oe_import_advanced_mode"
|
<input type="checkbox" class="oe_import_advanced_mode" disabled="disabled"
|
||||||
id="oe_import_advanced_mode"/>
|
id="oe_import_advanced_mode"/>
|
||||||
<label for="oe_import_advanced_mode">Show all fields for completion (advanced)</label>
|
<label for="oe_import_advanced_mode">Show fields of relation fields (advanced)</label>
|
||||||
<p class="oe_import_noheaders">If the file contains
|
<p class="oe_import_noheaders">If the file contains
|
||||||
the column names, Odoo can try auto-detecting the
|
the column names, Odoo can try auto-detecting the
|
||||||
field corresponding to the column. This makes imports
|
field corresponding to the column. This makes imports
|
||||||
|
|||||||
@@ -260,7 +260,7 @@ class TestPreview(TransactionCase):
|
|||||||
['qux', '5', '6'],
|
['qux', '5', '6'],
|
||||||
])
|
])
|
||||||
# Ensure we only have the response fields we expect
|
# Ensure we only have the response fields we expect
|
||||||
self.assertItemsEqual(result.keys(), ['matches', 'headers', 'fields', 'preview', 'headers_type', 'options', 'debug'])
|
self.assertItemsEqual(result.keys(), ['matches', 'headers', 'fields', 'preview', 'headers_type', 'options', 'advanced_mode', 'debug'])
|
||||||
|
|
||||||
@unittest.skipUnless(can_import('xlrd'), "XLRD module not available")
|
@unittest.skipUnless(can_import('xlrd'), "XLRD module not available")
|
||||||
def test_xls_success(self):
|
def test_xls_success(self):
|
||||||
@@ -290,7 +290,7 @@ class TestPreview(TransactionCase):
|
|||||||
['qux', '5', '6'],
|
['qux', '5', '6'],
|
||||||
])
|
])
|
||||||
# Ensure we only have the response fields we expect
|
# Ensure we only have the response fields we expect
|
||||||
self.assertItemsEqual(result.keys(), ['matches', 'headers', 'fields', 'preview', 'headers_type', 'options', 'debug'])
|
self.assertItemsEqual(result.keys(), ['matches', 'headers', 'fields', 'preview', 'headers_type', 'options', 'advanced_mode', 'debug'])
|
||||||
|
|
||||||
@unittest.skipUnless(can_import('xlrd.xlsx'), "XLRD/XLSX not available")
|
@unittest.skipUnless(can_import('xlrd.xlsx'), "XLRD/XLSX not available")
|
||||||
def test_xlsx_success(self):
|
def test_xlsx_success(self):
|
||||||
@@ -320,7 +320,7 @@ class TestPreview(TransactionCase):
|
|||||||
['qux', '5', '6'],
|
['qux', '5', '6'],
|
||||||
])
|
])
|
||||||
# Ensure we only have the response fields we expect
|
# Ensure we only have the response fields we expect
|
||||||
self.assertItemsEqual(result.keys(), ['matches', 'headers', 'fields', 'preview', 'headers_type', 'options', 'debug'])
|
self.assertItemsEqual(result.keys(), ['matches', 'headers', 'fields', 'preview', 'headers_type', 'options','advanced_mode', 'debug'])
|
||||||
|
|
||||||
@unittest.skipUnless(can_import('odf'), "ODFPY not available")
|
@unittest.skipUnless(can_import('odf'), "ODFPY not available")
|
||||||
def test_ods_success(self):
|
def test_ods_success(self):
|
||||||
@@ -350,7 +350,7 @@ class TestPreview(TransactionCase):
|
|||||||
['aux', '5', '6'],
|
['aux', '5', '6'],
|
||||||
])
|
])
|
||||||
# Ensure we only have the response fields we expect
|
# Ensure we only have the response fields we expect
|
||||||
self.assertItemsEqual(result.keys(), ['matches', 'headers', 'fields', 'preview', 'headers_type', 'options', 'debug'])
|
self.assertItemsEqual(result.keys(), ['matches', 'headers', 'fields', 'preview', 'headers_type', 'options', 'advanced_mode', 'debug'])
|
||||||
|
|
||||||
|
|
||||||
class test_convert_import_data(TransactionCase):
|
class test_convert_import_data(TransactionCase):
|
||||||
|
|||||||
Reference in New Issue
Block a user