Merge lp:~openerp-dev/openobject-server/6.0-opw-51167-ado into lp:openobject-server/6.0

Proposed by Amit Dodiya (OpenERP)
Status: Merged
Merged at revision: 3631
Proposed branch: lp:~openerp-dev/openobject-server/6.0-opw-51167-ado
Merge into: lp:openobject-server/6.0
Diff against target: 86 lines (+31/-9)
1 file modified
bin/report/render/rml2pdf/trml2pdf.py (+31/-9)
To merge this branch: bzr merge lp:~openerp-dev/openobject-server/6.0-opw-51167-ado
Reviewer Review Type Date Requested Status
Naresh(OpenERP) (community) Approve
Olivier Laurent (Open ERP) Pending
Xavier ALT Pending
Jean-Christophe VASSORT Pending
Review via email: mp+95160@code.launchpad.net

Description of the change

Hello,

"[FIX] pageCount tag is not working"

PageCount tag is not working properly, It always display 0.

Thanks,
Amit

To post a comment you must log in.
Revision history for this message
Naresh(OpenERP) (nch-openerp) :
review: Approve
Revision history for this message
Xavier ALT (dex-phx) wrote :

Hi,

I will change this MP to "Need Review" as latest commit by Jean-Christophe was causing infinite loop when trying to render document with "internal header".

I've reworked that original fix. The standard report now handle PageCount() by himself. PageReset() flowable or "<pageNumberReset/>" within story now simply flag the document as "to be resetted", and we really reset the page number at each page end.

Please give your opinion on this,

Regards,
Xavier

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'bin/report/render/rml2pdf/trml2pdf.py'
--- bin/report/render/rml2pdf/trml2pdf.py 2011-12-06 06:43:42 +0000
+++ bin/report/render/rml2pdf/trml2pdf.py 2012-04-23 08:57:19 +0000
@@ -115,15 +115,19 @@
115 self._doc.SaveToFile(self._filename, self)115 self._doc.SaveToFile(self._filename, self)
116116
117class PageCount(platypus.Flowable):117class PageCount(platypus.Flowable):
118 def __init__(self, story_count=0):
119 platypus.Flowable.__init__(self)
120 self.story_count = story_count
121
118 def draw(self):122 def draw(self):
119 self.canv.beginForm("pageCount")123 self.canv.beginForm("pageCount%d" % (self.story_count))
120 self.canv.setFont("Helvetica", utils.unit_get(str(8)))124 self.canv.setFont("Helvetica", utils.unit_get(str(8)))
121 self.canv.drawString(0, 0, str(self.canv.getPageNumber()))125 self.canv.drawString(0, 0, str(self.canv.getPageNumber()))
122 self.canv.endForm()126 self.canv.endForm()
123127
124class PageReset(platypus.Flowable):128class PageReset(platypus.Flowable):
125 def draw(self):129 def draw(self):
126 self.canv._pageNumber = 0130 self.canv._doPageReset = True
127131
128class _rml_styles(object,):132class _rml_styles(object,):
129 def __init__(self, nodes, localcontext):133 def __init__(self, nodes, localcontext):
@@ -335,7 +339,7 @@
335 if n.tag == 'pageCount':339 if n.tag == 'pageCount':
336 if x or y:340 if x or y:
337 self.canvas.translate(x,y)341 self.canvas.translate(x,y)
338 self.canvas.doForm('pageCount')342 self.canvas.doForm('pageCount%s' % (self.canvas._storyCount,))
339 if x or y:343 if x or y:
340 self.canvas.translate(-x,-y)344 self.canvas.translate(-x,-y)
341 if n.tag == 'pageNumber':345 if n.tag == 'pageNumber':
@@ -866,6 +870,13 @@
866 ActionFlowable.__init__(self,('frameEnd',resume))870 ActionFlowable.__init__(self,('frameEnd',resume))
867871
868class TinyDocTemplate(platypus.BaseDocTemplate):872class TinyDocTemplate(platypus.BaseDocTemplate):
873
874 def beforeDocument(self):
875 # Store some useful value directly inside canvas, so it's available
876 # on flowable drawing (needed for proper PageCount handling)
877 self.canv._doPageReset = False
878 self.canv._storyCount = 0
879
869 def ___handle_pageBegin(self):880 def ___handle_pageBegin(self):
870 self.page = self.page + 1881 self.page = self.page + 1
871 self.pageTemplate.beforeDrawPage(self.canv,self)882 self.pageTemplate.beforeDrawPage(self.canv,self)
@@ -881,12 +892,24 @@
881 self.frame = f892 self.frame = f
882 break893 break
883 self.handle_frameBegin()894 self.handle_frameBegin()
884 def afterFlowable(self, flowable):895
885 if isinstance(flowable, PageReset):896 def afterPage(self):
886 self.canv._pageCount=self.page897 if self.canv._doPageReset:
887 self.page=0898 # Following a <pageReset/> tag:
888 self.canv._flag=True899 # - we reset page number to 0
900 # - we add an new PageCount flowable (relative to the current
901 # story number), but not for NumeredCanvas at is handle page
902 # count itself)
903 # NOTE: _rml_template render() method add a PageReset flowable at end
904 # of each story, so we're sure to pass here at least once per story.
905 if not isinstance(self.canv, NumberedCanvas):
906 self.handle_flowable([ PageCount(story_count=self.canv._storyCount) ])
907 self.canv._pageCount = self.page
908 self.page = 0
909 self.canv._flag = True
889 self.canv._pageNumber = 0910 self.canv._pageNumber = 0
911 self.canv._doPageReset = False
912 self.canv._storyCount += 1
890913
891class _rml_template(object):914class _rml_template(object):
892 def __init__(self, localcontext, out, node, doc, images={}, path='.', title=None):915 def __init__(self, localcontext, out, node, doc, images={}, path='.', title=None):
@@ -947,7 +970,6 @@
947 self.doc_tmpl.afterFlowable(fis)970 self.doc_tmpl.afterFlowable(fis)
948 self.doc_tmpl.build(fis,canvasmaker=NumberedCanvas)971 self.doc_tmpl.build(fis,canvasmaker=NumberedCanvas)
949 else:972 else:
950 fis.append(PageCount())
951 self.doc_tmpl.build(fis)973 self.doc_tmpl.build(fis)
952974
953def parseNode(rml, localcontext=None,fout=None, images=None, path='.',title=None):975def parseNode(rml, localcontext=None,fout=None, images=None, path='.',title=None):