diff --git a/bin/addons/base/base_menu.xml b/bin/addons/base/base_menu.xml
index 10acdc6c0b7..5ec22f891ae 100644
--- a/bin/addons/base/base_menu.xml
+++ b/bin/addons/base/base_menu.xml
@@ -16,7 +16,7 @@
- res.company
+ Your Companies
res.company
form
tree,form
diff --git a/bin/addons/base/base_update.xml b/bin/addons/base/base_update.xml
index 3dc216db4d4..0aada0ba8d7 100644
--- a/bin/addons/base/base_update.xml
+++ b/bin/addons/base/base_update.xml
@@ -171,13 +171,22 @@
form
diff --git a/bin/addons/base/res/res_company.py b/bin/addons/base/res/res_company.py
index e241f0c6aaf..6489aafa2f2 100644
--- a/bin/addons/base/res/res_company.py
+++ b/bin/addons/base/res/res_company.py
@@ -1,7 +1,7 @@
##############################################################################
#
# Copyright (c) 2004-2006 TINY SPRL. (http://tiny.be) All Rights Reserved.
-# Fabien Pinckaers
+# Fabien Pinckaers
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
@@ -40,6 +40,8 @@ class res_company(osv.osv):
'rml_header1': fields.char('Report Header', size=200),
'rml_footer1': fields.char('Report Footer 1', size=200),
'rml_footer2': fields.char('Report Footer 2', size=200),
+ 'rml_header' : fields.text('Rml Header'),
+ 'logo' : fields.binary('Logo'),
'currency_id': fields.many2one('res.currency', 'Currency', required=True),
}
@@ -106,8 +108,44 @@ class res_company(osv.osv):
level -= 1
return True
+ def _get_header(self,cr,uid,ids):
+ try :
+ return tools.file_open('custom/corporate_rml_header.rml').read()
+ except:
+ return """
+
+
+
+
+
+
+
+
+ [[ company.partner_id.name ]]
+ 1cm 27.7cm 20cm 27.7cm
+
+ [[ company.rml_header1 ]]
+ [[ company.partner_id.address and company.partner_id.address[0].street ]]
+ [[ company.partner_id.address and company.partner_id.address[0].zip ]] [[ company.partner_id.address and company.partner_id.address[0].city ]] - [[ company.partner_id.address and company.partner_id.address[0].country_id and company.partner_id.address[0].country_id.name ]]
+ Phone:
+ [[ company.partner_id.address and company.partner_id.address[0].phone ]]
+ Mail:
+ [[ company.partner_id.address and company.partner_id.address[0].email ]]
+ 1cm 25.9cm 7cm 25.9cm
+
+
+
+ 1.5cm 2.15cm 19.9cm 2.15cm
+
+ [[ company.rml_footer1 ]]
+ [[ company.rml_footer2 ]]
+ Contact : [[ user.name ]]
+
+
+"""
_defaults = {
'currency_id': _get_euro,
+ 'rml_header':_get_header
}
_constraints = [
diff --git a/bin/report/interface.py b/bin/report/interface.py
index a876b27897c..7343320b7a4 100644
--- a/bin/report/interface.py
+++ b/bin/report/interface.py
@@ -104,7 +104,7 @@ class report_rml(report_int):
if not context:
context={}
doc = print_xml.document(cr, uid, datas, {})
- self.bin_datas = doc.bin_datas
+ self.bin_datas.update( doc.bin_datas or {})
doc.parse(self.tmpl, ids, self.table, context)
xml = doc.xml_get()
doc.close()
@@ -191,20 +191,25 @@ class report_rml(report_int):
result.freeDoc()
return xml
- def create_pdf(self, xml):
+ def create_pdf(self, xml, logo=None):
+ if logo:
+ self.bin_datas['logo'] = logo
+ else:
+ if 'logo' in self.bin_datas:
+ del self.bin_datas['logo']
obj = render.rml(xml, self.bin_datas, tools.config['root_path'])
obj.render()
return obj.get()
- def create_html(self, xml):
+ def create_html(self, xml, logo=None):
obj = render.rml2html(xml, self.bin_datas)
obj.render()
return obj.get()
- def create_raw(self, xml):
+ def create_raw(self, xml, logo=None):
return xml
- def create_sxw(self, path):
+ def create_sxw(self, path, logo=None):
return path
from report_sxw import report_sxw
diff --git a/bin/report/render/rml2pdf/trml2pdf.py b/bin/report/render/rml2pdf/trml2pdf.py
index 9a514e44a4c..4b6aa1a2bd0 100755
--- a/bin/report/render/rml2pdf/trml2pdf.py
+++ b/bin/report/render/rml2pdf/trml2pdf.py
@@ -301,7 +301,11 @@ class _rml_canvas(object):
from reportlab.lib.utils import ImageReader
if not node.hasAttribute('file'):
- s = self.images[node.getAttribute('name')]
+ if node.getAttribute('name') in self.images:
+ scontent = self.images[node.getAttribute('name')]
+ s = StringIO.StringIO(scontent)
+ else:
+ return True
else:
if node.getAttribute('file') in self.images:
s = StringIO.StringIO(self.images[node.getAttribute('file')])
diff --git a/bin/report/report_sxw.py b/bin/report/report_sxw.py
index 914b67e60e2..718f7901ce9 100644
--- a/bin/report/report_sxw.py
+++ b/bin/report/report_sxw.py
@@ -46,6 +46,8 @@ DT_FORMAT = '%Y-%m-%d'
DHM_FORMAT = '%Y-%m-%d %H:%M:%S'
HM_FORMAT = '%H:%M:%S'
+import base64
+
if not hasattr(locale, 'nl_langinfo'):
locale.nl_langinfo = lambda *a: '%x'
@@ -200,6 +202,8 @@ class rml_parse(object):
'formatLang': self.formatLang,
}
self.localcontext.update(context)
+ self.rml_header = user.company_id.rml_header
+ self.logo = user.company_id.logo
self.name = name
self._regex = re.compile('\[\[(.+?)\]\]')
self._transl_regex = re.compile('(\[\[.+?\]\])')
@@ -432,7 +436,7 @@ class rml_parse(object):
return False
def _add_header(self, node):
- rml_head = tools.file_open('custom/corporate_rml_header.rml').read()
+ rml_head = self.rml_header
head_dom = xml.dom.minidom.parseString(rml_head)
#for frame in head_dom.getElementsByTagName('frame'):
# frame.parentNode.removeChild(frame)
@@ -479,6 +483,7 @@ class report_sxw(report_rml):
return table_obj.browse(cr, uid, ids, list_class=browse_record_list, context=context)
def create(self, cr, uid, ids, data, context=None):
+ logo = None
if not context:
context={}
context = context.copy()
@@ -547,7 +552,6 @@ class report_sxw(report_rml):
if self.header:
#Add corporate header/footer
- rml_head = tools.file_open('custom/corporate_rml_header.rml').read()
rml = tools.file_open('custom/corporate_sxw_header.xml').read()
rml_parser = self.parser(cr, uid, self.name2, context)
rml_parser.parents = sxw_parents
@@ -574,8 +578,11 @@ class report_sxw(report_rml):
# f = file("/tmp/debug.rml", "w")
# f.write(rml2)
# f.close()
+ if rml_parser.logo:
+ logo = base64.decodestring(rml_parser.logo)
+
create_doc = self.generators[report_type]
- pdf = create_doc(rml2)
+ pdf = create_doc(rml2, logo)
return (pdf, report_type)