[IMP]Implement selection box of list of fields under the header.
bzr revid: kch@tinyerp.com-20110829124743-0pcuv3e0u37cbpjf
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -1459,7 +1459,23 @@
|
||||
<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>
|
||||
|
||||
Reference in New Issue
Block a user