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
1=== modified file 'bin/report/render/rml2pdf/trml2pdf.py'
2--- bin/report/render/rml2pdf/trml2pdf.py 2011-12-06 06:43:42 +0000
3+++ bin/report/render/rml2pdf/trml2pdf.py 2012-04-23 08:57:19 +0000
4@@ -115,15 +115,19 @@
5 self._doc.SaveToFile(self._filename, self)
6
7 class PageCount(platypus.Flowable):
8+ def __init__(self, story_count=0):
9+ platypus.Flowable.__init__(self)
10+ self.story_count = story_count
11+
12 def draw(self):
13- self.canv.beginForm("pageCount")
14+ self.canv.beginForm("pageCount%d" % (self.story_count))
15 self.canv.setFont("Helvetica", utils.unit_get(str(8)))
16 self.canv.drawString(0, 0, str(self.canv.getPageNumber()))
17 self.canv.endForm()
18
19 class PageReset(platypus.Flowable):
20 def draw(self):
21- self.canv._pageNumber = 0
22+ self.canv._doPageReset = True
23
24 class _rml_styles(object,):
25 def __init__(self, nodes, localcontext):
26@@ -335,7 +339,7 @@
27 if n.tag == 'pageCount':
28 if x or y:
29 self.canvas.translate(x,y)
30- self.canvas.doForm('pageCount')
31+ self.canvas.doForm('pageCount%s' % (self.canvas._storyCount,))
32 if x or y:
33 self.canvas.translate(-x,-y)
34 if n.tag == 'pageNumber':
35@@ -866,6 +870,13 @@
36 ActionFlowable.__init__(self,('frameEnd',resume))
37
38 class TinyDocTemplate(platypus.BaseDocTemplate):
39+
40+ def beforeDocument(self):
41+ # Store some useful value directly inside canvas, so it's available
42+ # on flowable drawing (needed for proper PageCount handling)
43+ self.canv._doPageReset = False
44+ self.canv._storyCount = 0
45+
46 def ___handle_pageBegin(self):
47 self.page = self.page + 1
48 self.pageTemplate.beforeDrawPage(self.canv,self)
49@@ -881,12 +892,24 @@
50 self.frame = f
51 break
52 self.handle_frameBegin()
53- def afterFlowable(self, flowable):
54- if isinstance(flowable, PageReset):
55- self.canv._pageCount=self.page
56- self.page=0
57- self.canv._flag=True
58+
59+ def afterPage(self):
60+ if self.canv._doPageReset:
61+ # Following a <pageReset/> tag:
62+ # - we reset page number to 0
63+ # - we add an new PageCount flowable (relative to the current
64+ # story number), but not for NumeredCanvas at is handle page
65+ # count itself)
66+ # NOTE: _rml_template render() method add a PageReset flowable at end
67+ # of each story, so we're sure to pass here at least once per story.
68+ if not isinstance(self.canv, NumberedCanvas):
69+ self.handle_flowable([ PageCount(story_count=self.canv._storyCount) ])
70+ self.canv._pageCount = self.page
71+ self.page = 0
72+ self.canv._flag = True
73 self.canv._pageNumber = 0
74+ self.canv._doPageReset = False
75+ self.canv._storyCount += 1
76
77 class _rml_template(object):
78 def __init__(self, localcontext, out, node, doc, images={}, path='.', title=None):
79@@ -947,7 +970,6 @@
80 self.doc_tmpl.afterFlowable(fis)
81 self.doc_tmpl.build(fis,canvasmaker=NumberedCanvas)
82 else:
83- fis.append(PageCount())
84 self.doc_tmpl.build(fis)
85
86 def parseNode(rml, localcontext=None,fout=None, images=None, path='.',title=None):