Fix for cmp items
[auf_rh_dae.git] / src / qbe / django_qbe / exports.py
index 55cbb0c..7b32c0b 100644 (file)
@@ -2,6 +2,10 @@
 import codecs
 import csv
 from StringIO import StringIO
+from odf.opendocument import OpenDocumentSpreadsheet
+from odf.style import Style, TextProperties, TableColumnProperties
+from odf.text import P
+from odf.table import Table, TableRow, TableCell
 
 from django.http import HttpResponse
 from django.utils.datastructures import SortedDict
@@ -61,9 +65,16 @@ class UnicodeWriter(object):
             self.writerow(row)
 
 
-def base_export(labels, results):
+def txt(msg):
+    text = msg
+    if msg is not None and isinstance(msg, str):
+        text = unicode (msg, "utf-8")
+    return text
+
+
+def base_export(labels, results, dialect=csv.excel_tab):
     output = StringIO()
-    w = UnicodeWriter(output)
+    w = UnicodeWriter(output, dialect=dialect)
     w.writerow(labels)
     for row in results:
         w.writerow(row)
@@ -73,20 +84,56 @@ def base_export(labels, results):
 
 @formats.add("csv")
 def csv_format(labels, results):
-    output = base_export(labels, results)
+    output = base_export(labels, results, dialect=csv.excel)
     mimetype = "text/csv"
-    return HttpResponse(output, mimetype=mimetype)
+    response = HttpResponse(output, mimetype=mimetype)
+    response['Content-Disposition'] = 'attachment; filename=export.csv'
+    return response
 
 
 @formats.add("ods")
 def ods_format(labels, results):
-    output = base_export(labels, results)
+    doc = OpenDocumentSpreadsheet()
+    style = Style(name="Large number", family="table-cell")
+    style.addElement(TextProperties(fontfamily="Arial", fontsize="15pt"))
+    doc.styles.addElement(style)
+    widewidth = Style(name="co1", family="table-column")
+    widewidth.addElement(TableColumnProperties(columnwidth="2.8cm", breakbefore="auto"))
+    doc.automaticstyles.addElement(widewidth)
+
+    table = Table()
+    if len (labels) > 0:
+        tr = TableRow ()
+        table.addElement (tr)
+        for item in labels:
+            tc = TableCell ()
+            tr.addElement (tc)
+            p = P(stylename = style, text = txt(item))
+            tc.addElement (p)
+
+    for line in results:
+        tr = TableRow ()
+        table.addElement (tr)
+        for item in line:
+            tc = TableCell ()
+            tr.addElement (tc)
+            p = P (stylename = style, text = txt(item))
+            tc.addElement (p)
+
+    doc.spreadsheet.addElement(table)
+    buffer = StringIO ()
+    doc.write(buffer)
+
     mimetype = "application/vnd.oasis.opendocument.spreadsheet"
-    return HttpResponse(output, mimetype=mimetype)
+    response = HttpResponse(buffer.getvalue(), mimetype=mimetype)
+    response['Content-Disposition'] = 'attachment; filename=export.ods'
+    return response
 
 
 @formats.add("xls")
 def xls_format(labels, results):
     output = base_export(labels, results)
     mimetype = "application/vnd.ms-excel"
-    return HttpResponse(output, mimetype=mimetype)
+    response = HttpResponse(output, mimetype=mimetype)
+    response['Content-Disposition'] = 'attachment; filename=export.xls'
+    return response