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 {}
_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'}})
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:
records.append(row)
if i == limit:
break
+
for line in records:
for word in line:
word = str(word.decode(params.get('csvcode')))
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,)}
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):
},
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']}));
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();
<t t-if="record=='header'">
<tr class="oe_import_grid-header">
<t t-foreach="records.header" t-as="header">
- <th class="oe_import_grid-cell"><t t-esc="header[0]"/></th>
+ <td class="oe_import_grid-cell" id="header"><t t-esc="header[0]"/></td>
+ </t>
+ </tr>
+ </t>
+ <t t-if="record=='sel'">
+ <tr>
+ <t t-foreach="records.header" t-as="header">
+ <td>
+ <select name="fld" id="fld">
+ <option selected="selected" value=""></option>
+ <t t-foreach="records.sel" t-as="selection">
+ <option t-att="{'selected': header[0] === selection ? 'selected' : null}"
+ t-att-value="selection"><t t-esc="selection"/>
+ </option>
+ </t>
+ </select>
+ </td>
</t>
</tr>
</t>