[POS-commit] r8145 - in stoqlib/trunk/stoqlib/gui: . dialogs

george at async.com.br george at async.com.br
Mon Jul 6 15:07:46 BRT 2009


Author: george
Date: Mon Jul  6 15:07:45 2009
New Revision: 8145

Log:
#3898: arquivo csv nao abre corretamente no openoffice em portugues. r=romaia

Modified:
   stoqlib/trunk/stoqlib/gui/csvexporter.py
   stoqlib/trunk/stoqlib/gui/dialogs/csvexporterdialog.py

Modified: stoqlib/trunk/stoqlib/gui/csvexporter.py
==============================================================================
--- stoqlib/trunk/stoqlib/gui/csvexporter.py	Mon Jul  6 13:59:08 2009	(r8144)
+++ stoqlib/trunk/stoqlib/gui/csvexporter.py	Mon Jul  6 15:07:45 2009	(r8145)
@@ -23,8 +23,11 @@
 ##
 """CSV Exporter Utilities"""
 
+from kiwi.datatypes import number
 from kiwi.ui.objectlist import Column, ObjectList
 
+from stoqlib.lib.validators import get_formatted_price as format_number
+
 
 def objectlist2csv(objectlist, encoding):
     """Convert a instance of L{kiwi.ui.objectlist.ObjectList} to a CSV format.
@@ -41,24 +44,35 @@
                         objectlist.__class__.__name__)
 
     attributes = []
-    title = ''
+    title = []
     for column in objectlist.get_treeview().get_columns():
         if not column.get_visible():
             continue
 
         header_widget = column.get_widget()
         if header_widget:
-            title += header_widget.get_text() + ','
+            title.append(header_widget.get_text())
             attributes.append(column.attribute)
 
     # the header must be the first line of the CSV
     csv_lines = [title]
 
     for item in objectlist:
-        csv_line = ','.join(
-            [str(Column.get_attribute(item, attr, '')) for attr in attributes])
-        csv_line = csv_line.replace('None', '')
-        csv_line += ','
-        csv_lines.append(csv_line.encode(encoding, 'replace'))
-
-    return '\n'.join(csv_lines)
+        csv_line = []
+        csv_line.extend(
+            [_get_field_string(item, attr).encode(encoding, 'replace')
+                                                    for attr in attributes])
+        csv_lines.append(csv_line)
+
+    return csv_lines
+
+
+def _get_field_string(item, field):
+    field_value = Column.get_attribute(item, field, '')
+    field_value_as_str = str(field_value)
+    if not field_value_as_str or field_value_as_str == 'None':
+        return ''
+    if isinstance(field_value, number):
+        #XXX: workaround to not handle locale differences directly.
+        return format_number(field_value, symbol=False)
+    return field_value_as_str

Modified: stoqlib/trunk/stoqlib/gui/dialogs/csvexporterdialog.py
==============================================================================
--- stoqlib/trunk/stoqlib/gui/dialogs/csvexporterdialog.py	Mon Jul  6 13:59:08 2009	(r8144)
+++ stoqlib/trunk/stoqlib/gui/dialogs/csvexporterdialog.py	Mon Jul  6 15:07:45 2009	(r8145)
@@ -24,6 +24,8 @@
 """CSV Exporter Dialog"""
 
 
+import csv
+
 import gtk
 
 from kiwi.python import Settable
@@ -120,10 +122,12 @@
 
         content = export_csv(self.model.klass, select=results,
                              connection=self.conn)
-        return content.encode(encoding, 'replace')
+        content = content.encode(encoding, 'replace')
+        return content.split('\n')
 
     def _save(self, filename):
         encoding = self.encoding.get_selected()
-        writer = open(filename, 'w')
-        writer.write(self._get_csv_content(encoding))
-        writer.close()
+        csv_file = open(filename, 'w')
+        writer = csv.writer(csv_file, doublequote=True, quoting=csv.QUOTE_ALL)
+        writer.writerows(self._get_csv_content(encoding))
+        csv_file.close()


More information about the POS-commit mailing list