From 013f62a35abdad728cffd8dc49160e1426e2f517 Mon Sep 17 00:00:00 2001
From: tux091 <renaud.legac@free.fr>
Date: Wed, 7 Mar 2012 21:39:39 +0100
Subject: [PATCH] Introduce a mechanism to download report in different formats
 using iframe.

---
 controllers/reports.py       | 27 +++++++++++++++++++++------
 languages/fr-fr.py           |  1 +
 models/dummy.py              |  2 +-
 models/widgets.py            |  2 +-
 views/reports/report_2.html  |  3 +++
 views/reports/report_2.latex | 11 +++++++++++
 6 files changed, 38 insertions(+), 8 deletions(-)
 create mode 100644 views/reports/report_2.html
 create mode 100644 views/reports/report_2.latex

diff --git a/controllers/reports.py b/controllers/reports.py
index d5719027..a58620e6 100644
--- a/controllers/reports.py
+++ b/controllers/reports.py
@@ -20,10 +20,25 @@ def report_2():
     """Return the url arguments
     
     """
-    
-    s = ""
-    print request.post_vars
-    for k in request.post_vars:
-        s += "<br>%s: %s" %  (k, request.post_vars[k])
 
-    return '<h3>report_2</h3>'+s
\ No newline at end of file
+    vars = request.vars
+    # user request a file with a specific format (latex,...)
+    # return to the browser na iframe balise with a new URL
+    # the browser will request the file locate at the url
+    if vars.Foo1My_format and vars.Foo1My_format == 'latex':
+
+        # remove the field use to select the file format
+        # in order to avoid circular loop
+        del vars.Foo1My_format
+
+        s = IFRAME(_id='MyId',
+                   _frameborder=0,
+                   _width=0,
+                   _height=0,
+                   _css='display:none;visibility:hidden;height:0px;',
+                   _src=URL('reports', 'report_2.latex', vars=vars)).xml()
+
+        return s
+
+    # standart reponse
+    return dict(test=vars)
\ No newline at end of file
diff --git a/languages/fr-fr.py b/languages/fr-fr.py
index 583ddf00..02f38304 100644
--- a/languages/fr-fr.py
+++ b/languages/fr-fr.py
@@ -27,6 +27,7 @@
 'Last Page': 'Dernière Page',
 'Max Records': 'Max Records',
 'My Date': 'My Date',
+'My Format': 'My Format',
 'My Int': 'My Int',
 'My List': 'My List',
 'My String': 'My String',
diff --git a/models/dummy.py b/models/dummy.py
index f93c67bf..b18d69e7 100644
--- a/models/dummy.py
+++ b/models/dummy.py
@@ -16,4 +16,4 @@ dummy.define_table("foo1",
     Field('my_string', 'string'),
     Field('my_int', 'integer', requires=IS_INT_IN_RANGE(0, 100)),
     Field('my_date', 'date'),
-    Field('my_list', requires=IS_IN_SET(['a', 'b', 'c'])))
+    Field('my_format', default='html', requires=IS_IN_SET(['html', 'latex', 'pdf'])))
diff --git a/models/widgets.py b/models/widgets.py
index 92c71894..0c6751a5 100755
--- a/models/widgets.py
+++ b/models/widgets.py
@@ -192,7 +192,7 @@ configurator = lambda tablename: dbui.to_gridPanel(db[tablename])
 gridNode.add_children(db.tables, func=configurator) 
 
 reportNode = dbui.Node(T('Reports'))
-node = dbui.Panel(html='salut ma poule')
+node = dbui.Panel(html="salut ma poule")
 reportNode.add_child(T('report_1'), node)
 
 fields = dbui.to_fields(dummy.foo1)
diff --git a/views/reports/report_2.html b/views/reports/report_2.html
new file mode 100644
index 00000000..5181b246
--- /dev/null
+++ b/views/reports/report_2.html
@@ -0,0 +1,3 @@
+<h3>Report_2</h3>
+{{for k in test:}}
+  <br>{{=k}}: {{=test[k]}}{{pass}}
diff --git a/views/reports/report_2.latex b/views/reports/report_2.latex
new file mode 100644
index 00000000..e0efffea
--- /dev/null
+++ b/views/reports/report_2.latex
@@ -0,0 +1,11 @@
+\documentclass[english]{article}
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{babel}
+\begin{document}
+\section*{Test}
+\begin{enumerate}
+ {{for k in test:}}
+ \item {{=k}}: {{=test[k]}}{{pass}}
+\end{enumerate}
+\end{document}
\ No newline at end of file
-- 
GitLab