Author: jacopoc
Date: Wed Jan 13 10:44:07 2010
New Revision: 898710
URL: http://svn.apache.org/viewvc?rev=898710&view=rev
Log:
Removed old and unused services for data preparation of the balance sheet.
According to the discussion in the mailing list, moved the depreciation classes
from Debit to Credit group; also modified data preparation script for balance
sheet and financial time period closing.
Thanks to Adrian Crum and Mike Bates for the valuable information provided.
Modified:
ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml
ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml
ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/BalanceSheet.groovy
Modified: ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml?rev=898710&r1=898709&r2=898710&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml (original)
+++ ofbiz/trunk/applications/accounting/data/AccountingTypeData.xml Wed Jan 13
10:44:07 2010
@@ -211,9 +211,6 @@
|
|___> ASSET
| |_________> LONGTERM_ASSET
- | | |____> ACCUM_DEPRECIATION
- | | |
- | | |____> ACCUM_AMORTIZATION
| |
| |_________> CURRENT_ASSET
| |____> CASH_EQUIVALENT
@@ -236,6 +233,11 @@
|____> INVENTORY_ADJUST
CREDIT
+ |___> CONTRA_ASSET
+ | |___> ACCUM_DEPRECIATION
+ | |
+ | |___> ACCUM_AMORTIZATION
+ |
|___> REVENUE
|
|___> INCOME
@@ -285,12 +287,13 @@
<GlAccountClass description="Non-Cash Expense"
glAccountClassId="NON_CASH_EXPENSE" parentClassId="EXPENSE"/>
<GlAccountClass description="Depreciation" glAccountClassId="DEPRECIATION"
parentClassId="NON_CASH_EXPENSE"/>
<GlAccountClass description="Amortization" glAccountClassId="AMORTIZATION"
parentClassId="NON_CASH_EXPENSE"/>
- <!-- a special class for non-cash inventory adjustment expenses to avoid
duplicating opearting cash flow adjustments for inventory
+ <!-- a special class for non-cash inventory adjustment expenses to avoid
duplicating operating cash flow adjustments for inventory
account transactions, which adjust operating cash flows -->
<GlAccountClass description="Inventory Adjustment"
glAccountClassId="INVENTORY_ADJUST" parentClassId="NON_CASH_EXPENSE"/>
- <!-- same idea: these avoid double counting of depreciaton & amortization
-->
- <GlAccountClass description="Accumulated Depreciation"
glAccountClassId="ACCUM_DEPRECIATION" parentClassId="LONGTERM_ASSET"/>
- <GlAccountClass description="Accumulated Amortization"
glAccountClassId="ACCUM_AMORTIZATION" parentClassId="LONGTERM_ASSET"/>
+ <!-- same idea: these avoid double counting of depreciation & amortization
-->
+ <GlAccountClass description="Contra Asset" glAccountClassId="CONTRA_ASSET"
parentClassId="CREDIT"/>
+ <GlAccountClass description="Accumulated Depreciation"
glAccountClassId="ACCUM_DEPRECIATION" parentClassId="CONTRA_ASSET"/>
+ <GlAccountClass description="Accumulated Amortization"
glAccountClassId="ACCUM_AMORTIZATION" parentClassId="CONTRA_ASSET"/>
<GlAccountClass description="Non-Posting" glAccountClassId="NON_POSTING"
parentClassId="DEBIT"/>
<GlAccountType description="Accounts Receivable"
glAccountTypeId="ACCOUNTS_RECEIVABLE" hasTable="N" parentTypeId=""/>
Modified:
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml?rev=898710&r1=898709&r2=898710&view=diff
==============================================================================
---
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml
(original)
+++
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml
Wed Jan 13 10:44:07 2010
@@ -632,6 +632,12 @@
<call-class-method
class-name="org.ofbiz.accounting.util.UtilAccounting"
method-name="getDescendantGlAccountClassIds" ret-field="assetAccountClassIds">
<field field="assetGlAccountClass" type="GenericValue"/>
</call-class-method>
+ <entity-one entity-name="GlAccountClass"
value-field="contraAssetGlAccountClass">
+ <field-map field-name="glAccountClassId" value="CONTRA_ASSET"/>
+ </entity-one>
+ <call-class-method
class-name="org.ofbiz.accounting.util.UtilAccounting"
method-name="getDescendantGlAccountClassIds"
ret-field="contraAssetAccountClassIds">
+ <field field="contraAssetGlAccountClass" type="GenericValue"/>
+ </call-class-method>
<entity-one entity-name="GlAccountClass"
value-field="liabilityGlAccountClass">
<field-map field-name="glAccountClassId" value="LIABILITY"/>
</entity-one>
@@ -760,7 +766,7 @@
<store-value value-field="glAccountHistory"/>
</iterate>
- <!-- For all the accounts of class assets/liability/equity the
endingBalance of the last time period's history is added to the one of the
history of the period being closed -->
+ <!-- For all the accounts of class asset/contra-asset/liability/equity
the endingBalance of the last time period's history is added to the one of the
history of the period being closed -->
<if-not-empty field="lastClosedTimePeriod">
<entity-condition entity-name="GlAccountAndHistory"
list="lastPeriodGlAccountAndHistories">
<condition-list combine="and">
@@ -768,6 +774,7 @@
<condition-expr field-name="customTimePeriodId"
operator="equals" from-field="lastClosedTimePeriod.customTimePeriodId"/>
<condition-list combine="or">
<condition-expr field-name="glAccountClassId"
operator="in" from-field="assetAccountClassIds"/>
+ <condition-expr field-name="glAccountClassId"
operator="in" from-field="contraAssetAccountClassIds"/>
<condition-expr field-name="glAccountClassId"
operator="in" from-field="liabilityAccountClassIds"/>
<condition-expr field-name="glAccountClassId"
operator="in" from-field="equityAccountClassIds"/>
</condition-list>
@@ -1027,293 +1034,6 @@
<field-to-result field="glAccountTotalsMap"
result-name="glAccountTotalsMap"/>
</simple-method>
- <simple-method method-name="prepareBalanceSheet"
short-description="Prepare data for the Balance Sheet">
- <entity-one entity-name="GlAccountClass"
value-field="assetGlAccountClass">
- <field-map field-name="glAccountClassId" value="ASSET"/>
- </entity-one>
- <call-class-method
class-name="org.ofbiz.accounting.util.UtilAccounting"
method-name="getDescendantGlAccountClassIds" ret-field="assetAccountClassIds">
- <field field="assetGlAccountClass" type="GenericValue"/>
- </call-class-method>
- <entity-one entity-name="GlAccountClass"
value-field="liabilityGlAccountClass">
- <field-map field-name="glAccountClassId" value="LIABILITY"/>
- </entity-one>
- <call-class-method
class-name="org.ofbiz.accounting.util.UtilAccounting"
method-name="getDescendantGlAccountClassIds"
ret-field="liabilityAccountClassIds">
- <field field="liabilityGlAccountClass" type="GenericValue"/>
- </call-class-method>
- <entity-one entity-name="GlAccountClass"
value-field="equityGlAccountClass">
- <field-map field-name="glAccountClassId" value="EQUITY"/>
- </entity-one>
- <call-class-method
class-name="org.ofbiz.accounting.util.UtilAccounting"
method-name="getDescendantGlAccountClassIds" ret-field="equityAccountClassIds">
- <field field="equityGlAccountClass" type="GenericValue"/>
- </call-class-method>
-
- <!-- retrieve the last closed date for the same type of time period -->
- <set field="organizationPartyId"
from-field="parameters.organizationPartyId"/>
- <set field="partyIds"
value="${groovy:org.ofbiz.party.party.PartyWorker.getAssociatedPartyIdsByRelationshipType(delegator,
organizationPartyId, 'GROUP_ROLLUP')}" type="List"/>
- <set field="partyIds[]" from-field="organizationPartyId"/>
- <set field="findLastClosedDateInMap.organizationPartyId"
from-field="organizationPartyId"/>
- <set field="findLastClosedDateInMap.findDate"
from-field="parameters.thruDate" type="Date"/>
- <call-service service-name="findLastClosedDate"
in-map-name="findLastClosedDateInMap">
- <result-to-field result-name="lastClosedDate"/>
- <result-to-field result-name="lastClosedTimePeriod"/>
- </call-service>
- <if-empty field="lastClosedDate">
- <add-error><fail-message message="Unable to find a last closed
date for time period for organization
[${customTimePeriod.organizationPartyId}]"/></add-error>
- </if-empty>
- <check-errors/>
-
- <if-not-empty field="lastClosedTimePeriod">
- <entity-condition entity-name="GlAccountAndHistory"
list="glAccountAndHistories">
- <condition-list combine="and">
- <condition-expr field-name="organizationPartyId"
operator="in" from-field="partyIds"/>
- <condition-expr field-name="customTimePeriodId"
operator="equals" from-field="lastClosedTimePeriod.customTimePeriodId"/>
- <condition-expr field-name="glAccountClassId"
operator="in" from-field="assetAccountClassIds"/>
- </condition-list>
- <order-by field-name="glAccountId"/>
- </entity-condition>
- <iterate list="glAccountAndHistories" entry="glAccountAndHistory">
- <set
field="glAccountTotalsAssetMap[glAccountAndHistory.glAccountId]"
from-field="glAccountAndHistory.endingBalance"/>
- </iterate>
- <entity-condition entity-name="GlAccountAndHistory"
list="glAccountAndHistories">
- <condition-list combine="and">
- <condition-expr field-name="organizationPartyId"
operator="in" from-field="partyIds"/>
- <condition-expr field-name="customTimePeriodId"
operator="equals" from-field="lastClosedTimePeriod.customTimePeriodId"/>
- <condition-expr field-name="glAccountClassId"
operator="in" from-field="liabilityAccountClassIds"/>
- </condition-list>
- <order-by field-name="glAccountId"/>
- </entity-condition>
- <iterate list="glAccountAndHistories" entry="glAccountAndHistory">
- <set
field="glAccountTotalsLiabilityMap[glAccountAndHistory.glAccountId]"
from-field="glAccountAndHistory.endingBalance"/>
- </iterate>
- <entity-condition entity-name="GlAccountAndHistory"
list="glAccountAndHistories">
- <condition-list combine="and">
- <condition-expr field-name="organizationPartyId"
operator="in" from-field="partyIds"/>
- <condition-expr field-name="customTimePeriodId"
operator="equals" from-field="lastClosedTimePeriod.customTimePeriodId"/>
- <condition-expr field-name="glAccountClassId"
operator="in" from-field="equityAccountClassIds"/>
- </condition-list>
- <order-by field-name="glAccountId"/>
- </entity-condition>
- <iterate list="glAccountAndHistories" entry="glAccountAndHistory">
- <set
field="glAccountTotalsEquityMap[glAccountAndHistory.glAccountId]"
from-field="glAccountAndHistory.endingBalance"/>
- </iterate>
- </if-not-empty>
-
- <entity-condition entity-name="AcctgTransAndEntries"
list="acctgTransAndEntries">
- <condition-list combine="and">
- <condition-expr field-name="organizationPartyId" operator="in"
from-field="partyIds"/>
- <condition-expr field-name="isPosted" operator="equals"
value="Y"/>
- <condition-expr field-name="glFiscalTypeId" operator="equals"
from-field="parameters.glFiscalTypeId"/>
- <condition-expr field-name="transactionDate"
operator="greater-equals" from-field="lastClosedDate"/>
- <condition-expr field-name="transactionDate" operator="less"
from-field="parameters.thruDate"/> <!-- FIXME: Date to Timestamp -->
- <condition-expr field-name="acctgTransTypeId"
operator="not-equals" value="PERIOD_CLOSING"/>
- <condition-expr field-name="glAccountClassId" operator="in"
from-field="assetAccountClassIds"/>
- </condition-list>
- <order-by field-name="acctgTransId"/>
- <order-by field-name="acctgTransEntrySeqId"/>
- </entity-condition>
- <iterate list="acctgTransAndEntries" entry="acctgTransAndEntry">
- <set field="amount" from-field="acctgTransAndEntry.amount"/>
- <if-compare field="acctgTransAndEntry.debitCreditFlag"
operator="equals" value="C">
- <calculate field="amount">
- <calcop field="amount" operator="negative"/>
- </calculate>
- </if-compare>
- <if-empty
field="glAccountTotalsAssetMap[acctgTransAndEntry.glAccountId]">
- <set
field="glAccountTotalsAssetMap[acctgTransAndEntry.glAccountId]" value="0.0"
type="BigDecimal"/>
- </if-empty>
- <calculate
field="glAccountTotalsAssetMap[acctgTransAndEntry.glAccountId]">
- <calcop
field="glAccountTotalsAssetMap[acctgTransAndEntry.glAccountId]"
operator="add"><calcop field="amount" operator="get"/></calcop>
- </calculate>
- </iterate>
- <entity-condition entity-name="AcctgTransAndEntries"
list="acctgTransAndEntries">
- <condition-list combine="and">
- <condition-expr field-name="organizationPartyId" operator="in"
from-field="partyIds"/>
- <condition-expr field-name="isPosted" operator="equals"
value="Y"/>
- <condition-expr field-name="glFiscalTypeId" operator="equals"
from-field="parameters.glFiscalTypeId"/>
- <condition-expr field-name="transactionDate"
operator="greater-equals" from-field="lastClosedDate"/>
- <condition-expr field-name="transactionDate" operator="less"
from-field="parameters.thruDate"/> <!-- FIXME: Date to Timestamp -->
- <condition-expr field-name="acctgTransTypeId"
operator="not-equals" value="PERIOD_CLOSING"/>
- <condition-expr field-name="glAccountClassId" operator="in"
from-field="liabilityAccountClassIds"/>
- </condition-list>
- <order-by field-name="acctgTransId"/>
- <order-by field-name="acctgTransEntrySeqId"/>
- </entity-condition>
- <iterate list="acctgTransAndEntries" entry="acctgTransAndEntry">
- <set field="amount" from-field="acctgTransAndEntry.amount"/>
- <if-compare field="acctgTransAndEntry.debitCreditFlag"
operator="equals" value="D">
- <calculate field="amount">
- <calcop field="amount" operator="negative"/>
- </calculate>
- </if-compare>
- <if-empty
field="glAccountTotalsLiabilityMap[acctgTransAndEntry.glAccountId]">
- <set
field="glAccountTotalsLiabilityMap[acctgTransAndEntry.glAccountId]" value="0.0"
type="BigDecimal"/>
- </if-empty>
- <calculate
field="glAccountTotalsLiabilityMap[acctgTransAndEntry.glAccountId]">
- <calcop
field="glAccountTotalsLiabilityMap[acctgTransAndEntry.glAccountId]"
operator="add"><calcop field="amount" operator="get"/></calcop>
- </calculate>
- </iterate>
- <entity-condition entity-name="AcctgTransAndEntries"
list="acctgTransAndEntries">
- <condition-list combine="and">
- <condition-expr field-name="organizationPartyId" operator="in"
from-field="partyIds"/>
- <condition-expr field-name="isPosted" operator="equals"
value="Y"/>
- <condition-expr field-name="glFiscalTypeId" operator="equals"
from-field="parameters.glFiscalTypeId"/>
- <condition-expr field-name="transactionDate"
operator="greater-equals" from-field="lastClosedDate"/>
- <condition-expr field-name="transactionDate" operator="less"
from-field="parameters.thruDate"/> <!-- FIXME: Date to Timestamp -->
- <condition-expr field-name="acctgTransTypeId"
operator="not-equals" value="PERIOD_CLOSING"/>
- <condition-expr field-name="glAccountClassId" operator="in"
from-field="equityAccountClassIds"/>
- </condition-list>
- <order-by field-name="acctgTransId"/>
- <order-by field-name="acctgTransEntrySeqId"/>
- </entity-condition>
- <iterate list="acctgTransAndEntries" entry="acctgTransAndEntry">
- <set field="amount" from-field="acctgTransAndEntry.amount"/>
- <if-compare field="acctgTransAndEntry.debitCreditFlag"
operator="equals" value="D">
- <calculate field="amount">
- <calcop field="amount" operator="negative"/>
- </calculate>
- </if-compare>
- <if-empty
field="glAccountTotalsEquityMap[acctgTransAndEntry.glAccountId]">
- <set
field="glAccountTotalsEquityMap[acctgTransAndEntry.glAccountId]" value="0.0"
type="BigDecimal"/>
- </if-empty>
- <calculate
field="glAccountTotalsEquityMap[acctgTransAndEntry.glAccountId]">
- <calcop
field="glAccountTotalsEquityMap[acctgTransAndEntry.glAccountId]"
operator="add"><calcop field="amount" operator="get"/></calcop>
- </calculate>
- </iterate>
-
- <set field="prepareIncomeStatementInMap.organizationPartyId"
from-field="organizationPartyId"/>
- <set field="prepareIncomeStatementInMap.glFiscalTypeId"
from-field="parameters.glFiscalTypeId"/>
- <set field="prepareIncomeStatementInMap.fromDate"
from-field="lastClosedDate"/>
- <set field="prepareIncomeStatementInMap.thruDate"
from-field="parameters.thruDate"/>
- <call-service service-name="prepareIncomeStatement"
in-map-name="prepareIncomeStatementInMap">
- <result-to-field result-name="totalNetIncome"/>
- </call-service>
- <!-- get the retained earnings account -->
- <entity-one entity-name="GlAccountTypeDefault"
value-field="retainedEarningsAccount" use-cache="true">
- <field-map field-name="organizationPartyId"/>
- <field-map field-name="glAccountTypeId" value="RETAINED_EARNINGS"/>
- </entity-one>
- <if-not-empty field="retainedEarningsAccount">
- <if-empty
field="glAccountTotalsEquityMap[retainedEarningsAccount.glAccountId]">
- <set
field="glAccountTotalsEquityMap[retainedEarningsAccount.glAccountId]"
value="0.0" type="BigDecimal"/>
- </if-empty>
- <calculate
field="glAccountTotalsEquityMap[retainedEarningsAccount.glAccountId]">
- <calcop
field="glAccountTotalsEquityMap[retainedEarningsAccount.glAccountId]"
operator="add"><calcop field="totalNetIncome" operator="get"/></calcop>
- </calculate>
- </if-not-empty>
-
- <iterate-map map="glAccountTotalsAssetMap" key="glAccountId"
value="totalAmount">
- <clear-field field="glAccountTotalMap"/>
- <set field="glAccountTotalMap.glAccountId"
from-field="glAccountId"/>
- <set field="glAccountTotalMap.totalAmount"
from-field="totalAmount"/>
- <set field="assetBalancesList[]" from-field="glAccountTotalMap"/>
- </iterate-map>
- <iterate-map map="glAccountTotalsLiabilityMap" key="glAccountId"
value="totalAmount">
- <clear-field field="glAccountTotalMap"/>
- <set field="glAccountTotalMap.glAccountId"
from-field="glAccountId"/>
- <set field="glAccountTotalMap.totalAmount"
from-field="totalAmount"/>
- <set field="liabilityBalancesList[]"
from-field="glAccountTotalMap"/>
- </iterate-map>
- <iterate-map map="glAccountTotalsEquityMap" key="glAccountId"
value="totalAmount">
- <clear-field field="glAccountTotalMap"/>
- <set field="glAccountTotalMap.glAccountId"
from-field="glAccountId"/>
- <set field="glAccountTotalMap.totalAmount"
from-field="totalAmount"/>
- <set field="equityBalancesList[]" from-field="glAccountTotalMap"/>
- </iterate-map>
-
- <field-to-result field="assetBalancesList"
result-name="assetBalancesList"/>
- <field-to-result field="liabilityBalancesList"
result-name="liabilityBalancesList"/>
- <field-to-result field="equityBalancesList"
result-name="equityBalancesList"/>
- </simple-method>
-
- <simple-method method-name="prepareComparativeBalanceSheet"
short-description="Prepare data for the Comparative Balance Sheet">
- <set field="prepareBalanceSheetInMap.organizationPartyId"
from-field="parameters.organizationPartyId"/>
- <set field="prepareBalanceSheetInMap.glFiscalTypeId"
from-field="parameters.period1GlFiscalTypeId"/>
- <set field="prepareBalanceSheetInMap.thruDate"
from-field="parameters.period1ThruDate"/>
- <call-service service-name="prepareBalanceSheet"
in-map-name="prepareBalanceSheetInMap">
- <result-to-field result-name="assetBalancesList"
field="period1AssetBalancesList"/>
- <result-to-field result-name="liabilityBalancesList"
field="period1LiabilityBalancesList"/>
- <result-to-field result-name="equityBalancesList"
field="period1EquityBalancesList"/>
- </call-service>
- <set field="prepareBalanceSheetInMap.glFiscalTypeId"
from-field="parameters.period2GlFiscalTypeId"/>
- <set field="prepareBalanceSheetInMap.thruDate"
from-field="parameters.period2ThruDate"/>
- <call-service service-name="prepareBalanceSheet"
in-map-name="prepareBalanceSheetInMap">
- <result-to-field result-name="assetBalancesList"
field="period2AssetBalancesList"/>
- <result-to-field result-name="liabilityBalancesList"
field="period2LiabilityBalancesList"/>
- <result-to-field result-name="equityBalancesList"
field="period2EquityBalancesList"/>
- </call-service>
-
- <iterate list="period2AssetBalancesList" entry="period2AssetBalance">
- <set field="assetBalancesMap[period2AssetBalance.glAccountId]"
from-field="period2AssetBalance.totalAmount"/>
- </iterate>
- <iterate list="period1AssetBalancesList" entry="period1AssetBalance">
- <set field="amount" from-field="period1AssetBalance.totalAmount"/>
- <calculate field="amount">
- <calcop field="amount" operator="negative"/>
- </calculate>
- <if-empty
field="assetBalancesMap[period1AssetBalance.glAccountId]">
- <set field="assetBalancesMap[period1AssetBalance.glAccountId]"
value="0.0" type="BigDecimal"/>
- </if-empty>
- <calculate
field="assetBalancesMap[period1AssetBalance.glAccountId]">
- <calcop
field="assetBalancesMap[period1AssetBalance.glAccountId]"
operator="add"><calcop field="amount" operator="get"/></calcop>
- </calculate>
- </iterate>
-
- <iterate list="period2LiabilityBalancesList"
entry="period2LiabilityBalance">
- <set
field="liabilityBalancesMap[period2LiabilityBalance.glAccountId]"
from-field="period2LiabilityBalance.totalAmount"/>
- </iterate>
- <iterate list="period1LiabilityBalancesList"
entry="period1LiabilityBalance">
- <set field="amount"
from-field="period1LiabilityBalance.totalAmount"/>
- <calculate field="amount">
- <calcop field="amount" operator="negative"/>
- </calculate>
- <if-empty
field="liabilityBalancesMap[period1LiabilityBalance.glAccountId]">
- <set
field="liabilityBalancesMap[period1LiabilityBalance.glAccountId]" value="0.0"
type="BigDecimal"/>
- </if-empty>
- <calculate
field="liabilityBalancesMap[period1LiabilityBalance.glAccountId]">
- <calcop
field="liabilityBalancesMap[period1LiabilityBalance.glAccountId]"
operator="add"><calcop field="amount" operator="get"/></calcop>
- </calculate>
- </iterate>
-
- <iterate list="period2EquityBalancesList" entry="period2EquityBalance">
- <set field="equityBalancesMap[period2EquityBalance.glAccountId]"
from-field="period2EquityBalance.totalAmount"/>
- </iterate>
- <iterate list="period1EquityBalancesList" entry="period1EquityBalance">
- <set field="amount" from-field="period1EquityBalance.totalAmount"/>
- <calculate field="amount">
- <calcop field="amount" operator="negative"/>
- </calculate>
- <if-empty
field="equityBalancesMap[period1EquityBalance.glAccountId]">
- <set
field="equityBalancesMap[period1EquityBalance.glAccountId]" value="0.0"
type="BigDecimal"/>
- </if-empty>
- <calculate
field="equityBalancesMap[period1EquityBalance.glAccountId]">
- <calcop
field="equityBalancesMap[period1EquityBalance.glAccountId]"
operator="add"><calcop field="amount" operator="get"/></calcop>
- </calculate>
- </iterate>
-
- <iterate-map map="assetBalancesMap" key="glAccountId"
value="totalAmount">
- <clear-field field="glAccountTotalMap"/>
- <set field="glAccountTotalMap.glAccountId"
from-field="glAccountId"/>
- <set field="glAccountTotalMap.totalAmount"
from-field="totalAmount"/>
- <set field="assetBalancesList[]" from-field="glAccountTotalMap"/>
- </iterate-map>
- <iterate-map map="liabilityBalancesMap" key="glAccountId"
value="totalAmount">
- <clear-field field="glAccountTotalMap"/>
- <set field="glAccountTotalMap.glAccountId"
from-field="glAccountId"/>
- <set field="glAccountTotalMap.totalAmount"
from-field="totalAmount"/>
- <set field="liabilityBalancesList[]"
from-field="glAccountTotalMap"/>
- </iterate-map>
- <iterate-map map="equityBalancesMap" key="glAccountId"
value="totalAmount">
- <clear-field field="glAccountTotalMap"/>
- <set field="glAccountTotalMap.glAccountId"
from-field="glAccountId"/>
- <set field="glAccountTotalMap.totalAmount"
from-field="totalAmount"/>
- <set field="equityBalancesList[]" from-field="glAccountTotalMap"/>
- </iterate-map>
-
- <field-to-result field="assetBalancesList"
result-name="assetBalancesList"/>
- <field-to-result field="liabilityBalancesList"
result-name="liabilityBalancesList"/>
- <field-to-result field="equityBalancesList"
result-name="equityBalancesList"/>
- </simple-method>
-
<!-- Services for the automatic creation of accounting transactions based
on business transactions
Typically, these services are triggered by SECAs -->
Modified: ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml?rev=898710&r1=898709&r2=898710&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml
(original)
+++ ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml Wed Jan
13 10:44:07 2010
@@ -306,28 +306,6 @@
<attribute name="totalNetIncome" type="BigDecimal" mode="OUT"
optional="false"/>
<attribute name="glAccountTotalsMap" type="Map" mode="OUT"
optional="true"/>
</service>
- <service name="prepareBalanceSheet" engine="simple"
-
location="component://accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml"
invoke="prepareBalanceSheet" auth="true">
- <description>Prepare the data for the Balance Sheet</description>
- <attribute name="organizationPartyId" type="String" mode="IN"
optional="false"/>
- <attribute name="thruDate" type="Timestamp" mode="IN"
optional="false"/>
- <attribute name="glFiscalTypeId" type="String" mode="IN"
optional="false"/>
- <attribute name="assetBalancesList" type="List" mode="OUT"
optional="true"/>
- <attribute name="liabilityBalancesList" type="List" mode="OUT"
optional="true"/>
- <attribute name="equityBalancesList" type="List" mode="OUT"
optional="true"/>
- </service>
- <service name="prepareComparativeBalanceSheet" engine="simple"
-
location="component://accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml"
invoke="prepareComparativeBalanceSheet" auth="true">
- <description>Prepare the data for the Balance Sheet</description>
- <attribute name="organizationPartyId" type="String" mode="IN"
optional="false"/>
- <attribute name="period1ThruDate" type="Timestamp" mode="IN"
optional="false"/>
- <attribute name="period1GlFiscalTypeId" type="String" mode="IN"
optional="false"/>
- <attribute name="period2ThruDate" type="Timestamp" mode="IN"
optional="false"/>
- <attribute name="period2GlFiscalTypeId" type="String" mode="IN"
optional="false"/>
- <attribute name="assetBalancesList" type="List" mode="OUT"
optional="true"/>
- <attribute name="liabilityBalancesList" type="List" mode="OUT"
optional="true"/>
- <attribute name="equityBalancesList" type="List" mode="OUT"
optional="true"/>
- </service>
<!-- Miscellaneous Ledger-related services -->
<service name="getGlAccountFromAccountType" engine="simple"
Modified:
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=898710&r1=898709&r2=898710&view=diff
==============================================================================
---
ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/BalanceSheet.groovy
(original)
+++
ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/BalanceSheet.groovy
Wed Jan 13 10:44:07 2010
@@ -44,6 +44,8 @@
// 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 contraAssetGlAccountClass = delegator.findOne("GlAccountClass",
UtilMisc.toMap("glAccountClassId", "CONTRA_ASSET"), true);
+List contraAssetAccountClassIds =
UtilAccounting.getDescendantGlAccountClassIds(contraAssetGlAccountClass);
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);
@@ -68,6 +70,7 @@
GenericValue lastClosedTimePeriod =
(GenericValue)lastClosedTimePeriodResult.lastClosedTimePeriod;
// Get the opening balances of all the accounts
Map assetOpeningBalances = [:];
+Map contraAssetOpeningBalances = [:];
Map currentAssetOpeningBalances = [:];
Map longtermAssetOpeningBalances = [:];
Map liabilityOpeningBalances = [:];
@@ -86,6 +89,16 @@
}
timePeriodAndExprs = FastList.newInstance();
timePeriodAndExprs.add(EntityCondition.makeCondition("organizationPartyId",
EntityOperator.IN, partyIds));
+ timePeriodAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, contraAssetAccountClassIds));
+ 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"));
+ contraAssetOpeningBalances.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));
@@ -253,6 +266,45 @@
context.longtermAssetBalanceTotal = balanceTotal;
balanceTotalList.add(UtilMisc.toMap("totalName", "AccountingLongTermAssets",
"balance", balanceTotal));
+// CONTRA ASSETS
+// account balances
+accountBalanceList = [];
+transactionTotals = [];
+balanceTotal = BigDecimal.ZERO;
+List contraAssetAndExprs = FastList.newInstance(mainAndExprs);
+contraAssetAndExprs.add(EntityCondition.makeCondition("glAccountClassId",
EntityOperator.IN, contraAssetAccountClassIds));
+transactionTotals = delegator.findList("AcctgTransEntrySums",
EntityCondition.makeCondition(contraAssetAndExprs, EntityOperator.AND),
UtilMisc.toSet("glAccountId", "accountName", "accountCode", "debitCreditFlag",
"amount"), UtilMisc.toList("glAccountId"), null, false);
+
+transactionTotalsMap = [:];
+transactionTotalsMap.putAll(contraAssetOpeningBalances);
+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");
+ // contra assets 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.contraAssetAccountBalanceList = accountBalanceList;
+context.assetAccountBalanceList.addAll(accountBalanceList);
+context.assetAccountBalanceList.add(UtilMisc.toMap("accountName", "TOTAL
ACCUMULATED DEPRECIATION", "balance", balanceTotal));
+context.contraAssetBalanceTotal = balanceTotal;
+balanceTotalList.add(UtilMisc.toMap("totalName",
"AccountingLongTermAssetsAtCost", "balance", (context.longtermAssetBalanceTotal
- context.contraAssetBalanceTotal)));
+
// LIABILITY
// account balances
accountBalanceList = [];