Purnendu Singh (OpenERP) has proposed merging 
lp:~openerp-dev/openobject-addons/trunk-bug-722832-new-psi into 
lp:openobject-addons.

Requested reviews:
  OpenERP Core Team (openerp)
Related bugs:
  Bug #722832 in OpenERP Addons: "Balance Sheet Report - Overall balance 
calculation error"
  https://bugs.launchpad.net/openobject-addons/+bug/722832

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-722832-new-psi/+merge/77289

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
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-bug-722832-new-psi/+merge/77289
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-addons/trunk-bug-722832-new-psi.
=== modified file 'account/report/account_balance_sheet.py'
--- account/report/account_balance_sheet.py	2011-09-21 01:35:11 +0000
+++ account/report/account_balance_sheet.py	2011-09-28 07:12:57 +0000
@@ -44,8 +44,8 @@
             'get_currency': self._get_currency,
             'sum_dr': self.sum_dr,
             'sum_cr': self.sum_cr,
-            'get_data':self.get_data,
-            'get_pl_balance':self.get_pl_balance,
+            'get_data': self.get_data,
+            'get_pl_balance': self.get_pl_balance,
             'get_fiscalyear': self._get_fiscalyear,
             'get_account': self._get_account,
             'get_start_period': self.get_start_period,
@@ -53,9 +53,9 @@
             'get_sortby': self._get_sortby,
             'get_filter': self._get_filter,
             'get_journal': self._get_journal,
-            'get_start_date':self._get_start_date,
-            'get_end_date':self._get_end_date,
-            'get_company':self._get_company,
+            'get_start_date': self._get_start_date,
+            'get_end_date': self._get_end_date,
+            'get_company': self._get_company,
             'get_target_move': self._get_target_move,
         })
         self.context = context
@@ -68,13 +68,10 @@
         return super(report_balancesheet_horizontal, self).set_context(objects, data, new_ids, report_type=report_type)
 
     def sum_dr(self):
-        if self.res_bl['type'] == _('Net Profit'):
-            self.result_sum_dr += self.res_bl['balance']*-1
+        self.result_sum_dr += self.res_bl['balance']
         return self.result_sum_dr
 
     def sum_cr(self):
-        if self.res_bl['type'] == _('Net Loss'):
-            self.result_sum_cr += self.res_bl['balance']
         return self.result_sum_cr
 
     def get_pl_balance(self):
@@ -119,23 +116,32 @@
 
         if self.res_bl['type'] == _('Net Profit'):
             self.res_bl['type'] = _('Net Profit')
+            self.res_bl['balance'] = -self.res_bl['balance']
         else:
             self.res_bl['type'] = _('Net Loss')
         pl_dict  = {
             'code': self.res_bl['type'],
             'name': self.res_bl['type'],
+            'type': self.res_bl['type'],
             'level': False,
-            'balance':self.res_bl['balance'],
+            'balance': self.res_bl['balance'],
         }
         for typ in types:
             accounts_temp = []
             for account in accounts:
                 if (account.user_type.report_type) and (account.user_type.report_type == typ):
+                    level = 0
+                    def _compute_level(account, level):
+                        if account.parent_id:
+                            if not account.parent_id.user_type.report_type == 'none':
+                                level += 1
+                            level = _compute_level(account.parent_id, level)
+                        return level
                     account_dict = {
                         'id': account.id,
                         'code': account.code,
                         'name': account.name,
-                        'level': account.level,
+                        'level': _compute_level(account, level),
                         'balance': account.balance != 0 and account.balance * account.user_type.sign or account.balance,
                         'type': account.type,
                     }
@@ -152,8 +158,8 @@
                             accounts_temp.append(account_dict)
                     else:
                         accounts_temp.append(account_dict)
-                    if account.id == data['form']['reserve_account_id']:
-                        pl_dict['level'] = account['level'] + 1
+                    if account.id == data['form']['reserve_account_id'][0]:
+                        pl_dict['level'] = 0
                         accounts_temp.append(pl_dict)
 
             self.result[typ] = accounts_temp
@@ -183,12 +189,12 @@
                               'code': '',
                               'name': '',
                               'level': False,
-                              'balance':False,
+                              'balance': False,
                               'type1': cal_list['asset'][i]['type'],
                               'code1': cal_list['asset'][i]['code'],
                               'name1': cal_list['asset'][i]['name'],
                               'level1': cal_list['asset'][i]['level'],
-                              'balance1':cal_list['asset'][i]['balance'],
+                              'balance1': cal_list['asset'][i]['balance'],
                           }
                         self.result_temp.append(temp)
                     if  i < len(cal_list['liability']):
@@ -197,12 +203,12 @@
                               'code': cal_list['liability'][i]['code'],
                               'name': cal_list['liability'][i]['name'],
                               'level': cal_list['liability'][i]['level'],
-                              'balance':cal_list['liability'][i]['balance'],
+                              'balance': cal_list['liability'][i]['balance'],
                               'type1': '',
                               'code1': '',
                               'name1': '',
                               'level1': False,
-                              'balance1':False,
+                              'balance1': False,
                           }
                         self.result_temp.append(temp)
         return None

=== modified file 'account/report/account_balance_sheet.rml'
--- account/report/account_balance_sheet.rml	2011-09-22 08:58:47 +0000
+++ account/report/account_balance_sheet.rml	2011-09-28 07:12:57 +0000
@@ -124,20 +124,21 @@
     <paraStyle name="terp_default_Right_9_Bold" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
     <paraStyle name="terp_default_2" fontName="Helvetica" fontSize="2.0" leading="3" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
 
