Merge lp:~openerp-dev/openobject-addons/trunk-bug-722832-new-psi into lp:openobject-addons

Proposed by Purnendu Singh (OpenERP)
Status: Rejected
Rejected by: qdp (OpenERP)
Proposed branch: lp:~openerp-dev/openobject-addons/trunk-bug-722832-new-psi
Merge into: lp:openobject-addons
Diff against target: 260 lines (+78/-68)
3 files modified
account/report/account_balance_sheet.py (+23/-17)
account/report/account_balance_sheet.rml (+27/-24)
account/report/account_balance_sheet_horizontal.rml (+28/-27)
To merge this branch: bzr merge lp:~openerp-dev/openobject-addons/trunk-bug-722832-new-psi
Reviewer Review Type Date Requested Status
Mustufa Rangwala (Open ERP) (community) Approve
qdp (OpenERP) Pending
Review via email: mp+77289@code.launchpad.net

Description of the change

Hello,

fixes:
      https://bugs.launchpad.net/openobject-addons/+bug/722832
         Balance Sheet Report - Overall balance calculation error

1) Balance sheet report imporovements:
     a) In case of Net Profit set amount as negative to avoid any confusion.
     b) Change in the logic of sum_dr() and sum_cr() methods to get correct output in both case (Net profit as well as Net Loss), previously in case of Loss we were getting wrong total on Asset side.
2) instead of account.level, we must count the number of parents of the account that are displayed on teh report and use that to make the layout.

Thanks,
Purnendu Singh

To post a comment you must log in.
Revision history for this message
Mustufa Rangwala (Open ERP) (mra-tinyerp) :
review: Approve
Revision history for this message
qdp (OpenERP) (qdp) wrote :

as explained in the bug report, i reject this merge proposal as we don't want to waste time on a feature that will soon be replaced totally.

thanks

Unmerged revisions

5235. By Purnendu Singh (OpenERP)

