merged
bzr revid: apa@tinyerp.com-20101007113439-o017rirdl8khsyw6 bzr revid: apa@tinyerp.com-20101008043756-14o8o04e1i9auvp9
This commit is contained in:
@@ -9,8 +9,6 @@
|
||||
<drawString x="1.3cm" y="19.5cm"><xsl:value-of select="//header-date"/></drawString>
|
||||
<setFont name="DejaVu Sans Bold" size="10"/>
|
||||
<drawString x="13.8cm" y="19.5cm"><xsl:value-of select="//company"/></drawString>
|
||||
<setFont name="DejaVu Sans" size="8"/>
|
||||
<drawRightString x="28.4cm" y="19.5cm"><pageNumber/> / </drawRightString>
|
||||
<stroke color="#000000"/>
|
||||
<lines size="8">1.3cm 19.3cm 28.5cm 19.3cm</lines>
|
||||
</xsl:template>
|
||||
|
||||
@@ -211,9 +211,6 @@ class res_company(osv.osv):
|
||||
<drawString x="25" y="725"> [[ formatLang(time.strftime("%Y-%m-%d"), date=True) ]] [[ time.strftime("%H:%M") ]]</drawString>
|
||||
<setFont name="DejaVu Sans Bold" size="10"/>
|
||||
<drawString x="490" y="725">[[ company.partner_id.name ]]</drawString>
|
||||
<setFont name="DejaVu Sans" size="8"/>
|
||||
<drawRightString x="1073" y="725"><pageNumber/>/</drawRightString>
|
||||
<drawString x="1073" y="725"><pageCount/></drawString>
|
||||
<stroke color="#000000"/>
|
||||
<lines>25 720 1085 720</lines>
|
||||
</pageGraphics>
|
||||
@@ -231,9 +228,6 @@ class res_company(osv.osv):
|
||||
<drawString x="1.3cm" y="28.3cm"> [[ formatLang(time.strftime("%Y-%m-%d"), date=True) ]] [[ time.strftime("%H:%M") ]]</drawString>
|
||||
<setFont name="DejaVu Sans Bold" size="10"/>
|
||||
<drawString x="9.8cm" y="28.3cm">[[ company.partner_id.name ]]</drawString>
|
||||
<setFont name="DejaVu Sans" size="8"/>
|
||||
<drawRightString x="19.7cm" y="28.3cm"><pageNumber/>/</drawRightString>
|
||||
<drawString x="19.7cm" y="28.3cm"><pageCount/></drawString>
|
||||
<stroke color="#000000"/>
|
||||
<lines>1.3cm 28.1cm 20cm 28.1cm</lines>
|
||||
</pageGraphics>
|
||||
|
||||
@@ -70,6 +70,7 @@ class report_rml(report_int):
|
||||
def __init__(self, name, table, tmpl, xsl):
|
||||
super(report_rml, self).__init__(name)
|
||||
self.table = table
|
||||
self.internal_header=False
|
||||
self.tmpl = tmpl
|
||||
self.xsl = xsl
|
||||
self.bin_datas = {}
|
||||
@@ -110,6 +111,7 @@ class report_rml(report_int):
|
||||
return self.post_process_xml_data(cr, uid, xml, context)
|
||||
|
||||
def post_process_xml_data(self, cr, uid, xml, context=None):
|
||||
|
||||
if not context:
|
||||
context={}
|
||||
# find the position of the 3rd tag
|
||||
@@ -136,6 +138,8 @@ class report_rml(report_int):
|
||||
# TODO: The translation doesn't work for "<tag t="1">textext<tag> tex</tag>text</tag>"
|
||||
#
|
||||
def create_rml(self, cr, xml, uid, context=None):
|
||||
if self.tmpl=='' and not self.internal_header:
|
||||
self.internal_header=True
|
||||
if not context:
|
||||
context={}
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
@@ -174,6 +178,9 @@ class report_rml(report_int):
|
||||
return xml
|
||||
|
||||
def create_pdf(self, rml, localcontext = None, logo=None, title=None):
|
||||
if not localcontext:
|
||||
localcontext={}
|
||||
localcontext.update({'internal_header':self.internal_header})
|
||||
if logo:
|
||||
self.bin_datas['logo'] = logo
|
||||
else:
|
||||
|
||||
@@ -35,9 +35,58 @@ from lxml import etree
|
||||
import base64
|
||||
from reportlab.platypus.doctemplate import ActionFlowable
|
||||
from tools.safe_eval import safe_eval as eval
|
||||
from reportlab.lib.units import inch,cm,mm
|
||||
|
||||
encoding = 'utf-8'
|
||||
|
||||
class NumberedCanvas(canvas.Canvas):
|
||||
def __init__(self, *args, **kwargs):
|
||||
canvas.Canvas.__init__(self, *args, **kwargs)
|
||||
self._codes = []
|
||||
self._flag=False
|
||||
self._pageCount=0
|
||||
self._currentPage =0
|
||||
self._pageCounter=0
|
||||
self.pages={}
|
||||
|
||||
def showPage(self):
|
||||
self._currentPage +=1
|
||||
if not self._flag:
|
||||
self._pageCount += 1
|
||||
else:
|
||||
self.pages.update({self._currentPage:self._pageCount})
|
||||
self._codes.append({'code': self._code, 'stack': self._codeStack})
|
||||
self._startPage()
|
||||
self._flag=False
|
||||
|
||||
def pageCount(self):
|
||||
if self.pages.get(self._pageCounter,False):
|
||||
self._pageNumber=0
|
||||
self._pageCounter +=1
|
||||
key=self._pageCounter
|
||||
if not self.pages.get(key,False):
|
||||
while not self.pages.get(key,False):
|
||||
key = key + 1
|
||||
self.setFont("Helvetica", 8)
|
||||
self.drawRightString((self._pagesize[0]-35), (self._pagesize[1]-43),
|
||||
"Page %(this)i of %(total)i" % {
|
||||
'this': self._pageNumber+1,
|
||||
'total': self.pages.get(key,False),
|
||||
}
|
||||
)
|
||||
|
||||
def save(self):
|
||||
"""add page info to each page (page x of y)"""
|
||||
# reset page counter
|
||||
self._pageNumber = 0
|
||||
for code in self._codes:
|
||||
self._code = code['code']
|
||||
self._codeStack = code['stack']
|
||||
self.pageCount()
|
||||
canvas.Canvas.showPage(self)
|
||||
# self.restoreState()
|
||||
self._doc.SaveToFile(self._filename, self)
|
||||
|
||||
class PageCount(platypus.Flowable):
|
||||
def draw(self):
|
||||
self.canv.beginForm("pageCount")
|
||||
@@ -403,6 +452,7 @@ class _rml_canvas(object):
|
||||
else:
|
||||
args['height'] = sy * args['width'] / sx
|
||||
self.canvas.drawImage(img, **args)
|
||||
# self.canvas._doc.SaveToFile(self.canvas._filename, self.canvas)
|
||||
|
||||
def _path(self, node):
|
||||
self.path = self.canvas.beginPath()
|
||||
@@ -762,14 +812,20 @@ class TinyDocTemplate(platypus.BaseDocTemplate):
|
||||
self.handle_frameBegin()
|
||||
def afterFlowable(self, flowable):
|
||||
if isinstance(flowable, PageReset):
|
||||
self.canv._pageCount=self.page
|
||||
self.page=0
|
||||
self.canv._flag=True
|
||||
self.canv._pageNumber = 0
|
||||
|
||||
class _rml_template(object):
|
||||
def __init__(self, localcontext, out, node, doc, images={}, path='.', title=None):
|
||||
if not localcontext:
|
||||
localcontext={'internal_header':True}
|
||||
self.localcontext = localcontext
|
||||
self.images= images
|
||||
self.path = path
|
||||
self.title = title
|
||||
|
||||
if not node.get('pageSize'):
|
||||
pageSize = (utils.unit_get('21cm'), utils.unit_get('29.7cm'))
|
||||
else:
|
||||
@@ -780,6 +836,7 @@ class _rml_template(object):
|
||||
self.page_templates = []
|
||||
self.styles = doc.styles
|
||||
self.doc = doc
|
||||
self.image=[]
|
||||
pts = node.findall('pageTemplate')
|
||||
for pt in pts:
|
||||
frames = []
|
||||
@@ -794,6 +851,7 @@ class _rml_template(object):
|
||||
except Exception: # FIXME: be even more specific, perhaps?
|
||||
gr=''
|
||||
if len(gr):
|
||||
# self.image=[ n for n in utils._child_get(gr[0], self) if n.tag=='image' or not self.localcontext]
|
||||
drw = _rml_draw(self.localcontext,gr[0], self.doc, images=images, path=self.path, title=self.title)
|
||||
self.page_templates.append( platypus.PageTemplate(frames=frames, onPage=drw.render, **utils.attr_get(pt, [], {'id':'str'}) ))
|
||||
else:
|
||||
@@ -802,6 +860,8 @@ class _rml_template(object):
|
||||
self.doc_tmpl.addPageTemplates(self.page_templates)
|
||||
|
||||
def render(self, node_stories):
|
||||
if self.localcontext and not self.localcontext.get('internal_header',False):
|
||||
del self.localcontext['internal_header']
|
||||
fis = []
|
||||
r = _rml_flowable(self.doc,self.localcontext, images=self.images, path=self.path, title=self.title)
|
||||
story_cnt = 0
|
||||
@@ -812,9 +872,12 @@ class _rml_template(object):
|
||||
# Reset Page Number with new story tag
|
||||
fis.append(PageReset())
|
||||
story_cnt += 1
|
||||
if self.localcontext:
|
||||
if self.localcontext and self.localcontext.get('internal_header',False):
|
||||
self.doc_tmpl.afterFlowable(fis)
|
||||
self.doc_tmpl.build(fis,canvasmaker=NumberedCanvas)
|
||||
else:
|
||||
fis.append(PageCount())
|
||||
self.doc_tmpl.build(fis)
|
||||
self.doc_tmpl.build(fis)
|
||||
|
||||
def parseNode(rml, localcontext = {},fout=None, images={}, path='.',title=None):
|
||||
node = etree.XML(rml)
|
||||
|
||||
@@ -42,6 +42,7 @@ from lxml import etree
|
||||
import copy
|
||||
import locale
|
||||
import traceback, sys
|
||||
import tools
|
||||
from tools.safe_eval import safe_eval as eval
|
||||
import logging
|
||||
|
||||
@@ -176,7 +177,7 @@ def attr_get(node, attrs, dict={}):
|
||||
for key in dict:
|
||||
if node.get(key):
|
||||
if dict[key]=='str':
|
||||
res[key] = str(node.get(key))
|
||||
res[key] = tools.ustr(node.get(key))
|
||||
elif dict[key]=='bool':
|
||||
res[key] = bool_get(node.get(key))
|
||||
elif dict[key]=='int':
|
||||
|
||||
@@ -364,12 +364,17 @@ class report_sxw(report_rml, preprocess.report):
|
||||
self.parser = parser
|
||||
self.header = header
|
||||
self.store = store
|
||||
self.internal_header=False
|
||||
if header=='internal' or header=='internal landscape':
|
||||
self.internal_header=True
|
||||
|
||||
def getObjects(self, cr, uid, ids, context):
|
||||
table_obj = pooler.get_pool(cr.dbname).get(self.table)
|
||||
return table_obj.browse(cr, uid, ids, list_class=browse_record_list, context=context, fields_process=_fields_process)
|
||||
|
||||
def create(self, cr, uid, ids, data, context=None):
|
||||
if self.internal_header:
|
||||
context.update({'internal_header':self.internal_header})
|
||||
pool = pooler.get_pool(cr.dbname)
|
||||
ir_obj = pool.get('ir.actions.report.xml')
|
||||
report_xml_ids = ir_obj.search(cr, uid,
|
||||
|
||||
Reference in New Issue
Block a user