svn commit: r1034162 - in /ofbiz/branches/release10.04: ./ applications/accounting/data/AccountingTypeData.xml applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1034162 - in /ofbiz/branches/release10.04: ./ applications/accounting/data/AccountingTypeData.xml applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy

apatel-2
Author: apatel
Date: Thu Nov 11 21:50:19 2010
New Revision: 1034162

URL: http://svn.apache.org/viewvc?rev=1034162&view=rev
Log:
Applied fix from trunk for revision: 1029600
===

Implemented support for "contra revenue" classes in the Income Statement: this will fix the incomplete information in financial reports for returns

Modified:
    ofbiz/branches/release10.04/   (props changed)
    ofbiz/branches/release10.04/applications/accounting/data/AccountingTypeData.xml
    ofbiz/branches/release10.04/applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy

Propchange: ofbiz/branches/release10.04/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Nov 11 21:50:19 2010
@@ -1,3 +1,3 @@
 /ofbiz/branches/addbirt:831210-885099,885686-886087
 /ofbiz/branches/multitenant20100310:921280-927264
-/ofbiz/trunk:939988,939990,939999,940025,940053,940234,940248,940309,940401,940410,940425,940779,940815,940849,940851,941007,941047,941109,941177,941199,941261,941440,941600,941999,942084,942406,942414,942671,942883-942884,943168,943271-943272,944614,944621,944623,944647,944669,944797,944895,945010,945018,945026,945118,945573,945578,945580,945582,945610,945619,945848,945852,945857,946061,946066,946073,946075,946080,946309,946313,946320,946322,946596,947004-947005,947392,947424,947679,947988,948017,948694,949174,949710,949844,950866,950870,950893,951005,951062,951098,951251,951367,951381,951672,952232,952249,952270,953294,953671,954135,954583,954733,954956,955568,956022,956206,956340,957160,958343,958514,958521,958752,958758,958769,958953,959456,960143,960491,960997,963610,964558,965470,965916,966525,966785,967098,978806,978893,978939,979104,980641-980642,980935,981051,981104,981123,981288,983920,983930,985163,985298,985473,985718,985856,985902,987841,989166,990127,990339,990
 539,991485,993344,993387,995384,995686,996069,996078-996079,996563,997418-997420,997423-997425,997431,997440,997526,997990,998061,998412,998557,1000621,1000725,1000998,1001099,1001131,1001185,1001574,1001849,1001962,1002963,1003434,1003450,1003829,1004139,1027756,1027960,1028053,1028625,1028627,1030016,1030385,1030390,1033928,1033953
+/ofbiz/trunk:939988,939990,939999,940025,940053,940234,940248,940309,940401,940410,940425,940779,940815,940849,940851,941007,941047,941109,941177,941199,941261,941440,941600,941999,942084,942406,942414,942671,942883-942884,943168,943271-943272,944614,944621,944623,944647,944669,944797,944895,945010,945018,945026,945118,945573,945578,945580,945582,945610,945619,945848,945852,945857,946061,946066,946073,946075,946080,946309,946313,946320,946322,946596,947004-947005,947392,947424,947679,947988,948017,948694,949174,949710,949844,950866,950870,950893,951005,951062,951098,951251,951367,951381,951672,952232,952249,952270,953294,953671,954135,954583,954733,954956,955568,956022,956206,956340,957160,958343,958514,958521,958752,958758,958769,958953,959456,960143,960491,960997,963610,964558,965470,965916,966525,966785,967098,978806,978893,978939,979104,980641-980642,980935,981051,981104,981123,981288,983920,983930,985163,985298,985473,985718,985856,985902,987841,989166,990127,990339,990
 539,991485,993344,993387,995384,995686,996069,996078-996079,996563,997418-997420,997423-997425,997431,997440,997526,997990,998061,998412,998557,1000621,1000725,1000998,1001099,1001131,1001185,1001574,1001849,1001962,1002963,1003434,1003450,1003829,1004139,1027756,1027960,1028053,1028625,1028627,1029600,1030016,1030385,1030390,1033928,1033953

Modified: ofbiz/branches/release10.04/applications/accounting/data/AccountingTypeData.xml
URL: http://svn.apache.org/viewvc/ofbiz/branches/release10.04/applications/accounting/data/AccountingTypeData.xml?rev=1034162&r1=1034161&r2=1034162&view=diff
==============================================================================
--- ofbiz/branches/release10.04/applications/accounting/data/AccountingTypeData.xml (original)
+++ ofbiz/branches/release10.04/applications/accounting/data/AccountingTypeData.xml Thu Nov 11 21:50:19 2010
@@ -211,6 +211,8 @@ under the License.
         DEBIT
             |___> NON_POSTING
             |
+            |___> CONTRA_REVENUE
+            |
             |___> ASSET
             |         |_________> LONGTERM_ASSET
             |         |

Modified: ofbiz/branches/release10.04/applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy
URL: http://svn.apache.org/viewvc/ofbiz/branches/release10.04/applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy?rev=1034162&r1=1034161&r2=1034162&view=diff
==============================================================================
--- ofbiz/branches/release10.04/applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy (original)
+++ ofbiz/branches/release10.04/applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy Thu Nov 11 21:50:19 2010
@@ -44,6 +44,8 @@ partyIds.add(organizationPartyId);
 // Get the group of account classes that will be used to position accounts in the proper section of the financial statement
 GenericValue revenueGlAccountClass = delegator.findOne("GlAccountClass", UtilMisc.toMap("glAccountClassId", "REVENUE"), true);
 List revenueAccountClassIds = UtilAccounting.getDescendantGlAccountClassIds(revenueGlAccountClass);