[FIX] account: Balance Sheet Report - Overall balance calculation error

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'account/report/account_balance_sheet.py'
2--- account/report/account_balance_sheet.py 2011-09-21 01:35:11 +0000
3+++ account/report/account_balance_sheet.py 2011-09-28 07:12:57 +0000
4@@ -44,8 +44,8 @@
5 'get_currency': self._get_currency,
6 'sum_dr': self.sum_dr,
7 'sum_cr': self.sum_cr,
8- 'get_data':self.get_data,
9- 'get_pl_balance':self.get_pl_balance,
10+ 'get_data': self.get_data,
11+ 'get_pl_balance': self.get_pl_balance,
12 'get_fiscalyear': self._get_fiscalyear,
13 'get_account': self._get_account,
14 'get_start_period': self.get_start_period,
15@@ -53,9 +53,9 @@
16 'get_sortby': self._get_sortby,
17 'get_filter': self._get_filter,
18 'get_journal': self._get_journal,
19- 'get_start_date':self._get_start_date,
20- 'get_end_date':self._get_end_date,
21- 'get_company':self._get_company,
22+ 'get_start_date': self._get_start_date,
23+ 'get_end_date': self._get_end_date,
24+ 'get_company': self._get_company,
25 'get_target_move': self._get_target_move,
26 })
27 self.context = context
28@@ -68,13 +68,10 @@
29 return super(report_balancesheet_horizontal, self).set_context(objects, data, new_ids, report_type=report_type)
30
31 def sum_dr(self):
32- if self.res_bl['type'] == _('Net Profit'):
33- self.result_sum_dr += self.res_bl['balance']*-1
34+ self.result_sum_dr += self.res_bl['balance']
35 return self.result_sum_dr
36
37 def sum_cr(self):
38- if self.res_bl['type'] == _('Net Loss'):
39- self.result_sum_cr += self.res_bl['balance']
40 return self.result_sum_cr
41
42 def get_pl_balance(self):
43@@ -119,23 +116,32 @@
44
45 if self.res_bl['type'] == _('Net Profit'):
46 self.res_bl['type'] = _('Net Profit')
47+ self.res_bl['balance'] = -self.res_bl['balance']
48 else:
49 self.res_bl['type'] = _('Net Loss')
50 pl_dict = {
51 'code': self.res_bl['type'],
52 'name': self.res_bl['type'],
53+ 'type': self.res_bl['type'],
54 'level': False,
55- 'balance':self.res_bl['balance'],
56+ 'balance': self.res_bl['balance'],
57 }
58 for typ in types:
59 accounts_temp = []
60 for account in accounts:
61 if (account.user_type.report_type) and (account.user_type.report_type == typ):
62+ level = 0
63+ def _compute_level(account, level):
64+ if account.parent_id:
65+ if not account.parent_id.user_type.report_type == 'none':
66+ level += 1
67+ level = _compute_level(account.parent_id, level)
68+ return level
69 account_dict = {
70 'id': account.id,
71 'code': account.code,
72 'name': account.name,
73- 'level': account.level,
74+ 'level': _compute_level(account, level),
75 'balance': account.balance != 0 and account.balance * account.user_type.sign or account.balance,
76 'type': account.type,
77 }
78@@ -152,8 +158,8 @@
79 accounts_temp.append(account_dict)
80 else:
81 accounts_temp.append(account_dict)
82- if account.id == data['form']['reserve_account_id']:
83- pl_dict['level'] = account['level'] + 1
84+ if account.id == data['form']['reserve_account_id'][0]:
85+ pl_dict['level'] = 0
86 accounts_temp.append(pl_dict)
87
88 self.result[typ] = accounts_temp
89@@ -183,12 +189,12 @@
90 'code': '',
91 'name': '',
92 'level': False,
93- 'balance':False,
94+ 'balance': False,
95 'type1': cal_list['asset'][i]['type'],
96 'code1': cal_list['asset'][i]['code'],
97 'name1': cal_list['asset'][i]['name'],
98 'level1': cal_list['asset'][i]['level'],
99- 'balance1':cal_list['asset'][i]['balance'],
100+ 'balance1': cal_list['asset'][i]['balance'],
101 }
102 self.result_temp.append(temp)
103 if i < len(cal_list['liability']):
104@@ -197,12 +203,12 @@
105 'code': cal_list['liability'][i]['code'],
106 'name': cal_list['liability'][i]['name'],
107 'level': cal_list['liability'][i]['level'],
108- 'balance':cal_list['liability'][i]['balance'],
109+ 'balance': cal_list['liability'][i]['balance'],
110 'type1': '',
111 'code1': '',
112 'name1': '',
113 'level1': False,
114- 'balance1':False,
115+ 'balance1': False,
116 }
117 self.result_temp.append(temp)
118 return None
119
120=== modified file 'account/report/account_balance_sheet.rml'
121--- account/report/account_balance_sheet.rml 2011-09-22 08:58:47 +0000
122+++ account/report/account_balance_sheet.rml 2011-09-28 07:12:57 +0000
123@@ -124,20 +124,21 @@
124 <paraStyle name="terp_default_Right_9_Bold" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
125 <paraStyle name="terp_default_2" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
126
127- <paraStyle name="terp_level_1_code" fontName="Helvetica-Bold" fontSize="9.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
128- <paraStyle name="terp_level_1_name" fontName="Helvetica-Bold" fontSize="9.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
129- <paraStyle name="terp_level_1_balance" fontName="Helvetica-Bold" fontSize="9.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
130- <paraStyle name="terp_level_2_code" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
131- <paraStyle name="terp_level_2_name" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="10.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
132- <paraStyle name="terp_level_2_balance" fontName="Helvetica-Bold" fontSize="8.0" leftIndent=".0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
133- <paraStyle name="terp_level_3_code" fontName="Helvetica" fontSize="8.0" leftIndent="0.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
134- <paraStyle name="terp_level_3_code_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
135- <paraStyle name="terp_level_3_name" fontName="Helvetica" fontSize="8.0" leftIndent="20.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
136- <paraStyle name="terp_level_3_name_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="20.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
137- <paraStyle name="terp_level_3_balance" fontName="Helvetica" fontSize="8.0" leftIndent="0.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
138- <paraStyle name="terp_level_3_balance_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
139- <paraStyle name="terp_level_4_name" fontName="Helvetica" fontSize="8.0" leftIndent="30.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
140- <paraStyle name="terp_level_4_name_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="30.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
141+ <paraStyle name="terp_level_0_code" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
142+ <paraStyle name="terp_level_0_name" fontName="Helvetica" fontSize="8.0" leftIndent="10.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
143+ <paraStyle name="terp_level_0_name_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="10.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
144+ <paraStyle name="terp_level_0_balance" fontName="Helvetica" fontSize="8.0" leftIndent="0.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
145+ <paraStyle name="terp_level_0_balance_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
146+ <paraStyle name="terp_level_1_code" fontName="Helvetica" fontSize="8.0" leftIndent="0.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
147+ <paraStyle name="terp_level_1_code_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
148+ <paraStyle name="terp_level_1_name" fontName="Helvetica" fontSize="8.0" leftIndent="20.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
149+ <paraStyle name="terp_level_1_name_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="20.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
150+ <paraStyle name="terp_level_1_balance" fontName="Helvetica" fontSize="8.0" leftIndent="0.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
151+ <paraStyle name="terp_level_1_balance_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
152+ <paraStyle name="terp_level_2_name" fontName="Helvetica" fontSize="8.0" leftIndent="30.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
153+ <paraStyle name="terp_level_2_name_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="30.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
154+ <paraStyle name="terp_level_3_name" fontName="Helvetica" fontSize="8.0" leftIndent="40.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
155+ <paraStyle name="terp_level_3_name_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="40.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
156
157 <blockTableStyle id="Table1">
158 <blockTopPadding start="0,0" stop="-1,0" length="15"/>
159@@ -237,11 +238,12 @@
160 </tr>
161 <tr style="Table3">
162 [[ repeatIn(get_lines_another('asset'),'a' ) ]]
163- [[ setTag('tr','tr',{'style': 'Table'+str(min(3,a['level']))}) ]]
164- <td><para style="terp_level_3_code">[[ (a['type'] =='view' and a['level'] &gt;= 3) and setTag('para','para',{'style': 'terp_level_3_code_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_code'}) ]]<i>[[ a['code'] ]]</i></para></td>
165- <td><para style="terp_level_3_name">[[ (a['type'] =='view' and a['level'] &gt;= 3) and setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_name_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(4,a['level']))+'_name'}) ]][[ a['name'] ]]</para></td>
166- <td>[[ (a['level'] &lt;&gt;2) or removeParentNode('td') ]]<para style="terp_level_3_balance">[[ (a['type'] =='view' and a['level'] &gt;= 3) and setTag('para','para',{'style': 'terp_level_3_balance_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_balance'}) ]][[ formatLang(a['balance'], currency_obj = company.currency_id) ]]</para></td>
167- <td>[[ a['level'] == 2 or removeParentNode('td') ]]<para style="terp_level_2_balance"><u>[[ formatLang(a['balance'], currency_obj = company.currency_id) ]]</u></para></td>
168+ [[ (a['type'] =='view') and setTag('tr','tr',{'style': 'Table'+str(min(3,a['level']+2))}) or setTag('tr','tr',{'style': 'Table3'}) ]]
169+ <td><para style="terp_level_0_code">[[ (a['type'] =='view') and setTag('para','para',{'style': 'terp_level_0_code'}) or setTag('para','para',{'style': 'terp_level_1_code'}) ]]<i>[[ a['code'] ]]</i></para></td>
170+ <td><para style="terp_level_0_name">[[ (a['type'] =='view') and setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_name_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_name'}) ]][[ a['name'] ]]</para></td>
171+ <td>[[ (a['level'] &lt;&gt;0) or removeParentNode('td') ]]<para style="terp_level_1_balance">[[ (a['type'] =='view') and setTag('para','para',{'style': 'terp_level_1_balance_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(1,a['level']))+'_balance'}) ]][[ formatLang(a['balance'], currency_obj = company.currency_id) ]]</para></td>
172+ <td>[[ (a['level'] == 0 and a['type'] == 'view') or removeParentNode('td') ]]<para style="terp_level_0_balance_bold"><u>[[ formatLang(a['balance'], currency_obj = company.currency_id) ]]</u></para></td>
173+ <td>[[ (a['level'] == 0 and a['type'] != 'view') or removeParentNode('td') ]]<para style="terp_level_1_balance">[[ formatLang(a['balance'], currency_obj = company.currency_id) ]]</para></td>
174 </tr>
175 </blockTable>
176 <blockTable colWidths="426.0,113.0" style="Table_Net_Profit_Loss">
177@@ -279,11 +281,12 @@
178 </tr>
179 <tr style="Table3">
180 [[ repeatIn(get_lines_another('liability'),'a' ) ]]
181- [[ setTag('tr','tr',{'style': 'Table'+str(min(3,a['level']))}) ]]
182- <td><para style="terp_level_3_code">[[ (a['type'] =='view' and a['level'] &gt;= 3) and setTag('para','para',{'style': 'terp_level_3_code_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_code'}) ]]<i>[[ a['code'] ]]</i></para></td>
183- <td><para style="terp_level_3_name">[[ (a['type'] =='view' and a['level'] &gt;= 3) and setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_name_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(4,a['level']))+'_name'}) ]][[ a['name'] ]]</para></td>
184- <td>[[ (a['level'] &lt;&gt;2) or removeParentNode('td') ]]<para style="terp_level_3_balance">[[ (a['type'] =='view' and a['level'] &gt;= 3) and setTag('para','para',{'style': 'terp_level_3_balance_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_balance'}) ]][[ formatLang(a['balance'], currency_obj = company.currency_id) ]]</para></td>
185- <td>[[ a['level'] == 2 or removeParentNode('td') ]]<para style="terp_level_2_balance"><u>[[ formatLang(a['balance'], currency_obj = company.currency_id) ]]</u></para></td>
186+ [[ (a['type'] in ['view', 'Net Profit', 'Net Loss']) and setTag('tr','tr',{'style': 'Table'+str(min(3,a['level']+2))}) or setTag('tr','tr',{'style': 'Table3'}) ]]
187+ <td><para style="terp_level_0_code">[[ (a['type'] in ['view', 'Net Profit', 'Net Loss']) and setTag('para','para',{'style': 'terp_level_0_code'}) or setTag('para','para',{'style': 'terp_level_1_code'}) ]]<i>[[ a['code'] ]]</i></para></td>
188+ <td><para style="terp_level_0_name">[[ (a['type'] in ['view', 'Net Profit', 'Net Loss']) and setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_name_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(3,a['level']))+'_name'}) ]][[ a['name'] ]]</para></td>
189+ <td>[[ (a['level'] &lt;&gt;0) or removeParentNode('td') ]]<para style="terp_level_1_balance">[[ (a['type'] in ['view', 'Net Profit', 'Net Loss']) and setTag('para','para',{'style': 'terp_level_1_balance_bold'}) or setTag('para','para',{'style': 'terp_level_'+str(min(1,a['level']))+'_balance'}) ]][[ formatLang(a['balance'], currency_obj = company.currency_id) ]]</para></td>
190+ <td>[[ (a['level'] == 0 and a['type'] in ['view', 'Net Profit', 'Net Loss']) or removeParentNode('td') ]]<para style="terp_level_0_balance_bold"><u>[[ formatLang(a['balance'], currency_obj = company.currency_id) ]]</u></para></td>
191+ <td>[[ (a['level'] == 0 and a['type'] not in ['view', 'Net Profit', 'Net Loss']) or removeParentNode('td') ]]<para style="terp_level_1_balance">[[ formatLang(a['balance'], currency_obj = company.currency_id) ]]</para></td>
192 </tr>
193 </blockTable>
194 <blockTable colWidths="426.0,113.0" style="Table_Net_Profit_Loss">
195
196=== modified file 'account/report/account_balance_sheet_horizontal.rml'
197--- account/report/account_balance_sheet_horizontal.rml 2011-09-22 08:58:47 +0000
198+++ account/report/account_balance_sheet_horizontal.rml 2011-09-28 07:12:57 +0000
199@@ -197,33 +197,34 @@
200 <tr>
201 <td>
202 <para style="terp_default_9">
203- <font>[[ repeatIn(get_lines(),'a' ) ]] </font>[[ a['code1'] ]]<font>[[ a['level1']&lt;4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]]</font>
204- </para>
205- </td>
206- <td>
207- <para style="terp_default_9">
208- <font color="white">[[ '. '*(a['level1']-1) ]]</font><font>[[ a['level1']&lt;4 and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['name1'] ]]</font>
209- </para>
210- </td>
211- <td>
212- <para style="terp_default_Right_9">
213- <font>[[ a['level1']&lt;4 and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font><font>[[ formatLang(a['balance1'], currency_obj=company.currency_id) ]]</font>
214- </para>
215- </td>
216- <td>
217- <para style="terp_default_9">
218- [[ a['code'] ]]<font>[[ ( a['level']&lt;4 or a['name']=='Net Profit') and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]]</font>
219- </para>
220- </td>
221- <td>
222- <para style="terp_default_9">
223- <font color="white">[[ '. '*(a['level']-1) ]]</font>
224- <font>[[ ( a['level']&lt;4 or a['name']=='Net Profit') and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['name'] ]]</font>
225- </para>
226- </td>
227- <td>
228- <para style="terp_default_Right_9">
229- <font>[[ ( a['level']&lt;4 or a['name']=='Net Profit') and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font>
230+ <font>[[ repeatIn(get_lines(),'a' ) ]] </font>[[ a['code1'] ]]<font>[[ a['type1']=='view' and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]]</font>
231+ </para>
232+ </td>
233+ <td>
234+ <para style="terp_default_9">
235+ <font color="white">[[ '. '*(a['level1']) ]]</font><font>[[ a['type1']=='view' and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['name1'] ]]</font>
236+ </para>
237+ </td>
238+ <td>
239+ <para style="terp_default_Right_9">
240+ <font>[[ a['type1']=='view' and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font><font>[[ (a['code1'] and a['name1']) and formatLang(a['balance1'], currency_obj=company.currency_id) or removeParentNode('font') ]]</font>
241+ </para>
242+ </td>
243+ <td>
244+ <para style="terp_default_9">
245+ <font face="Times-Roman">[[ repeatIn(get_lines(), 'a') ]]</font><font>[[ (a['type'] in ['view', 'Net Profit', 'Net Loss']) and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]]</font>
246+ <font>[[ a['code'] ]]</font>
247+ </para>
248+ </td>
249+ <td>
250+ <para style="terp_default_9">
251+ <font color="white">[[ '. '*(a['level']) ]]</font>
252+ <font>[[ (a['type'] in ['view', 'Net Profit', 'Net Loss']) and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['name'] ]]</font>
253+ </para>
254+ </td>
255+ <td>
256+ <para style="terp_default_Right_9">
257+ <font>[[ (a['type'] in ['view', 'Net Profit', 'Net Loss']) and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font>
258 <font>[[(a['code'] and a['name']) and formatLang(a['balance'], currency_obj=company.currency_id) or removeParentNode('font')]]</font>
259 </para>
260 </td>

Subscribers

People subscribed via source and target branches

to all changes: