From 4a567f3e7a8af4d28627308290bcd23fdb3a4c8c Mon Sep 17 00:00:00 2001 From: Fabien Pinckaers Date: Mon, 21 Apr 2008 13:04:49 +0000 Subject: [PATCH] Modifs for logo and multiple-header bzr revid: fp@tinyerp.com-f40939b7bd24b27497ead8daa85335ef727cef47 --- bin/addons/base/base_menu.xml | 2 +- bin/addons/base/base_update.xml | 23 ++++++++++----- bin/addons/base/res/res_company.py | 40 ++++++++++++++++++++++++++- bin/report/interface.py | 15 ++++++---- bin/report/render/rml2pdf/trml2pdf.py | 6 +++- bin/report/report_sxw.py | 13 +++++++-- 6 files changed, 81 insertions(+), 18 deletions(-) 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)