Author: jacopoc
Date: Sat Dec 5 19:18:21 2009
New Revision: 887578
URL: http://svn.apache.org/viewvc?rev=887578&view=rev
Log:
Added missing script from my previous commit; thanks to Anil Patel for the
report.
Added:
ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/BalanceSheet.groovy
(with props)
Added:
ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/BalanceSheet.groovy
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/BalanceSheet.groovy?rev=887578&view=auto
==============================================================================
---
ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/BalanceSheet.groovy
(added)
+++
ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/BalanceSheet.groovy
Sat Dec 5 19:18:21 2009
@@ -0,0 +1,374 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.ofbiz.base.util.UtilDateTime;
+import org.ofbiz.base.util.UtilMisc;
+import org.ofbiz.entity.GenericValue;
+import org.ofbiz.entity.condition.EntityCondition;
+import org.ofbiz.entity.condition.EntityOperator;
+import org.ofbiz.accounting.util.UtilAccounting;
+import org.ofbiz.party.party.PartyWorker;
+
+import java.sql.Date;
+import java.sql.Timestamp;
+
+import javolution.util.FastList;
+
+if (!thruDate) {
+ thruDate = UtilDateTime.nowTimestamp();
+}
+if (!parameters.glFiscalTypeId) {
+ parameters.glFiscalTypeId = "ACTUAL";
+}
+
+// Setup the divisions for which the report is executed
+List partyIds = PartyWorker.getAssociatedPartyIdsByRelationshipType(delegator,
organizationPartyId, 'GROUP_ROLLUP');
+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 assetGlAccountClass = delegator.findOne("GlAccountClass",
UtilMisc.toMap("glAccountClassId", "ASSET"), true);
+List assetAccountClassIds =
UtilAccounting.getDescendantGlAccountClassIds(assetGlAccountClass);
+GenericValue liabilityGlAccountClass = delegator.findOne("GlAccountClass",
UtilMisc.toMap("glAccountClassId", "LIABILITY"), true);
+List liabilityAccountClassIds =
UtilAccounting.getDescendantGlAccountClassIds(liabilityGlAccountClass);
+GenericValue equityGlAccountClass = delegator.findOne("GlAccountClass",
UtilMisc.toMap("glAccountClassId", "EQUITY"), true);
+List equityAccountClassIds =
UtilAccounting.getDescendantGlAccountClassIds(equityGlAccountClass);
+GenericValue currentAssetGlAccountClass = delegator.findOne("GlAccountClass",
UtilMisc.toMap("glAccountClassId", "CURRENT_ASSET"), true);
+List currentAssetAccountClassIds =
UtilAccounting.getDescendantGlAccountClassIds(currentAssetGlAccountClass);
+GenericValue longtermAssetGlAccountClass = delegator.findOne("GlAccountClass",
UtilMisc.toMap("glAccountClassId", "LONGTERM_ASSET"), true);
+List longtermAssetAccountClassIds =
UtilAccounting.getDescendantGlAccountClassIds(longtermAssetGlAccountClass);
+GenericValue currentLiabilityGlAccountClass =
delegator.findOne("GlAccountClass", UtilMisc.toMap("glAccountClassId",
"CURRENT_LIABILITY"), true);
+List currentLiabilityAccountClassIds =
UtilAccounting.getDescendantGlAccountClassIds(currentLiabilityGlAccountClass);
+GenericValue accumDepreciationGlAccountClass =
delegator.findOne("GlAccountClass", UtilMisc.toMap("glAccountClassId",
"ACCUM_DEPRECIATION"), true);
+List accumDepreciationAccountClassIds =
UtilAccounting.getDescendantGlAccountClassIds(accumDepreciationGlAccountClass);
+GenericValue accumAmortizationGlAccountClass =
delegator.findOne("GlAccountClass", UtilMisc.toMap("glAccountClassId",
"ACCUM_AMORTIZATION"), true);
+List accumAmortizationAccountClassIds =
UtilAccounting.getDescendantGlAccountClassIds(accumAmortizationGlAccountClass);
+
+// Find the last closed time period to get the fromDate for the transactions
in the current period and the ending balances of the last closed period
+Map lastClosedTimePeriodResult = dispatcher.runSync("findLastClosedDate",
UtilMisc.toMap("organizationPartyId", organizationPartyId, "findDate", new
Date(thruDate.getTime()),"userLogin", userLogin));
+Timestamp fromDate = (Timestamp)lastClosedTimePeriodResult.lastClosedDate;
+if (!fromDate) {
+ return;
+}
+GenericValue lastClosedTimePeriod =
(GenericValue)lastClosedTimePeriodResult.lastClosedTimePeriod;
+// Get the opening balances of all the accounts
+Map assetOpeningBalances = [:];
+Map currentAssetOpeningBalances = [:];
+Map longtermAssetOpeningBalances = [:];
+Map liabilityOpeningBalances = [:];
+Map currentLiabilityOpeningBalances = [:];
+Map equityOpeningBalances = [:];
+if (lastClosedTimePeriod) {
+ List timePeriodAndExprs = FastList.newInstance();
+
timePeriodAndExprs.add(EntityCondition.makeCondition("organizationPartyId",
EntityOperator.IN, partyIds));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, assetAccountClassIds));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("endingBalance",
EntityOperator.NOT_EQUAL, BigDecimal.ZERO));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("customTimePeriodId",
EntityOperator.EQUALS, lastClosedTimePeriod.customTimePeriodId));
+ List lastTimePeriodHistories = delegator.findList("GlAccountAndHistory",
EntityCondition.makeCondition(timePeriodAndExprs, EntityOperator.AND), null,
null, null, false);
+ lastTimePeriodHistories.each { lastTimePeriodHistory ->
+ Map accountMap = UtilMisc.toMap("glAccountId",
lastTimePeriodHistory.glAccountId, "accountCode",
lastTimePeriodHistory.accountCode, "accountName",
lastTimePeriodHistory.accountName, "balance",
lastTimePeriodHistory.getBigDecimal("endingBalance"), "D",
lastTimePeriodHistory.getBigDecimal("postedDebits"), "C",
lastTimePeriodHistory.getBigDecimal("postedCredits"));
+ assetOpeningBalances.put(lastTimePeriodHistory.glAccountId,
accountMap);
+ }
+ timePeriodAndExprs = FastList.newInstance();
+
timePeriodAndExprs.add(EntityCondition.makeCondition("organizationPartyId",
EntityOperator.IN, partyIds));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, liabilityAccountClassIds));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("endingBalance",
EntityOperator.NOT_EQUAL, BigDecimal.ZERO));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("customTimePeriodId",
EntityOperator.EQUALS, lastClosedTimePeriod.customTimePeriodId));
+ lastTimePeriodHistories = delegator.findList("GlAccountAndHistory",
EntityCondition.makeCondition(timePeriodAndExprs, EntityOperator.AND), null,
null, null, false);
+ lastTimePeriodHistories.each { lastTimePeriodHistory ->
+ Map accountMap = UtilMisc.toMap("glAccountId",
lastTimePeriodHistory.glAccountId, "accountCode",
lastTimePeriodHistory.accountCode, "accountName",
lastTimePeriodHistory.accountName, "balance",
lastTimePeriodHistory.getBigDecimal("endingBalance"), "D",
lastTimePeriodHistory.getBigDecimal("postedDebits"), "C",
lastTimePeriodHistory.getBigDecimal("postedCredits"));
+ liabilityOpeningBalances.put(lastTimePeriodHistory.glAccountId,
accountMap);
+ }
+ timePeriodAndExprs = FastList.newInstance();
+
timePeriodAndExprs.add(EntityCondition.makeCondition("organizationPartyId",
EntityOperator.IN, partyIds));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, equityAccountClassIds));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("endingBalance",
EntityOperator.NOT_EQUAL, BigDecimal.ZERO));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("customTimePeriodId",
EntityOperator.EQUALS, lastClosedTimePeriod.customTimePeriodId));
+ lastTimePeriodHistories = delegator.findList("GlAccountAndHistory",
EntityCondition.makeCondition(timePeriodAndExprs, EntityOperator.AND), null,
null, null, false);
+ lastTimePeriodHistories.each { lastTimePeriodHistory ->
+ Map accountMap = UtilMisc.toMap("glAccountId",
lastTimePeriodHistory.glAccountId, "accountCode",
lastTimePeriodHistory.accountCode, "accountName",
lastTimePeriodHistory.accountName, "balance",
lastTimePeriodHistory.getBigDecimal("endingBalance"), "D",
lastTimePeriodHistory.getBigDecimal("postedDebits"), "C",
lastTimePeriodHistory.getBigDecimal("postedCredits"));
+ equityOpeningBalances.put(lastTimePeriodHistory.glAccountId,
accountMap);
+ }
+ timePeriodAndExprs = FastList.newInstance();
+
timePeriodAndExprs.add(EntityCondition.makeCondition("organizationPartyId",
EntityOperator.IN, partyIds));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, currentAssetAccountClassIds));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("endingBalance",
EntityOperator.NOT_EQUAL, BigDecimal.ZERO));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("customTimePeriodId",
EntityOperator.EQUALS, lastClosedTimePeriod.customTimePeriodId));
+ lastTimePeriodHistories = delegator.findList("GlAccountAndHistory",
EntityCondition.makeCondition(timePeriodAndExprs, EntityOperator.AND), null,
null, null, false);
+ lastTimePeriodHistories.each { lastTimePeriodHistory ->
+ Map accountMap = UtilMisc.toMap("glAccountId",
lastTimePeriodHistory.glAccountId, "accountCode",
lastTimePeriodHistory.accountCode, "accountName",
lastTimePeriodHistory.accountName, "balance",
lastTimePeriodHistory.getBigDecimal("endingBalance"), "D",
lastTimePeriodHistory.getBigDecimal("postedDebits"), "C",
lastTimePeriodHistory.getBigDecimal("postedCredits"));
+ currentAssetOpeningBalances.put(lastTimePeriodHistory.glAccountId,
accountMap);
+ }
+ timePeriodAndExprs = FastList.newInstance();
+
timePeriodAndExprs.add(EntityCondition.makeCondition("organizationPartyId",
EntityOperator.IN, partyIds));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, longtermAssetAccountClassIds));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("endingBalance",
EntityOperator.NOT_EQUAL, BigDecimal.ZERO));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("customTimePeriodId",
EntityOperator.EQUALS, lastClosedTimePeriod.customTimePeriodId));
+ lastTimePeriodHistories = delegator.findList("GlAccountAndHistory",
EntityCondition.makeCondition(timePeriodAndExprs, EntityOperator.AND), null,
null, null, false);
+ lastTimePeriodHistories.each { lastTimePeriodHistory ->
+ Map accountMap = UtilMisc.toMap("glAccountId",
lastTimePeriodHistory.glAccountId, "accountCode",
lastTimePeriodHistory.accountCode, "accountName",
lastTimePeriodHistory.accountName, "balance",
lastTimePeriodHistory.getBigDecimal("endingBalance"), "D",
lastTimePeriodHistory.getBigDecimal("postedDebits"), "C",
lastTimePeriodHistory.getBigDecimal("postedCredits"));
+ longtermAssetOpeningBalances.put(lastTimePeriodHistory.glAccountId,
accountMap);
+ }
+ timePeriodAndExprs = FastList.newInstance();
+
timePeriodAndExprs.add(EntityCondition.makeCondition("organizationPartyId",
EntityOperator.IN, partyIds));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, currentLiabilityAccountClassIds));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("endingBalance",
EntityOperator.NOT_EQUAL, BigDecimal.ZERO));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("customTimePeriodId",
EntityOperator.EQUALS, lastClosedTimePeriod.customTimePeriodId));
+ lastTimePeriodHistories = delegator.findList("GlAccountAndHistory",
EntityCondition.makeCondition(timePeriodAndExprs, EntityOperator.AND), null,
null, null, false);
+ lastTimePeriodHistories.each { lastTimePeriodHistory ->
+ Map accountMap = UtilMisc.toMap("glAccountId",
lastTimePeriodHistory.glAccountId, "accountCode",
lastTimePeriodHistory.accountCode, "accountName",
lastTimePeriodHistory.accountName, "balance",
lastTimePeriodHistory.getBigDecimal("endingBalance"), "D",
lastTimePeriodHistory.getBigDecimal("postedDebits"), "C",
lastTimePeriodHistory.getBigDecimal("postedCredits"));
+ currentLiabilityOpeningBalances.put(lastTimePeriodHistory.glAccountId,
accountMap);
+ }
+}
+
+List balanceTotalList = [];
+
+List mainAndExprs = FastList.newInstance();
+mainAndExprs.add(EntityCondition.makeCondition("organizationPartyId",
EntityOperator.IN, partyIds));
+mainAndExprs.add(EntityCondition.makeCondition("isPosted",
EntityOperator.EQUALS, "Y"));
+mainAndExprs.add(EntityCondition.makeCondition("glFiscalTypeId",
EntityOperator.EQUALS, parameters.glFiscalTypeId));
+mainAndExprs.add(EntityCondition.makeCondition("acctgTransTypeId",
EntityOperator.NOT_EQUAL, "PERIOD_CLOSING"));
+mainAndExprs.add(EntityCondition.makeCondition("transactionDate",
EntityOperator.GREATER_THAN_EQUAL_TO, fromDate));
+mainAndExprs.add(EntityCondition.makeCondition("transactionDate",
EntityOperator.LESS_THAN, thruDate));
+
+// ASSETS
+// account balances
+accountBalanceList = [];
+transactionTotals = [];
+balanceTotal = BigDecimal.ZERO;
+List assetAndExprs = FastList.newInstance(mainAndExprs);
+assetAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, assetAccountClassIds));
+transactionTotals = delegator.findList("AcctgTransEntrySums",
EntityCondition.makeCondition(assetAndExprs, EntityOperator.AND),
UtilMisc.toSet("glAccountId", "accountName", "accountCode", "debitCreditFlag",
"amount"), UtilMisc.toList("glAccountId"), null, false);
+
+transactionTotalsMap = [:];
+transactionTotalsMap.putAll(assetOpeningBalances);
+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);
+ BigDecimal debitAmount = (BigDecimal)accountMap.get("D");
+ BigDecimal creditAmount = (BigDecimal)accountMap.get("C");
+ // assets 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"));
+accountBalanceList.each { accountBalance ->
+ balanceTotal = balanceTotal + accountBalance.balance;
+}
+context.assetAccountBalanceList = accountBalanceList;
+context.assetAccountBalanceList.add(UtilMisc.toMap("accountName", "TOTAL
ASSETS", "balance", balanceTotal));
+context.assetBalanceTotal = balanceTotal;
+
+// CURRENT ASSETS
+// account balances
+accountBalanceList = [];
+transactionTotals = [];
+balanceTotal = BigDecimal.ZERO;
+List currentAssetAndExprs = FastList.newInstance(mainAndExprs);
+currentAssetAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, currentAssetAccountClassIds));
+transactionTotals = delegator.findList("AcctgTransEntrySums",
EntityCondition.makeCondition(currentAssetAndExprs, EntityOperator.AND),
UtilMisc.toSet("glAccountId", "accountName", "accountCode", "debitCreditFlag",
"amount"), UtilMisc.toList("glAccountId"), null, false);
+transactionTotalsMap = [:];
+transactionTotalsMap.putAll(currentAssetOpeningBalances);
+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);
+ BigDecimal debitAmount = (BigDecimal)accountMap.get("D");
+ BigDecimal creditAmount = (BigDecimal)accountMap.get("C");
+ // assets 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"));
+accountBalanceList.each { accountBalance ->
+ balanceTotal = balanceTotal + accountBalance.balance;
+}
+context.currentAssetBalanceTotal = balanceTotal;
+balanceTotalList.add(UtilMisc.toMap("totalName", "AccountingCurrentAssets",
"balance", balanceTotal));
+
+// LONGTERM ASSETS
+// account balances
+accountBalanceList = [];
+transactionTotals = [];
+balanceTotal = BigDecimal.ZERO;
+List longtermAssetAndExprs = FastList.newInstance(mainAndExprs);
+longtermAssetAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, longtermAssetAccountClassIds));
+transactionTotals = delegator.findList("AcctgTransEntrySums",
EntityCondition.makeCondition(longtermAssetAndExprs, EntityOperator.AND),
UtilMisc.toSet("glAccountId", "accountName", "accountCode", "debitCreditFlag",
"amount"), UtilMisc.toList("glAccountId"), null, false);
+transactionTotalsMap = [:];
+transactionTotalsMap.putAll(longtermAssetOpeningBalances);
+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);
+ BigDecimal debitAmount = (BigDecimal)accountMap.get("D");
+ BigDecimal creditAmount = (BigDecimal)accountMap.get("C");
+ // assets 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"));
+accountBalanceList.each { accountBalance ->
+ balanceTotal = balanceTotal + accountBalance.balance;
+}
+context.longtermAssetBalanceTotal = balanceTotal;
+balanceTotalList.add(UtilMisc.toMap("totalName", "AccountingLongTermAssets",
"balance", balanceTotal));
+
+// LIABILITY
+// account balances
+accountBalanceList = [];
+transactionTotals = [];
+balanceTotal = BigDecimal.ZERO;
+List liabilityAndExprs = FastList.newInstance(mainAndExprs);
+liabilityAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, liabilityAccountClassIds));
+transactionTotals = delegator.findList("AcctgTransEntrySums",
EntityCondition.makeCondition(liabilityAndExprs, EntityOperator.AND),
UtilMisc.toSet("glAccountId", "accountName", "accountCode", "debitCreditFlag",
"amount"), UtilMisc.toList("glAccountId"), null, false);
+transactionTotalsMap = [:];
+transactionTotalsMap.putAll(liabilityOpeningBalances);
+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);
+ BigDecimal debitAmount = (BigDecimal)accountMap.get("D");
+ BigDecimal creditAmount = (BigDecimal)accountMap.get("C");
+ // liabilities are accounts of class CREDIT: the balance is given by
credits minus debits
+ BigDecimal balance = creditAmount.subtract(debitAmount);
+ accountMap.put("balance", balance);
+ transactionTotalsMap.put(transactionTotal.glAccountId, accountMap);
+}
+accountBalanceList = UtilMisc.sortMaps(transactionTotalsMap.values().asList(),
UtilMisc.toList("accountCode"));
+accountBalanceList.each { accountBalance ->
+ balanceTotal = balanceTotal + accountBalance.balance;
+}
+context.liabilityAccountBalanceList = accountBalanceList;
+context.liabilityAccountBalanceList.add(UtilMisc.toMap("accountName", "TOTAL
LIABILITIES", "balance", balanceTotal));
+context.liabilityBalanceTotal = balanceTotal;
+
+// CURRENT LIABILITY
+// account balances
+accountBalanceList = [];
+transactionTotals = [];
+balanceTotal = BigDecimal.ZERO;
+List currentLiabilityAndExprs = FastList.newInstance(mainAndExprs);
+currentLiabilityAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, currentLiabilityAccountClassIds));
+transactionTotals = delegator.findList("AcctgTransEntrySums",
EntityCondition.makeCondition(currentLiabilityAndExprs, EntityOperator.AND),
UtilMisc.toSet("glAccountId", "accountName", "accountCode", "debitCreditFlag",
"amount"), UtilMisc.toList("glAccountId"), null, false);
+transactionTotalsMap = [:];
+transactionTotalsMap.putAll(currentLiabilityOpeningBalances);
+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);
+ BigDecimal debitAmount = (BigDecimal)accountMap.get("D");
+ BigDecimal creditAmount = (BigDecimal)accountMap.get("C");
+ // liabilities are accounts of class CREDIT: the balance is given by
credits minus debits
+ BigDecimal balance = creditAmount.subtract(debitAmount);
+ accountMap.put("balance", balance);
+ transactionTotalsMap.put(transactionTotal.glAccountId, accountMap);
+}
+accountBalanceList = UtilMisc.sortMaps(transactionTotalsMap.values().asList(),
UtilMisc.toList("accountCode"));
+accountBalanceList.each { accountBalance ->
+ balanceTotal = balanceTotal + accountBalance.balance;
+}
+context.currentLiabilityBalanceTotal = balanceTotal;
+balanceTotalList.add(UtilMisc.toMap("totalName",
"AccountingCurrentLiabilities", "balance", balanceTotal));
+
+// EQUITY
+// account balances
+accountBalanceList = [];
+transactionTotals = [];
+balanceTotal = BigDecimal.ZERO;
+List equityAndExprs = FastList.newInstance(mainAndExprs);
+equityAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, equityAccountClassIds));
+transactionTotals = delegator.findList("AcctgTransEntrySums",
EntityCondition.makeCondition(equityAndExprs, EntityOperator.AND),
UtilMisc.toSet("glAccountId", "accountName", "accountCode", "debitCreditFlag",
"amount"), UtilMisc.toList("glAccountId"), null, false);
+transactionTotalsMap = [:];
+transactionTotalsMap.putAll(equityOpeningBalances);
+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);
+ BigDecimal debitAmount = (BigDecimal)accountMap.get("D");
+ BigDecimal creditAmount = (BigDecimal)accountMap.get("C");
+ // equities are accounts of class CREDIT: the balance is given by credits
minus debits
+ BigDecimal balance = creditAmount.subtract(debitAmount);
+ accountMap.put("balance", balance);
+ transactionTotalsMap.put(transactionTotal.glAccountId, accountMap);
+}
+// Add the "retained earnings" account
+Map netIncomeResult = dispatcher.runSync("prepareIncomeStatement",
UtilMisc.toMap("organizationPartyId", organizationPartyId, "glFiscalTypeId",
parameters.glFiscalTypeId, "fromDate", fromDate, "thruDate",
thruDate,"userLogin", userLogin));
+BigDecimal netIncome = (BigDecimal)netIncomeResult.totalNetIncome;
+GenericValue retainedEarningsAccount =
delegator.findOne("GlAccountTypeDefault", UtilMisc.toMap("glAccountTypeId",
"RETAINED_EARNINGS", "organizationPartyId", organizationPartyId), true);
+if (retainedEarningsAccount) {
+ GenericValue retainedEarningsGlAccount =
retainedEarningsAccount.getRelatedOne("GlAccount");
+ transactionTotalsMap.put(retainedEarningsGlAccount.glAccountId,
UtilMisc.toMap("glAccountId",
retainedEarningsGlAccount.glAccountId,"accountName",
retainedEarningsGlAccount.accountName, "accountCode",
retainedEarningsGlAccount.accountCode, "balance", netIncome));
+}
+accountBalanceList = UtilMisc.sortMaps(transactionTotalsMap.values().asList(),
UtilMisc.toList("accountCode"));
+accountBalanceList.each { accountBalance ->
+ balanceTotal = balanceTotal + accountBalance.balance;
+}
+context.equityAccountBalanceList = accountBalanceList;
+context.equityAccountBalanceList.add(UtilMisc.toMap("accountName", "TOTAL
EQUITIES", "balance", balanceTotal));
+context.equityBalanceTotal = balanceTotal;
+
+context.liabilityEquityBalanceTotal = context.liabilityBalanceTotal +
context.equityBalanceTotal
+balanceTotalList.add(UtilMisc.toMap("totalName",
"AccountingTotalLiabilitiesAndEquities", "balance",
context.liabilityEquityBalanceTotal));
+
+context.balanceTotalList = balanceTotalList;
\ No newline at end of file
Propchange:
ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/BalanceSheet.groovy
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/BalanceSheet.groovy
------------------------------------------------------------------------------
svn:keywords = "Date Rev Author URL Id"
Propchange:
ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/BalanceSheet.groovy
------------------------------------------------------------------------------
svn:mime-type = text/plain