[IMP]Implement selection box of list of fields under the header.
authorKunal Chavda (OpenERP) <kch@tinyerp.com>
Mon, 29 Aug 2011 12:47:43 +0000 (18:17 +0530)
committerKunal Chavda (OpenERP) <kch@tinyerp.com>
Mon, 29 Aug 2011 12:47:43 +0000 (18:17 +0530)
bzr revid: kch@tinyerp.com-20110829124743-0pcuv3e0u37cbpjf

addons/base/controllers/main.py
addons/base/static/src/js/data_import.js
addons/base/static/src/xml/base.xml

index ca4b8c7..c56a663 100644 (file)
@@ -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):
index 6450f87..a98f387 100644 (file)
@@ -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();
index 60b9c4c..7fd999d 100644 (file)
                 <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>