diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index ca4b8c76f7a..c56a66342f0 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -436,7 +436,7 @@ def clean_action(req, action): context = req.session.eval_context(req.context) eval_ctx = req.session.evaluation_context(context) action.setdefault('flags', {}) - + # values come from the server, we can just eval them if isinstance(action.get('context'), basestring): action['context'] = eval( action['context'], eval_ctx ) or {} @@ -1289,7 +1289,7 @@ class Import(View): _fields = {} _fields_invert = {} error = None - + all_fields = [] fields = dict(req.session.model(params.get('model')).fields_get(False, req.session.eval_context(req.context))) fields.update({'id': {'string': 'ID'}, '.id': {'string': 'Database ID'}}) @@ -1320,7 +1320,7 @@ class Import(View): prefix_node+field, None, st_name+'/', level-1) fields.update({'id':{'string':'ID'},'.id':{'string':'Database ID'}}) model_populate(fields) - + all_fields = fields.keys() try: data = csv.reader(params.get('csvfile').file, quotechar=str(params.get('csvdel')), delimiter=str(params.get('csvsep'))) except: @@ -1336,6 +1336,7 @@ class Import(View): records.append(row) if i == limit: break + for line in records: for word in line: word = str(word.decode(params.get('csvcode'))) @@ -1344,7 +1345,8 @@ class Import(View): elif word in _fields_invert.keys(): fields.append((_fields_invert[word], word)) else: - error = {'message':("You cannot import the field '%s', because we cannot auto-detect it" % (word,))} + fields.append((word, word)) +# error = {'message':("You cannot import the field '%s', because we cannot auto-detect it" % (word,))} break except: error = {'message':('Error processing the first line of the file. Field "%s" is unknown') % (word,)} @@ -1354,7 +1356,7 @@ class Import(View): error=dict(error, preview=params.get('csvfile').file.read(200)) return simplejson.dumps({'error':error}) - return simplejson.dumps({'records':records[1:],'fields':fields}) + return simplejson.dumps({'records':records[1:],'fields':fields,'all_fields':all_fields}) @openerpweb.httprequest def import_data(self, req, **params): diff --git a/addons/base/static/src/js/data_import.js b/addons/base/static/src/js/data_import.js index 6450f8709a3..a98f387eeaf 100644 --- a/addons/base/static/src/js/data_import.js +++ b/addons/base/static/src/js/data_import.js @@ -54,10 +54,11 @@ openerp.base.DataImport = openerp.base.Dialog.extend({ }, import_results:function(res){ $('#result, #success').empty(); + $(".ui-button-text:contains('Import File')").parent().attr("disabled",false); var results = $.parseJSON(res); var result_node = $("#result"); if (results['records']){ - records = {'header':results['fields'],'row':results['records']}; + records = {'header':results['fields'],'sel':results['all_fields'],'row':results['records']}; result_node.append(QWeb.render('ImportView-result',{'records':records})); }else if(results['error']){ result_node.append(QWeb.render('ImportView-result',{'error': results['error']})); @@ -65,6 +66,12 @@ openerp.base.DataImport = openerp.base.Dialog.extend({ var success_node = $("#success"); success_node.append(QWeb.render('ImportView-result',{'success': results['success']})); } + $('td #header').each(function(){ + var head = $(this).text(); + if (jQuery.inArray(head,results['all_fields']) <= -1){ + $(".ui-button-text:contains('Import File')").parent().attr("disabled",true); + } + }); }, stop: function() { $(this.$dialog).remove(); diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml index 60b9c4c4c08..7fd999d00d5 100644 --- a/addons/base/static/src/xml/base.xml +++ b/addons/base/static/src/xml/base.xml @@ -1459,7 +1459,23 @@ - + + + + + + + + + +