diff --git a/addons/base_export/controllers/main.py b/addons/base_export/controllers/main.py index 89a1d8be6d8..38964111e2a 100644 --- a/addons/base_export/controllers/main.py +++ b/addons/base_export/controllers/main.py @@ -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) diff --git a/addons/base_export/static/src/js/base_export.js b/addons/base_export/static/src/js/base_export.js index 06ed5eacaa6..07ca3ef8b1f 100644 --- a/addons/base_export/static/src/js/base_export.js +++ b/addons/base_export/static/src/js/base_export.js @@ -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();