-    <paraStyle name="terp_level_1_code" fontName="Helvetica-Bold" fontSize="9.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
-    <paraStyle name="terp_level_1_name" fontName="Helvetica-Bold" fontSize="9.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
-    <paraStyle name="terp_level_1_balance" fontName="Helvetica-Bold" fontSize="9.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
-    <paraStyle name="terp_level_2_code" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
-    <paraStyle name="terp_level_2_name" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="10.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
-    <paraStyle name="terp_level_2_balance" fontName="Helvetica-Bold" fontSize="8.0" leftIndent=".0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
-    <paraStyle name="terp_level_3_code" fontName="Helvetica" fontSize="8.0" leftIndent="0.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
-    <paraStyle name="terp_level_3_code_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
-    <paraStyle name="terp_level_3_name" fontName="Helvetica" fontSize="8.0" leftIndent="20.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
-    <paraStyle name="terp_level_3_name_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="20.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
-    <paraStyle name="terp_level_3_balance" fontName="Helvetica" fontSize="8.0" leftIndent="0.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
-    <paraStyle name="terp_level_3_balance_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
-    <paraStyle name="terp_level_4_name" fontName="Helvetica" fontSize="8.0" leftIndent="30.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
-    <paraStyle name="terp_level_4_name_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="30.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_0_code" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_0_name" fontName="Helvetica" fontSize="8.0" leftIndent="10.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_0_name_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="10.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_0_balance" fontName="Helvetica" fontSize="8.0" leftIndent="0.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_0_balance_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_1_code" fontName="Helvetica" fontSize="8.0" leftIndent="0.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_1_code_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_1_name" fontName="Helvetica" fontSize="8.0" leftIndent="20.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_1_name_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="20.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_1_balance" fontName="Helvetica" fontSize="8.0" leftIndent="0.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_1_balance_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="0.0" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_2_name" fontName="Helvetica" fontSize="8.0" leftIndent="30.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_2_name_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="30.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_3_name" fontName="Helvetica" fontSize="8.0" leftIndent="40.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
+    <paraStyle name="terp_level_3_name_bold" fontName="Helvetica-Bold" fontSize="8.0" leftIndent="40.0" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
 
     <blockTableStyle id="Table1">
       <blockTopPadding start="0,0" stop="-1,0" length="15"/>
@@ -237,11 +238,12 @@
       </tr>
       <tr style="Table3">
           [[ repeatIn(get_lines_another('asset'),'a' ) ]]
-          [[ setTag('tr','tr',{'style': 'Table'+str(min(3,a['level']))}) ]]
-        <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>
-        <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>
-        <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>
-        <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>
+          [[ (a['type'] =='view') and setTag('tr','tr',{'style': 'Table'+str(min(3,a['level']+2))}) or setTag('tr','tr',{'style': 'Table3'}) ]]
+        <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>
+        <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>
+        <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>
+        <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>
+        <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>
       </tr>
     </blockTable>
     <blockTable colWidths="426.0,113.0" style="Table_Net_Profit_Loss">
@@ -279,11 +281,12 @@
       </tr>
       <tr style="Table3">
           [[ repeatIn(get_lines_another('liability'),'a' ) ]]
-          [[ setTag('tr','tr',{'style': 'Table'+str(min(3,a['level']))}) ]]
-        <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>
-        <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>
-        <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>
-        <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>
+          [[ (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'}) ]]
+        <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>
+        <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>
+        <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>
+        <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>
+        <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>
       </tr>
     </blockTable>
     <blockTable colWidths="426.0,113.0" style="Table_Net_Profit_Loss">

=== modified file 'account/report/account_balance_sheet_horizontal.rml'
--- account/report/account_balance_sheet_horizontal.rml	2011-09-22 08:58:47 +0000
+++ account/report/account_balance_sheet_horizontal.rml	2011-09-28 07:12:57 +0000
@@ -197,33 +197,34 @@
       <tr>
         <td>
           <para style="terp_default_9">
-            <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>
-          </para>
-        </td>
-        <td>
-          <para style="terp_default_9">
-            <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>
-          </para>
-        </td>
-        <td>
-          <para style="terp_default_Right_9">
-          <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>
-          </para>
-        </td>
-        <td>
-          <para style="terp_default_9">
-            [[ 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>
-          </para>
-        </td>
-        <td>
-          <para style="terp_default_9">
-            <font color="white">[[ '. '*(a['level']-1) ]]</font>
-            <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>
-          </para>
-        </td>
-        <td>
-          <para style="terp_default_Right_9">
-            <font>[[ ( a['level']&lt;4 or a['name']=='Net Profit') and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font>
+            <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>
+          </para>
+        </td>
+        <td>
+          <para style="terp_default_9">
+            <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>
+          </para>
+        </td>
+        <td>
+          <para style="terp_default_Right_9">
+            <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>
+          </para>
+        </td>
+        <td>
+          <para style="terp_default_9">
+            <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>
+          	<font>[[ a['code'] ]]</font>
+          </para>
+        </td>
+        <td>
+          <para style="terp_default_9">
+            <font color="white">[[ '. '*(a['level']) ]]</font>
+            <font>[[ (a['type'] in ['view', 'Net Profit', 'Net Loss']) and ( setTag('para','para',{'style':'terp_default_Bold_9'})) or removeParentNode('font') ]][[ a['name'] ]]</font>
+          </para>
+        </td>
+        <td>
+          <para style="terp_default_Right_9">
+            <font>[[ (a['type'] in ['view', 'Net Profit', 'Net Loss']) and ( setTag('para','para',{'style':'terp_default_Right_9_Bold'})) or removeParentNode('font') ]]</font>
             <font>[[(a['code'] and a['name']) and formatLang(a['balance'], currency_obj=company.currency_id) or removeParentNode('font')]]</font>
           </para>
         </td>

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to