[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
|
||||
import openerpweb
|
||||
import StringIO
|
||||
import csv
|
||||
|
||||
class Export(View):
|
||||
_cp_path = "/base_export/export"
|
||||
@@ -89,7 +91,6 @@ class Export(View):
|
||||
return name_list
|
||||
|
||||
def get_data(self, req, model, context=None):
|
||||
|
||||
ids = []
|
||||
context = context or {}
|
||||
fields_data = {}
|
||||
@@ -118,8 +119,42 @@ class Export(View):
|
||||
fields2 = self.fields_get(req, fields[field]['relation'])
|
||||
model_populate(fields2, prefix_node+field+'/', None, st_name+'/', level-1)
|
||||
model_populate(fields)
|
||||
|
||||
return _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();
|
||||
},
|
||||
"Export To File" : function() {
|
||||
self.get_fields();
|
||||
self.on_click_export_data();
|
||||
}
|
||||
},
|
||||
close: function(event, ui){ self.close();}
|
||||
@@ -284,10 +284,29 @@ openerp.base_export.Export = openerp.base.Dialog.extend({
|
||||
export_field.push(jQuery(this).val());
|
||||
});
|
||||
if (! export_field.length){
|
||||
alert('Please select fields to export...');
|
||||
alert('Please select fields to save export list...');
|
||||
}
|
||||
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() {
|
||||
jQuery(this.$dialog).remove();
|
||||
|
||||
Reference in New Issue
Block a user