+GenericValue contraRevenueGlAccountClass = delegator.findOne("GlAccountClass", UtilMisc.toMap("glAccountClassId", "CONTRA_REVENUE"), true);
+List contraRevenueAccountClassIds = UtilAccounting.getDescendantGlAccountClassIds(contraRevenueGlAccountClass);
 GenericValue incomeGlAccountClass = delegator.findOne("GlAccountClass", UtilMisc.toMap("glAccountClassId", "INCOME"), true);
 List incomeAccountClassIds = UtilAccounting.getDescendantGlAccountClassIds(incomeGlAccountClass);
 GenericValue expenseGlAccountClass = delegator.findOne("GlAccountClass", UtilMisc.toMap("glAccountClassId", "EXPENSE"), true);
@@ -107,6 +109,48 @@ context.revenueAccountBalanceList.add(Ut
 context.revenueBalanceTotal = balanceTotal;
 balanceTotalList.add(UtilMisc.toMap("totalName", "AccountingNetSales", "balance", balanceTotal));
 
+// CONTRA REVENUE
+// account balances
+accountBalanceList = [];
+transactionTotals = [];
+balanceTotal = BigDecimal.ZERO;
+List contraRevenueAndExprs = FastList.newInstance(mainAndExprs);
+contraRevenueAndExprs.add(EntityCondition.makeCondition("glAccountClassId", EntityOperator.IN, contraRevenueAccountClassIds));
+transactionTotals = delegator.findList("AcctgTransEntrySums", EntityCondition.makeCondition(cogsExpenseAndExprs, EntityOperator.AND), UtilMisc.toSet("glAccountId", "accountName", "accountCode", "debitCreditFlag", "amount"), UtilMisc.toList("glAccountId"), null, false);
+if (transactionTotals) {
+    Map transactionTotalsMap = [:];
+    balanceTotalCredit = BigDecimal.ZERO;
+    balanceTotalDebit = BigDecimal.ZERO;
+    transactionTotals.each { transactionTotal ->
+        Map accountMap = (Map)transactionTotalsMap.get(transactionTotal.glAccountId);
+        if (!accountMap) {
+            accountMap = UtilMisc.makeMapWritable(transactionTotal);
+            accountMap.remove("debitCreditFlag");
+            accountMap.remove("amount");
+            accountMap.put("D", BigDecimal.ZERO);
+            accountMap.put("C", BigDecimal.ZERO);
+            accountMap.put("balance", BigDecimal.ZERO);
+        }
+        UtilMisc.addToBigDecimalInMap(accountMap, transactionTotal.debitCreditFlag, transactionTotal.amount);
+        if ("D".equals(transactionTotal.debitCreditFlag)) {
+            balanceTotalDebit = balanceTotalDebit.add(transactionTotal.amount);
+        } else {
+            balanceTotalCredit = balanceTotalCredit.add(transactionTotal.amount);
+        }
+        BigDecimal debitAmount = (BigDecimal)accountMap.get("D");
+        BigDecimal creditAmount = (BigDecimal)accountMap.get("C");
+        // contra revenues are accounts of class DEBIT: the balance is given by debits minus credits
+        BigDecimal balance = debitAmount.subtract(creditAmount);
+        accountMap.put("balance", balance);
+        transactionTotalsMap.put(transactionTotal.glAccountId, accountMap);
+    }
+    accountBalanceList = UtilMisc.sortMaps(transactionTotalsMap.values().asList(), UtilMisc.toList("accountCode"));
+    // contra revenues are accounts of class DEBIT: the balance is given by debits minus credits
+    balanceTotal = balanceTotalDebit.subtract(balanceTotalCredit);
+}
+context.contraRevenueBalanceTotal = balanceTotal;
+balanceTotalList.add(UtilMisc.toMap("totalName", "TOTAL CONTRA REVENUE", "balance", balanceTotal));
+
 // EXPENSE
 // account balances
 accountBalanceList = [];
@@ -276,8 +320,11 @@ context.incomeAccountBalanceList = accou
 context.incomeAccountBalanceList.add(UtilMisc.toMap("accountName", "TOTAL INCOME", "balance", balanceTotal));
 context.incomeBalanceTotal = balanceTotal;
 
+// NET SALES = REVENUES - CONTRA REVENUES
+context.netSales = (context.revenueBalanceTotal).subtract(context.contraRevenueBalanceTotal);
+balanceTotalList.add(UtilMisc.toMap("totalName", "AccountingTotalNetSales", "balance", context.netSales));
 // GROSS MARGIN = NET SALES - COSTS OF GOODS SOLD
-context.grossMargin = (context.revenueBalanceTotal).subtract(context.cogsExpense);
+context.grossMargin = (context.netSales).subtract(context.cogsExpense);
 balanceTotalList.add(UtilMisc.toMap("totalName", "AccountingGrossMargin", "balance", context.grossMargin));
 // OPERATING EXPENSES
 context.sgaExpense = sgaExpense;
@@ -286,8 +333,7 @@ balanceTotalList.add(UtilMisc.toMap("tot
 context.incomeFromOperations = (context.grossMargin).subtract(context.sgaExpense);
 balanceTotalList.add(UtilMisc.toMap("totalName", "AccountingIncomeFromOperations", "balance", context.incomeFromOperations));
 // NET INCOME
-context.netIncome = (context.revenueBalanceTotal).add(context.incomeBalanceTotal).subtract(context.expenseBalanceTotal);
+context.netIncome = (context.netSales).add(context.incomeBalanceTotal).subtract(context.expenseBalanceTotal);
 balanceTotalList.add(UtilMisc.toMap("totalName", "AccountingNetIncome", "balance", context.netIncome));
 
 context.balanceTotalList = balanceTotalList;
-