[IMP] report; minimal layout is now a qweb template, allowing users to customize...
authorSimon Lejeune <sle@openerp.com>
Thu, 26 Jun 2014 14:34:31 +0000 (16:34 +0200)
committerSimon Lejeune <sle@openerp.com>
Thu, 26 Jun 2014 14:34:31 +0000 (16:34 +0200)
addons/report/models/report.py
addons/report/views/layouts.xml

index 08cfec4..5bfc797 100644 (file)
@@ -34,10 +34,8 @@ import lxml.html
 import cStringIO
 import subprocess
 from distutils.version import LooseVersion
-try:
-    from pyPdf import PdfFileWriter, PdfFileReader
-except ImportError:
-    PdfFileWriter = PdfFileReader = None
+from functools import partial
+from pyPdf import PdfFileWriter, PdfFileReader
 
 
 _logger = logging.getLogger(__name__)
@@ -71,23 +69,6 @@ class Report(osv.Model):
 
     public_user = None
 
-    MINIMAL_HTML_PAGE = """
-<base href="{base_url}">
-<!DOCTYPE html>
-<html style="height: 0;">
-    <head>
-        <link href="/report/static/src/css/reset.min.css" rel="stylesheet"/>
-        <link href="/web/static/lib/bootstrap/css/bootstrap.css" rel="stylesheet"/>
-        <link href="/website/static/src/css/website.css" rel="stylesheet"/>
-        <link href="/web/static/lib/fontawesome/css/font-awesome.css" rel="stylesheet"/>
-        <style type='text/css'>{css}</style>
-        {subst}
-    </head>
-    <body class="container" onload="subst()">
-        {body}
-    </body>
-</html>"""
-
     #--------------------------------------------------------------------------
     # Extension of ir_ui_view.render with arguments frequently used in reports
     #--------------------------------------------------------------------------
@@ -198,6 +179,11 @@ class Report(osv.Model):
         footerhtml = []
         base_url = self.pool['ir.config_parameter'].get_param(cr, uid, 'web.base.url')
 
+        # Minimal page renderer
+        view_obj = self.pool['ir.ui.view']
+        render_minimal = partial(view_obj.render, cr, uid, 'report.minimal_layout', context=context)
+
+
         # The received html report must be simplified. We convert it in a xml tree
         # in order to extract headers, bodies and footers.
         try:
@@ -208,12 +194,12 @@ class Report(osv.Model):
 
             for node in root.xpath("//div[@class='header']"):
                 body = lxml.html.tostring(node)
-                header = self.MINIMAL_HTML_PAGE.format(css=css, subst=subst, body=body, base_url=base_url)
+                header = render_minimal(dict(css=css, subst=subst, body=body, base_url=base_url))
                 headerhtml.append(header)
 
             for node in root.xpath("//div[@class='footer']"):
                 body = lxml.html.tostring(node)
-                footer = self.MINIMAL_HTML_PAGE.format(css=css, subst=subst, body=body, base_url=base_url)
+                footer = render_minimal(dict(css=css, subst=subst, body=body, base_url=base_url))
                 footerhtml.append(footer)
 
             for node in root.xpath("//div[@class='page']"):
@@ -230,7 +216,7 @@ class Report(osv.Model):
                     reportid = False
 
                 body = lxml.html.tostring(node)
-                reportcontent = self.MINIMAL_HTML_PAGE.format(css=css, subst='', body=body, base_url=base_url)
+                reportcontent = render_minimal(dict(css=css, subst='', body=body, base_url=base_url))
 
                 # FIXME: imo the best way to extract record id from html reports is by using the
                 # qweb branding. As website editor is not yet splitted in a module independant from
index 4de6717..e5ce9a8 100644 (file)
     <t t-raw="0" />
 </template>
 
+<template id="minimal_layout">
+    <t t-raw="'&lt;base href=%s&gt;' % base_url"/>
+    &lt;!DOCTYPE html&gt;
+    <html style="height: 0;">
+        <head>
+            <link href="/report/static/src/css/reset.min.css" rel="stylesheet"/>
+            <link href="/web/static/lib/bootstrap/css/bootstrap.css" rel="stylesheet"/>
+            <link href="/website/static/src/css/website.css" rel="stylesheet"/>
+            <link href="/web/static/lib/fontawesome/css/font-awesome.css" rel="stylesheet"/>
+            <style type='text/css'><t t-raw="css"/></style>
+            <t t-raw="subst"/>
+        </head>
+        <body class="container" onload="subst()">
+            <t t-raw="body"/>
+        </body>
+    </html>
+</template>
+
 </data>
 </openerp>