diff --git a/addons/base_import/models/base_import.py b/addons/base_import/models/base_import.py index a9cc382871e..d3c932e0358 100644 --- a/addons/base_import/models/base_import.py +++ b/addons/base_import/models/base_import.py @@ -918,6 +918,11 @@ class Import(models.TransientModel): 'column_name': column_name, 'field_name': fields[index] }) + if 'name' in import_fields: + index_of_name = import_fields.index('name') + import_result['name'] = [x[index_of_name] for x in data] + else: + import_result['name'] = [] return import_result diff --git a/addons/base_import/static/src/js/import_action.js b/addons/base_import/static/src/js/import_action.js index a4a4db8d690..53e3c42cfa1 100644 --- a/addons/base_import/static/src/js/import_action.js +++ b/addons/base_import/static/src/js/import_action.js @@ -104,6 +104,10 @@ var DataImport = AbstractAction.extend({ e.preventDefault(); $(e.target).parent().parent().toggleClass('oe_import_report_showmore'); }, + 'click .oe_import_report_see_possible_value': function (e) { + e.preventDefault(); + $(e.target).parent().toggleClass('oe_import_report_showmore'); + }, 'click .oe_import_moreinfo_action a': function (e) { e.preventDefault(); // #data will parse the attribute on its own, we don't like @@ -140,7 +144,6 @@ var DataImport = AbstractAction.extend({ this.session = session; this._title = _t('Import a File'); // Displayed in the breadcrumbs this.do_not_change_match = false; - this.preview = [[]]; }, /** * @override @@ -375,8 +378,6 @@ var DataImport = AbstractAction.extend({ this.$('input.oe_import_advanced_mode').prop('checked', result.advanced_mode); this.$('.oe_import_grid').html(QWeb.render('ImportView.preview', result)); - this.preview = result.preview; - if (result.headers.length === 1) { this.$('.oe_import_options').show(); this.onresults(null, null, null, {'messages': [{ @@ -457,6 +458,7 @@ var DataImport = AbstractAction.extend({ }); }, generate_fields_completion: function (root, index) { + var self = this; var basic = []; var regulars = []; var o2m = []; @@ -628,11 +630,9 @@ var DataImport = AbstractAction.extend({ this.trigger_up('history_back'); }, onresults: function (event, from, to, results) { - var self = this; var fields = this.$('.oe_import_fields input.oe_import_match_field').map(function (index, el) { return $(el).select2('val') || false; }).get(); - var nameIndex = _.indexOf(fields, 'name'); var message = results.messages; var no_messages = _.isEmpty(message); @@ -664,8 +664,8 @@ var DataImport = AbstractAction.extend({ var from = rows.from + offset; var to = rows.to + offset; var rowName = ''; - if (nameIndex !== -1) { - rowName = _.str.sprintf(' (%s)', self.preview[rows.from][nameIndex]); + if (results.name.length > rows.from && results.name[rows.from] !== '') { + rowName = _.str.sprintf(' (%s)', results.name[rows.from]); } if (from === to) { return _.str.sprintf(_t("at row %d%s"), from, rowName); @@ -677,8 +677,8 @@ var DataImport = AbstractAction.extend({ var from = rows.from + offset; var to = rows.to + offset; var rowName = ''; - if (nameIndex !== -1) { - rowName = _.str.sprintf(' (%s)', self.preview[rows.from][nameIndex]); + if (results.name.length > rows.from && results.name[rows.from] !== '') { + rowName = _.str.sprintf(' (%s)', results.name[rows.from]); } if (from === to) { return _.str.sprintf(_t("Row %d%s"), from, rowName); @@ -701,7 +701,7 @@ var DataImport = AbstractAction.extend({ } if (msg instanceof Array) { return _.str.sprintf( - '
%s
', + '
%s
', _.str.escapeHTML(_t("See possible values")), _(msg).map(function (msg) { return '
  • ' diff --git a/addons/base_import/static/src/scss/base_import.scss b/addons/base_import/static/src/scss/base_import.scss index 68d9603a813..52ab478c70f 100644 --- a/addons/base_import/static/src/scss/base_import.scss +++ b/addons/base_import/static/src/scss/base_import.scss @@ -73,7 +73,9 @@ display: table; } &.oe_import_error .oe_import_error_report, - &.oe_import_noheaders .oe_import_noheaders, + &.oe_import_noheaders .oe_import_noheaders{ + display: block; + } .oe_import_report_showmore .oe_import_report_more { display: list-item; } diff --git a/odoo/addons/base/models/res_partner.py b/odoo/addons/base/models/res_partner.py index afca620ff00..629f27d2558 100644 --- a/odoo/addons/base/models/res_partner.py +++ b/odoo/addons/base/models/res_partner.py @@ -221,7 +221,7 @@ class Partner(models.Model): self = fields.Many2one(comodel_name=_name, compute='_compute_get_ids') _sql_constraints = [ - ('check_name', "CHECK( (type='contact' AND name IS NOT NULL) or (type!='contact') )", 'Contacts require a name.'), + ('check_name', "CHECK( (type='contact' AND name IS NOT NULL) or (type!='contact') )", 'Contacts require a name'), ] def init(self): diff --git a/odoo/models.py b/odoo/models.py index 8b611768141..0f441f34094 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -5967,7 +5967,7 @@ def convert_pgerror_unique(model, fields, info, e): def convert_pgerror_constraint(model, fields, info, e): sql_constraints = dict([(('%s_%s') % (e.diag.table_name, x[0]), x) for x in model._sql_constraints]) if e.diag.constraint_name in sql_constraints.keys(): - return {'message': sql_constraints[e.diag.constraint_name][2]} + return {'message': "'%s'" % sql_constraints[e.diag.constraint_name][2]} return {'message': tools.ustr(e)} PGERROR_TO_OE = defaultdict(