Merge lp:~nch-openerp/openobject-addons/addons_5stable into lp:openobject-addons/5.0

Proposed by Naresh(OpenERP)
Status: Merged
Merged at revision: not available
Proposed branch: lp:~nch-openerp/openobject-addons/addons_5stable
Merge into: lp:openobject-addons/5.0
Diff against target: None lines
To merge this branch: bzr merge lp:~nch-openerp/openobject-addons/addons_5stable
Reviewer Review Type Date Requested Status
OpenERP Core Team Pending
Review via email: mp+6465@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Naresh(OpenERP) (nch-openerp) wrote :

Bugfixes: Bugs related to reports on launchpad with new report engine

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'account/report/account_balance.rml'
2--- account/report/account_balance.rml 2009-04-14 09:06:55 +0000
3+++ account/report/account_balance.rml 2009-05-12 12:04:06 +0000
4@@ -57,9 +57,12 @@
5 <lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/>
6 </blockTableStyle>
7 <blockTableStyle id="Table2">
8+ <blockValign value="TOP"/>
9+ <blockAlignment value="RIGHT"/>
10 <lineStyle kind="LINEBELOW" colorName="#000000" start="0,0" stop="-1,0"/>
11- <blockValign value="TOP"/>
12- <blockAlignment value="RIGHT" start="2,1" stop="-1,-1"/>
13+ <lineStyle kind="LINEBELOW" colorName="#000000" start="0,1" stop="-1,1"/>
14+ <lineStyle kind="LINEBELOW" colorName="#000000" start="0,2" stop="-1,-1"/>
15+
16 </blockTableStyle>
17 <blockTableStyle id="Table3">
18 <blockAlignment value="LEFT"/>
19@@ -85,17 +88,18 @@
20 <initialize>
21 <paraStyle name="all" alignment="justify"/>
22 </initialize>
23- <paraStyle name="P1" fontName="Helvetica" fontSize="20.0" leading="25" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
24- <paraStyle name="P2" fontName="Helvetica" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
25- <paraStyle name="P3" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
26+ <paraStyle name="P1" fontName="Helvetica-Bold" fontSize="20.0" leading="25" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
27+ <paraStyle name="P2" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
28+ <paraStyle name="P3" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
29 <paraStyle name="P10" fontName="Helvetica" fontSize="8.0" leading="14" spaceBefore="0.0" spaceAfter="6.0" alignment="RIGHT"/>
30 <paraStyle name="P9" fontName="Helvetica-Bold" alignment="CENTER" fontSize="14.5" leftIndent="-5.0"/>
31 <paraStyle name="P9a" fontName="Helvetica-Bold" fontSize="9" leftIndent="0.0" alignment="LEFT"/>
32 <paraStyle name="P9b" fontName="Helvetica" fontSize="9" leftIndent="0.0" alignment="LEFT"/>
33 <paraStyle name="P9b" fontName="Helvetica" fontSize="8" leftIndent="-5.0" alignment="LEFT"/>
34- <paraStyle name="P12" fontName="Helvetica" fontSize="8.0" leading="14" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
35+ <paraStyle name="P12" fontName="Helvetica-Bold" fontSize="8.0" leading="14" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
36 <paraStyle name="P12a" fontName="Helvetica" fontSize="8.0" leading="14" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
37- <paraStyle name="P14" rightIndent="17.0" leftIndent="-0.0" fontName="Helvetica" fontSize="8.0" leading="10" spaceBefore="0.0" spaceAfter="6.0"/>
38+ <paraStyle name="P12b" fontName="Helvetica" fontSize="8.0" leading="14" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
39+ <paraStyle name="P14" rightIndent="17.0" leftIndent="-0.0" fontName="Helvetica-Bold" fontSize="8.0" leading="10" spaceBefore="0.0" spaceAfter="6.0"/>
40
41
42 <blockTableStyle id="TrLevel">
43@@ -122,7 +126,6 @@
44 fontSize="8.0" />
45 <paraStyle
46 name="Level2"
47-
48 fontName="Helvetica-Bold"
49 fontSize="8.0" />
50 <paraStyle name="Level1"
51@@ -158,7 +161,7 @@
52 <para style="P12a">Code</para>
53 </td>
54 <td>
55- <para style="P12">Account</para>
56+ <para style="P12b">Account</para>
57 </td>
58 <td>
59 <para style="P10">Debit</para>
60@@ -173,11 +176,11 @@
61 <tr>
62 <td><para style="P14">[[ repeatIn(lines(data['form']), 'a') ]]<i>[[ a['code'] or removeParentNode('tr') ]]</i></para></td>
63 <td>
64-
65 <para style="P14">
66+ <font color="white">[[ ...*(a['level']) ]]</font> [[ a['name'] ]]
67 <font>[[ (a['level']&lt;3 and setTag('tr','tr',{'style':'TrLevel'+str(a['level']), 'paraStyle':('Level'+str(a['level']))})) or removeParentNode('font') ]]</font>
68 <font>[[ (a['level']&gt;2 and setTag('tr','tr',{'style':'TrLevel', 'paraStyle':('Level')})) or removeParentNode('font') ]] </font>
69- <font color="white">[[ '...'*(a['level']) ]]</font> [[ a['name'] ]]</para>
70+ </para>
71 </td>
72 <td>
73 <para style="P3"><font>[[ a['type']=='view' and removeParentNode('font') ]][[ formatLang(a['debit']) ]]</font>
74@@ -194,4 +197,4 @@
75 </tr>
76 </blockTable>
77 </story>
78-</document>
79+</document>
80\ No newline at end of file
81
82=== modified file 'account_invoice_layout/report/report_account_invoice_layout.py'
83--- account_invoice_layout/report/report_account_invoice_layout.py 2009-04-06 14:35:41 +0000
84+++ account_invoice_layout/report/report_account_invoice_layout.py 2009-05-12 11:23:05 +0000
85@@ -1,7 +1,7 @@
86 # -*- encoding: utf-8 -*-
87 ##############################################################################
88 #
89-# OpenERP, Open Source Management Solution
90+# OpenERP, Open Source Management Solution
91 # Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
92 # $Id$
93 #
94@@ -23,79 +23,17 @@
95 import pooler
96 from report import report_sxw
97
98-parents = {
99- 'tr':1,
100- 'li':1,
101- 'story': 0,
102- 'section': 0
103- }
104-
105 class account_invoice_1(report_sxw.rml_parse):
106 def __init__(self, cr, uid, name, context):
107 super(account_invoice_1, self).__init__(cr, uid, name, context)
108 self.localcontext.update({
109 'time': time,
110 'invoice_lines': self.invoice_lines,
111- 'repeat_In':self.repeat_In,
112 })
113 self.context = context
114-
115- def repeat_In(self, lst, name, nodes_parent=False,td=False,width=[],value=[],type=[]):
116- self._node.data = ''
117- node = self._find_parent(self._node, nodes_parent or parents)
118- ns = node.nextSibling
119-
120- value=['tax_types','quantity','uos','price_unit','discount','price_subtotal','currency']
121- type=['string','string','string','string','string','string','string']
122- width=[62,38,29,67,53,53,27]
123- td=7
124-
125- tableFlag=0
126-
127- if not lst:
128- lst.append(1)
129- for ns in node.childNodes :
130- if tableFlag==1:
131- break
132- if ns and ns.nodeName!='#text' and ns.tagName=='blockTable' and td :
133- tableFlag=1
134-
135- width_str = ns._attrs['colWidths'].nodeValue
136- ns.removeAttribute('colWidths')
137- total_td = td * len(value)
138-
139- if not width:
140- for v in value:
141- width.append(30)
142- for v in range(len(value)):
143- width_str +=',%d'%width[v]
144-
145- ns.setAttribute('colWidths',width_str)
146-
147- child_list = ns.childNodes
148-
149- for child in child_list:
150- if child.nodeName=='tr':
151- lc = child.childNodes[1]
152-# for t in range(td):
153- i=0
154- for v in value:
155- t2="[[%s['type']=='text' and removeParentNode('tr')]]"%(name)
156- t1= "[[ %s['%s'] ]]"%(name,v)
157- t3="[[ %s['type']=='subtotal' and ( setTag('para','para',{'fontName':'Times-bold'})) ]]"%name
158- newnode = lc.cloneNode(1)
159-
160- newnode.childNodes[1].lastChild.data = t1 + t2 +t3
161-# newnode.childNodes[1].lastChild.data=[[ a['status']==1 and ( setTag('para','para',{'fontName':'Times-bold'})) ]]
162- child.appendChild(newnode)
163- newnode=False
164- i+=1
165-
166-
167- return super(account_invoice_1,self).repeatIn(lst, name, nodes_parent=False)
168+ self._node = None
169
170 def invoice_lines(self,invoice):
171-
172 result =[]
173 sub_total={}
174 info=[]
175@@ -107,7 +45,6 @@
176 for id in range(0,len(ids)):
177 info = self.pool.get('account.invoice.line').browse(self.cr, self.uid,ids[id], self.context.copy())
178 list_in_seq[info]=info.sequence
179-# invoice_list +=[info]
180 i=1
181 j=0
182 final=sorted(list_in_seq.items(), lambda x, y: cmp(x[1], y[1]))
183@@ -116,11 +53,9 @@
184 sum_flag[j]=-1
185 for entry in invoice_list:
186 res={}
187-
188 if entry.state=='article':
189 self.cr.execute('select tax_id from account_invoice_line_tax where invoice_line_id=%s', (entry.id,))
190 tax_ids=self.cr.fetchall()
191-
192 if tax_ids==[]:
193 res['tax_types']=''
194 else:
195@@ -187,14 +122,14 @@
196 res['price_subtotal']=''
197 res['currency']=''
198 elif entry.state=='line':
199- res['quantity']='____________'
200+ res['quantity']='_______________'
201 res['price_unit']='______________'
202 res['discount']='____________'
203- res['tax_types']='_________________'
204+ res['tax_types']='____________________'
205 res['uos']='_____'
206- res['name']='________________________________________'
207- res['price_subtotal']='_______________________'
208- res['currency']='_______'
209+ res['name']='_______________________________________________'
210+ res['price_subtotal']='____________'
211+ res['currency']='____'
212 elif entry.state=='break':
213 res['type']=entry.state
214 res['name']=entry.name
215
216=== modified file 'account_invoice_layout/report/report_account_invoice_layout.rml'
217--- account_invoice_layout/report/report_account_invoice_layout.rml 2009-04-06 14:35:41 +0000
218+++ account_invoice_layout/report/report_account_invoice_layout.rml 2009-05-12 12:04:06 +0000
219@@ -130,8 +130,7 @@
220 <font color="white"> </font>
221 </para>
222 <para style="P17">
223-<font face="Times-Roman">Document</font>
224-<font face="Times-Roman">:</font>
225+<font face="Times-Roman">Document:</font>
226 <font face="Times-Roman">[[o.name]]</font>
227 </para>
228 <para style="P17">
229@@ -143,7 +142,7 @@
230 <para style="Standard">
231 <font color="white"> </font>
232 </para>
233-<blockTable colWidths="198.0,62.0,67.0,67.0,53.0,80.0" style="Tableau6">
234+<blockTable colWidths="216.0,62.0,62.0,62.0,51.0,74.0" style="Tableau6">
235 <tr>
236 <td>
237 <para style="P3">Description</para>
238@@ -166,64 +165,80 @@
239 </tr>
240 </blockTable>
241 <section>
242-<para style="P20">[[ repeat_In(invoice_lines(o), 'a') ]]</para>
243-<blockTable colWidths="0.0,198.0" style="Tableau7">
244-<tr>
245-<td>
246-<para style="P8">[[ a['type']=='text' and removeParentNode('tr')]]</para>
247-</td>
248-<td>
249-<para style="Table Contents"><font>[[ a['type']=='title' and ( setTag('font','font',{'size':'11.5'})) ]][[ (a['type']=='title' or a['type']=='subtotal') and ( setTag('font','font',{'name':'Times-bold'})) ]][[ a['type']=='text' and removeParentNode('font') or a['name'] ]]</font></para>
250-</td>
251-</tr>
252-</blockTable>
253-<blockTable colWidths="447.0,80.0" style="Tableau8">
254-<tr>
255-<td>
256-<para style="Table Contents">[[ a['type']=='text' and a['name'] or removeParentNode('table') ]]</para>
257-</td>
258-<td>
259-<para style="P8">[[ a['type']=='text' and '' or removeParentNode('table') ]]</para>
260-</td>
261-</tr>
262-</blockTable>
263-<blockTable colWidths="28.0,499.0" style="Tableau8">
264-<tr>
265-<td>
266-<para style="P21">[[ a['note']=='' and removeParentNode('table') ]][[ repeatIn(( a['note'] and a['note'].splitlines()) or [], 'note') ]]</para>
267-</td>
268-<td>
269-<para style="P9">[[ note or removeParentNode('table') ]]</para>
270-</td>
271-</tr>
272-</blockTable>
273-<pageBreak>[[ a['type']!='break' and removeParentNode('pageBreak')]]</pageBreak>
274-<blockTable colWidths="198.0,62.0,67.0,67.0,53.0,80.0" style="Tableau6">
275-<tr>
276-<td>
277-<para style="P3">Description [[ a['type']!='break' and removeParentNode('tr')]]</para>
278-</td>
279-<td>
280-<para style="P4">Taxes</para>
281-</td>
282-<td>
283-<para style="P4">Quantity</para>
284-</td>
285-<td>
286-<para style="P4">Unit Price</para>
287-</td>
288-<td>
289-<para style="P4">Disc. (%)</para>
290-</td>
291-<td>
292-<para style="P4">Price</para>
293-</td>
294-</tr>
295-</blockTable>
296+ <para style="P20">[[ repeatIn(invoice_lines(o), 'a') ]]</para>
297+ <blockTable colWidths="0.0,216.0,62,38,29,67,53,53" style="Tableau7">
298+ <tr>
299+ <td>
300+ <para style="P8">[[ a['type']=='text' and removeParentNode('blockTable')]]</para>
301+ </td>
302+ <td>
303+ <para style="Table Contents">[[ (a['type']=='title' or a['type']=='subtotal') and ( setTag('para','para',{'fontName':'Times-bold'})) ]][[ a['name'] ]]</para>
304+ </td>
305+ <td>
306+ <para style="Table Contents">[[ a['type']=='subtotal' and ( setTag('para','para',{'fontName':'Times-bold'})) ]][[ a['tax_types'] ]]</para>
307+ </td>
308+ <td>
309+ <para style="Table Contents">[[ a['type']=='subtotal' and ( setTag('para','para',{'fontName':'Times-bold'})) ]][[ a['quantity'] ]][[ a['uos'] ]]</para>
310+ </td>
311+ <td>
312+ <para><font color="white"></font></para>
313+ </td>
314+ <td>
315+ <para style="Table Contents">[[ a['type']=='subtotal' and ( setTag('para','para',{'fontName':'Times-bold'})) ]][[ a['price_unit'] ]]</para>
316+ </td>
317+ <td>
318+ <para style="Table Contents">[[ a['type']=='subtotal' and ( setTag('para','para',{'fontName':'Times-bold'})) ]][[ a['discount'] ]]</para>
319+ </td>
320+ <td>
321+ <para style="Table Contents">[[ a['type']=='subtotal' and ( setTag('para','para',{'fontName':'Times-bold'})) ]][[ a['price_subtotal'] ]][[ a['currency'] ]]</para>
322+ </td>
323+ </tr>
324+ </blockTable>
325+ <blockTable colWidths="453.0,74.0" style="Tableau8">
326+ <tr>
327+ <td>
328+ <para style="Table Contents">[[ a['type']=='text' and a['name'] or removeParentNode('blockTable') ]]</para>
329+ </td>
330+ <td>
331+ <para style="P8">[[ a['type']=='text' and '' or removeParentNode('blockTable') ]]</para>
332+ </td>
333+ </tr>
334+ </blockTable>
335+ <blockTable colWidths="28.0,499.0" style="Tableau8">
336+ <tr>
337+ <td>
338+ <para style="P21"><font>[[ a['note']=='' and removeParentNode('blockTable') ]]</font><font>[[ repeatIn(( a['note'] and a['note'].splitlines()) or [], 'note') ]]</font></para>
339+ </td>
340+ <td>
341+ <para style="P9">[[ note or removeParentNode('blockTable') ]]</para>
342+ </td>
343+ </tr>
344+ </blockTable>
345+ <pageBreak>[[ a['type']!='break' and removeParentNode('pageBreak')]]</pageBreak>
346+ <blockTable colWidths="216.0,62.0,62.0,62.0,51.0,74.0" style="Tableau6">
347+ <tr>
348+ <td>
349+ <para style="P3">Description [[ a['type']!='break' and removeParentNode('blockTable')]]</para>
350+ </td>
351+ <td>
352+ <para style="P4">Taxes</para>
353+ </td>
354+ <td>
355+ <para style="P4">Quantity</para>
356+ </td>
357+ <td>
358+ <para style="P4">Unit Price</para>
359+ </td>
360+ <td>
361+ <para style="P4">Disc. (%)</para>
362+ </td>
363+ <td>
364+ <para style="P4">Price</para>
365+ </td>
366+ </tr>
367+ </blockTable>
368 </section>
369-<para style="Standard">
370-<font color="white"> </font>
371-</para>
372+
373 <blockTable colWidths="215.0,313.0" style="Tableau3">
374 <tr>
375 <td>
376@@ -281,16 +296,11 @@
377 </td>
378 </tr>
379 </blockTable>
380-<para style="Table Contents">
381-<font color="white"> </font>
382-</para>
383+
384 </td>
385 </tr>
386 </blockTable>
387 <para style="P19">[[ format(o.comment) or '' ]]</para>
388-<para style="P19">
389-<font color="white"> </font>
390-</para>
391 <para style="P19">[[ format(o.payment_term and o.payment_term.note) or '' ]]</para>
392 </story>
393 </document>
394
395=== modified file 'account_invoice_layout/report/report_account_invoice_layout.sxw'
396Binary files account_invoice_layout/report/report_account_invoice_layout.sxw 2009-01-08 12:35:15 +0000 and account_invoice_layout/report/report_account_invoice_layout.sxw 2009-05-12 11:23:05 +0000 differ
397=== modified file 'account_invoice_layout/report/special_message_invoice.py'
398--- account_invoice_layout/report/special_message_invoice.py 2009-01-04 22:12:50 +0000
399+++ account_invoice_layout/report/special_message_invoice.py 2009-05-12 12:17:56 +0000
400@@ -1,7 +1,7 @@
401 # -*- encoding: utf-8 -*-
402 ##############################################################################
403 #
404-# OpenERP, Open Source Management Solution
405+# OpenERP, Open Source Management Solution
406 # Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
407 # $Id$
408 #
409@@ -23,12 +23,6 @@
410 import time
411 from report import report_sxw
412 import pooler
413-parents = {
414- 'tr':1,
415- 'li':1,
416- 'story': 0,
417- 'section': 0
418- }
419
420 class account_invoice_with_message(report_sxw.rml_parse):
421 def __init__(self, cr, uid, name, context):
422@@ -37,67 +31,13 @@
423 'time': time,
424 'spcl_msg': self.spcl_msg,
425 'invoice_lines': self.invoice_lines,
426- 'repeat_In':self.repeat_In,
427
428 })
429 self.context = context
430
431- def repeat_In(self, lst, name, nodes_parent=False,td=False,width=[],value=[],type=[]):
432- self._node.data = ''
433- node = self._find_parent(self._node, nodes_parent or parents)
434- ns = node.nextSibling
435-
436- value=['tax_types','quantity','uos','price_unit','discount','price_subtotal','currency']
437- type=['string','string','string','string','string','string','string']
438- width=[62,42,20,62,51,50,24]
439- td=7
440-
441- tableFlag=0
442-
443- if not lst:
444- lst.append(1)
445- for ns in node.childNodes :
446- if tableFlag==1:
447- break
448- if ns and ns.nodeName!='#text' and ns.tagName=='blockTable' and td :
449- tableFlag=1
450-
451- width_str = ns._attrs['colWidths'].nodeValue
452- ns.removeAttribute('colWidths')
453- total_td = td * len(value)
454-
455- if not width:
456- for v in value:
457- width.append(30)
458- for v in range(len(value)):
459- width_str +=',%d'%width[v]
460-
461- ns.setAttribute('colWidths',width_str)
462-
463- child_list = ns.childNodes
464-
465- for child in child_list:
466- if child.nodeName=='tr':
467- lc = child.childNodes[1]
468- # for t in range(td):
469- i=0
470- for v in value:
471- t2="[[%s['type']=='text' and removeParentNode('tr')]]"%(name)
472- t1= "[[ %s['%s'] ]]"%(name,v)
473- t3="[[ %s['type']=='subtotal' and ( setTag('para','para',{'fontName':'Times-bold'})) ]]"%name
474- newnode = lc.cloneNode(1)
475-
476- newnode.childNodes[1].lastChild.data = t1 + t2 +t3
477- # newnode.childNodes[1].lastChild.data=[[ a['status']==1 and ( setTag('para','para',{'fontName':'Times-bold'})) ]]
478- child.appendChild(newnode)
479- newnode=False
480- i+=1
481-
482- return super(account_invoice_with_message,self).repeatIn(lst, name, nodes_parent=False)
483-
484 def spcl_msg(self, form):
485 account_msg_data = pooler.get_pool(self.cr.dbname).get('notify.message').browse(self.cr, self.uid, form['message'])
486- msg = account_msg_data.msg
487+ msg = account_msg_data.msg
488 return msg
489
490
491@@ -113,7 +53,6 @@
492 for id in range(0,len(ids)):
493 info = self.pool.get('account.invoice.line').browse(self.cr, self.uid,ids[id], self.context.copy())
494 list_in_seq[info]=info.sequence
495- # invoice_list +=[info]
496 i=1
497 j=0
498 final=sorted(list_in_seq.items(), lambda x, y: cmp(x[1], y[1]))
499@@ -198,9 +137,9 @@
500 res['discount']='____________'
501 res['tax_types']='_________________'
502 res['uos']='_____'
503- res['name']='________________________________________'
504- res['price_subtotal']='_______________________'
505- res['currency']='_______'
506+ res['name']='_____________________________________________'
507+ res['price_subtotal']='_____________________'
508+ res['currency']='_'
509 elif entry.state=='break':
510 res['type']=entry.state
511 res['name']=entry.name
512
513=== modified file 'account_invoice_layout/report/special_message_invoice.rml'
514--- account_invoice_layout/report/special_message_invoice.rml 2009-01-08 12:35:15 +0000
515+++ account_invoice_layout/report/special_message_invoice.rml 2009-05-12 12:17:56 +0000
516@@ -130,8 +130,7 @@
517 <font color="white"> </font>
518 </para>
519 <para style="P17">
520-<font face="Times-Roman">Document</font>
521-<font face="Times-Roman">:</font>
522+<font face="Times-Roman">Document:</font>
523 <font face="Times-Roman">[[o.name]]</font>
524 </para>
525 <para style="P17">
526@@ -166,64 +165,80 @@
527 </tr>
528 </blockTable>
529 <section>
530-<para style="P20">[[ repeat_In(invoice_lines(o), 'a') ]]</para>
531-<blockTable colWidths="0.0,216.0" style="Tableau7">
532-<tr>
533-<td>
534-<para style="P8">[[ a['type']=='text' and removeParentNode('tr')]]</para>
535-</td>
536-<td>
537-<para style="Table Contents"><font>[[ a['type']=='title' and ( setTag('font','font',{'size':'11.5'})) ]][[ (a['type']=='title' or a['type']=='subtotal') and ( setTag('font','font',{'name':'Times-bold'})) ]][[ a['type']=='text' and removeParentNode('font') or a['name'] ]]</font></para>
538-</td>
539-</tr>
540-</blockTable>
541-<blockTable colWidths="453.0,74.0" style="Tableau8">
542-<tr>
543-<td>
544-<para style="Table Contents">[[ a['type']=='text' and a['name'] or removeParentNode('table') ]]</para>
545-</td>
546-<td>
547-<para style="P8">[[ a['type']=='text' and '' or removeParentNode('table') ]]</para>
548-</td>
549-</tr>
550-</blockTable>
551-<blockTable colWidths="28.0,499.0" style="Tableau8">
552-<tr>
553-<td>
554-<para style="P21">[[ a['note']=='' and removeParentNode('table') ]][[ repeatIn(( a['note'] and a['note'].splitlines()) or [], 'note') ]]</para>
555-</td>
556-<td>
557-<para style="P9">[[ note or removeParentNode('table') ]]</para>
558-</td>
559-</tr>
560-</blockTable>
561-<pageBreak>[[ a['type']!='break' and removeParentNode('pageBreak')]]</pageBreak>
562-<blockTable colWidths="216.0,62.0,62.0,62.0,51.0,74.0" style="Tableau6">
563-<tr>
564-<td>
565-<para style="P3">Description [[ a['type']!='break' and removeParentNode('tr')]]</para>
566-</td>
567-<td>
568-<para style="P4">Taxes</para>
569-</td>
570-<td>
571-<para style="P4">Quantity</para>
572-</td>
573-<td>
574-<para style="P4">Unit Price</para>
575-</td>
576-<td>
577-<para style="P4">Disc. (%)</para>
578-</td>
579-<td>
580-<para style="P4">Price</para>
581-</td>
582-</tr>
583-</blockTable>
584+ <para style="P20">[[ repeatIn(invoice_lines(o), 'a') ]]</para>
585+ <blockTable colWidths="0.0,216.0,62,38,29,67,53,53" style="Tableau7">
586+ <tr>
587+ <td>
588+ <para style="P8">[[ a['type']=='text' and removeParentNode('blockTable')]]</para>
589+ </td>
590+ <td>
591+ <para style="Table Contents">[[ (a['type']=='title' or a['type']=='subtotal') and ( setTag('para','para',{'fontName':'Times-bold'})) ]][[ a['name'] ]]</para>
592+ </td>
593+ <td>
594+ <para style="Table Contents">[[ a['type']=='subtotal' and ( setTag('para','para',{'fontName':'Times-bold'})) ]][[ a['tax_types'] ]]</para>
595+ </td>
596+ <td>
597+ <para style="Table Contents">[[ a['type']=='subtotal' and ( setTag('para','para',{'fontName':'Times-bold'})) ]][[ a['quantity'] ]][[ a['uos'] ]]</para>
598+ </td>
599+ <td>
600+ <para><font color="white"></font></para>
601+ </td>
602+ <td>
603+ <para style="Table Contents">[[ a['type']=='subtotal' and ( setTag('para','para',{'fontName':'Times-bold'})) ]][[ a['price_unit'] ]]</para>
604+ </td>
605+ <td>
606+ <para style="Table Contents">[[ a['type']=='subtotal' and ( setTag('para','para',{'fontName':'Times-bold'})) ]][[ a['discount'] ]]</para>
607+ </td>
608+ <td>
609+ <para style="Table Contents">[[ a['type']=='subtotal' and ( setTag('para','para',{'fontName':'Times-bold'})) ]][[ a['price_subtotal'] ]][[ a['currency'] ]]</para>
610+ </td>
611+ </tr>
612+ </blockTable>
613+ <blockTable colWidths="453.0,74.0" style="Tableau8">
614+ <tr>
615+ <td>
616+ <para style="Table Contents">[[ a['type']=='text' and a['name'] or removeParentNode('blockTable') ]]</para>
617+ </td>
618+ <td>
619+ <para style="P8">[[ a['type']=='text' and '' or removeParentNode('blockTable') ]]</para>
620+ </td>
621+ </tr>
622+ </blockTable>
623+ <blockTable colWidths="28.0,499.0" style="Tableau8">
624+ <tr>
625+ <td>
626+ <para style="P21"><font>[[ a['note']=='' and removeParentNode('blockTable') ]]</font><font>[[ repeatIn(( a['note'] and a['note'].splitlines()) or [], 'note') ]]</font></para>
627+ </td>
628+ <td>
629+ <para style="P9">[[ note or removeParentNode('blockTable') ]]</para>
630+ </td>
631+ </tr>
632+ </blockTable>
633+ <pageBreak>[[ a['type']!='break' and removeParentNode('pageBreak')]]</pageBreak>
634+ <blockTable colWidths="216.0,62.0,62.0,62.0,51.0,74.0" style="Tableau6">
635+ <tr>
636+ <td>
637+ <para style="P3">Description [[ a['type']!='break' and removeParentNode('blockTable')]]</para>
638+ </td>
639+ <td>
640+ <para style="P4">Taxes</para>
641+ </td>
642+ <td>
643+ <para style="P4">Quantity</para>
644+ </td>
645+ <td>
646+ <para style="P4">Unit Price</para>
647+ </td>
648+ <td>
649+ <para style="P4">Disc. (%)</para>
650+ </td>
651+ <td>
652+ <para style="P4">Price</para>
653+ </td>
654+ </tr>
655+ </blockTable>
656 </section>
657-<para style="Standard">
658-<font color="white"> </font>
659-</para>
660+
661 <blockTable colWidths="215.0,313.0" style="Tableau3">
662 <tr>
663 <td>
664@@ -281,16 +296,11 @@
665 </td>
666 </tr>
667 </blockTable>
668-<para style="Table Contents">
669-<font color="white"> </font>
670-</para>
671+
672 </td>
673 </tr>
674 </blockTable>
675 <para style="P19">[[ format(o.comment) or '' ]]</para>
676-<para style="P19">
677-<font color="white"> </font>
678-</para>
679 <para style="P19">[[ format(o.payment_term and o.payment_term.note) or '' ]]</para>
680 <section>
681 <para style="P19">[[ repeatIn((spcl_msg(data['form']) and spcl_msg(data['form']).splitlines()) or [], 'note') ]]</para>