diff options
| author | Mohammed Shekha <msh-odoo@users.noreply.github.com> | 2018-08-16 14:40:35 +0530 |
|---|---|---|
| committer | xmo-odoo <xmo@odoo.com> | 2018-08-16 11:10:35 +0200 |
| commit | 8fbadb9575c25e20f08637c837b386fde213203c (patch) | |
| tree | 568cdc943c24a2bcee46812580de4b636d3a1899 /addons/base_import/static/src | |
| parent | b3824aa6cbecc97fc0cd54773417045e69adc87a (diff) | |
[ADD] base_import: debug option to create M2O/M2M records
Adds a checkbox to import columns (in debug mode) allowing a user to
create records M2O and M2M records not found (via name_search).
Task ID: 1850633
* uses a context key to avoid altering basically all the import callstack
* attempted to lift the creation in the `_str_to_*` functions and create
m2m via commands, but that doesn't really work out
Diffstat (limited to 'addons/base_import/static/src')
| -rw-r--r-- | addons/base_import/static/src/js/import_action.js | 37 | ||||
| -rw-r--r-- | addons/base_import/static/src/scss/base_import.scss | 1 | ||||
| -rw-r--r-- | addons/base_import/static/src/xml/base_import.xml | 9 |
3 files changed, 44 insertions, 3 deletions
diff --git a/addons/base_import/static/src/js/import_action.js b/addons/base_import/static/src/js/import_action.js index e2eff44c174..8349603fc9f 100644 --- a/addons/base_import/static/src/js/import_action.js +++ b/addons/base_import/static/src/js/import_action.js @@ -280,7 +280,8 @@ var DataImport = AbstractAction.extend(ControlPanelMixin, { var options = { headers: this.$('input.oe_import_has_header').prop('checked'), advanced: this.$('input.oe_import_advanced_mode').prop('checked'), - keep_matches: this.do_not_change_match + keep_matches: this.do_not_change_match, + name_create_enabled_fields: {}, }; _(this.opts).each(function (opt) { options[opt.name] = @@ -301,6 +302,12 @@ var DataImport = AbstractAction.extend(ControlPanelMixin, { }).get(); } this.do_not_change_match = false; + this.$('input.o_import_create_option').each(function () { + var field = this.getAttribute('field'); + if (field) { + options.name_create_enabled_fields[field] = this.checked; + } + }); return options; }, @@ -402,6 +409,24 @@ var DataImport = AbstractAction.extend(ControlPanelMixin, { }; $fields.each(function (k,v) { var filtered_data = self.generate_fields_completion(result, k); + + var $thing = $(); + var bind = function (d) {}; + if (session.debug) { + $thing = $(QWeb.render('ImportView.create_record_option')).insertAfter(v).hide(); + bind = function (data) { + switch (data.type) { + case 'many2one': case 'many2many': + $thing.find('input').attr('field', data.id); + $thing.show(); + break; + default: + $thing.find('input').attr('field', '').prop('checked', false); + $thing.hide(); + } + } + } + $(v).select2({ allowClear: true, minimumInputLength: 0, @@ -413,11 +438,15 @@ var DataImport = AbstractAction.extend(ControlPanelMixin, { return; } - callback(item_finder(default_value)); + var data = item_finder(default_value); + bind(data); + callback(data); }, placeholder: _t('Don\'t import'), width: 'resolve', dropdownCssClass: 'oe_import_selector' + }).on('change', function (e) { + bind(item_finder(e.currentTarget.value)); }); }); }, @@ -448,7 +477,8 @@ var DataImport = AbstractAction.extend(ControlPanelMixin, { collection.push({ id: id, text: label, - required: field.required + required: field.required, + type: field.type }); } @@ -521,6 +551,7 @@ var DataImport = AbstractAction.extend(ControlPanelMixin, { var columns = this.$('.oe_import_grid-header .oe_import_grid-cell .o_import_header_name').map(function () { return $(this).text().trim().toLowerCase() || false; }).get(); + var tracking_disable = 'tracking_disable' in kwargs ? kwargs.tracking_disable : !this.$('#oe_import_tracking').prop('checked') var defer_parent_store = 'defer_parent_store' in kwargs ? kwargs.defer_parent_store : !!this.$('#oe_import_deferparentstore').prop('checked') delete kwargs.tracking_disable; diff --git a/addons/base_import/static/src/scss/base_import.scss b/addons/base_import/static/src/scss/base_import.scss index f3686e7b448..d32cffdfb32 100644 --- a/addons/base_import/static/src/scss/base_import.scss +++ b/addons/base_import/static/src/scss/base_import.scss @@ -106,6 +106,7 @@ } td { padding: 4px; + vertical-align: top; } } } diff --git a/addons/base_import/static/src/xml/base_import.xml b/addons/base_import/static/src/xml/base_import.xml index fb29ac0c9ea..3b8d8136da9 100644 --- a/addons/base_import/static/src/xml/base_import.xml +++ b/addons/base_import/static/src/xml/base_import.xml @@ -100,6 +100,15 @@ <button type="button" class="btn btn-secondary o_import_cancel">Cancel</button> </t> + <t t-name="ImportView.create_record_option"> + <div class="mt4"> + <label title="Creates new records if they can't be found (instead of failing to import). Note that the value in the column will be used as the new record's 'name', and assumes this is sufficient to create the record."> + <input type="checkbox"/> + Create if doesn't exist + </label> + </div> + </t> + <t t-name="ImportView.preview"> <thead> <tr t-if="headers" class="oe_import_grid-header"> |
