[IMP] add on_click_export_data method for export data in csv file.
bzr revid: ysa@tinyerp.com-20110718124940-kbxbqz90buuef93d
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
from base.controllers.main import View
|
from base.controllers.main import View
|
||||||
import openerpweb
|
import openerpweb
|
||||||
|
import StringIO
|
||||||
|
import csv
|
||||||
|
|
||||||
class Export(View):
|
class Export(View):
|
||||||
_cp_path = "/base_export/export"
|
_cp_path = "/base_export/export"
|
||||||
@@ -89,7 +91,6 @@ class Export(View):
|
|||||||
return name_list
|
return name_list
|
||||||
|
|
||||||
def get_data(self, req, model, context=None):
|
def get_data(self, req, model, context=None):
|
||||||
|
|
||||||
ids = []
|
ids = []
|
||||||
context = context or {}
|
context = context or {}
|
||||||
fields_data = {}
|
fields_data = {}
|
||||||
@@ -118,8 +119,42 @@ class Export(View):
|
|||||||
fields2 = self.fields_get(req, fields[field]['relation'])
|
fields2 = self.fields_get(req, fields[field]['relation'])
|
||||||
model_populate(fields2, prefix_node+field+'/', None, st_name+'/', level-1)
|
model_populate(fields2, prefix_node+field+'/', None, st_name+'/', level-1)
|
||||||
model_populate(fields)
|
model_populate(fields)
|
||||||
|
|
||||||
return _fields
|
return _fields
|
||||||
|
|
||||||
return rec(fields)
|
return rec(fields)
|
||||||
|
|
||||||
|
def export_csv(self, req, fields, result):
|
||||||
|
fp = StringIO.StringIO()
|
||||||
|
writer = csv.writer(fp, quoting=csv.QUOTE_ALL)
|
||||||
|
|
||||||
|
writer.writerow(fields)
|
||||||
|
|
||||||
|
for data in result:
|
||||||
|
row = []
|
||||||
|
for d in data:
|
||||||
|
if isinstance(d, basestring):
|
||||||
|
d = d.replace('\n',' ').replace('\t',' ')
|
||||||
|
try:
|
||||||
|
d = d.encode('utf-8')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
if d is False: d = None
|
||||||
|
row.append(d)
|
||||||
|
writer.writerow(row)
|
||||||
|
|
||||||
|
fp.seek(0)
|
||||||
|
data = fp.read()
|
||||||
|
fp.close()
|
||||||
|
return data
|
||||||
|
|
||||||
|
@openerpweb.jsonrequest
|
||||||
|
def export_data(self, req, model, fields, ids, domain, import_compat=False, context=None):
|
||||||
|
context = req.session.eval_context(req.context)
|
||||||
|
modle_obj = req.session.model(model)
|
||||||
|
ids = ids or modle_obj.search(domain, context=context)
|
||||||
|
|
||||||
|
field = fields.keys()
|
||||||
|
result = modle_obj.export_data(ids, field , context).get('datas',[])
|
||||||
|
|
||||||
|
if not import_compat:
|
||||||
|
field = fields.values()
|
||||||
|
return self.export_csv(req, field, result)
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ openerp.base_export.Export = openerp.base.Dialog.extend({
|
|||||||
self.close();
|
self.close();
|
||||||
},
|
},
|
||||||
"Export To File" : function() {
|
"Export To File" : function() {
|
||||||
self.get_fields();
|
self.on_click_export_data();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
close: function(event, ui){ self.close();}
|
close: function(event, ui){ self.close();}
|
||||||
@@ -284,10 +284,29 @@ openerp.base_export.Export = openerp.base.Dialog.extend({
|
|||||||
export_field.push(jQuery(this).val());
|
export_field.push(jQuery(this).val());
|
||||||
});
|
});
|
||||||
if (! export_field.length){
|
if (! export_field.length){
|
||||||
alert('Please select fields to export...');
|
alert('Please select fields to save export list...');
|
||||||
}
|
}
|
||||||
return export_field;
|
return export_field;
|
||||||
},
|
},
|
||||||
|
on_click_export_data: function(){
|
||||||
|
var self = this;
|
||||||
|
var export_field = {};
|
||||||
|
var flag = true;
|
||||||
|
$("#fields_list option").each(function(){
|
||||||
|
export_field[jQuery(this).val()] = jQuery(this).text();
|
||||||
|
flag = false;
|
||||||
|
});
|
||||||
|
if (flag){
|
||||||
|
alert('Please select fields to export...');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
import_comp = $("#import_compat option:selected").val()
|
||||||
|
self.rpc("/base_export/export/export_data", {"model": self.dataset.model, "fields":export_field, 'ids': self.dataset.ids, 'domain': self.dataset.domain, "import_compat":parseInt(import_comp)}, function(data){
|
||||||
|
window.location="data:text/csv;charset=utf8," + encodeURIComponent(data)
|
||||||
|
self.close();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
close: function() {
|
close: function() {
|
||||||
jQuery(this.$dialog).remove();
|
jQuery(this.$dialog).remove();
|
||||||
|
|||||||
Reference in New Issue
Block a user