|
Author: jacopoc
Date: Thu Dec 3 15:27:10 2009 New Revision: 886815 URL: http://svn.apache.org/viewvc?rev=886815&view=rev Log: Completely reimplemented Income Statement: improved data preparation code, added more subtotals, cleaned up code, improved layout (especially of PDF version); still some work needs to be done (labels, layout). Added: ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy (with props) Modified: ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/MonthlyTrialBalance.groovy ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml ofbiz/trunk/applications/accounting/widget/ReportFinancialSummaryForms.xml ofbiz/trunk/applications/accounting/widget/ReportFinancialSummaryScreens.xml Added: ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy?rev=886815&view=auto ============================================================================== --- ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy (added) +++ ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy Thu Dec 3 15:27:10 2009 @@ -0,0 +1,282 @@ +/* + * 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 javolution.util.FastList; + +if (!fromDate) { + return; +} +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 revenueGlAccountClass = delegator.findOne("GlAccountClass", UtilMisc.toMap("glAccountClassId", "REVENUE"), true); +List revenueAccountClassIds = UtilAccounting.getDescendantGlAccountClassIds(revenueGlAccountClass); +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); +List expenseAccountClassIds = UtilAccounting.getDescendantGlAccountClassIds(expenseGlAccountClass); +GenericValue cogsExpenseGlAccountClass = delegator.findOne("GlAccountClass", UtilMisc.toMap("glAccountClassId", "COGS_EXPENSE"), true); +List cogsExpenseAccountClassIds = UtilAccounting.getDescendantGlAccountClassIds(cogsExpenseGlAccountClass); +GenericValue sgaExpenseGlAccountClass = delegator.findOne("GlAccountClass", UtilMisc.toMap("glAccountClassId", "SGA_EXPENSE"), true); +List sgaExpenseAccountClassIds = UtilAccounting.getDescendantGlAccountClassIds(sgaExpenseGlAccountClass); + +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)); + +// REVENUE +// account balances +accountBalanceList = []; +transactionTotals = []; +balanceTotal = BigDecimal.ZERO; +List revenueAndExprs = FastList.newInstance(mainAndExprs); +revenueAndExprs.add(EntityCondition.makeCondition("glAccountClassId", EntityOperator.IN, revenueAccountClassIds)); +transactionTotals = delegator.findList("AcctgTransEntrySums", EntityCondition.makeCondition(revenueAndExprs, 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"); + // revenues 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 = transactionTotalsMap.values().asList(); + // revenues are accounts of class CREDIT: the balance is given by credits minus debits + balanceTotal = balanceTotalCredit.subtract(balanceTotalDebit); +} +context.revenueAccountBalanceList = accountBalanceList; +context.revenueAccountBalanceList.add(UtilMisc.toMap("accountName", "TOTAL REVENUES", "balance", balanceTotal)); +context.revenueBalanceTotal = balanceTotal; + +// EXPENSE +// account balances +accountBalanceList = []; +transactionTotals = []; +balanceTotal = BigDecimal.ZERO; +List expenseAndExprs = FastList.newInstance(mainAndExprs); +expenseAndExprs.add(EntityCondition.makeCondition("glAccountClassId", EntityOperator.IN, expenseAccountClassIds)); +transactionTotals = delegator.findList("AcctgTransEntrySums", EntityCondition.makeCondition(expenseAndExprs, 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"); + // expenses 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 = transactionTotalsMap.values().asList(); + // revenues are accounts of class DEBIT: the balance is given by debits minus credits + balanceTotal = balanceTotalDebit.subtract(balanceTotalCredit); +} +context.expenseAccountBalanceList = accountBalanceList; +context.expenseAccountBalanceList.add(UtilMisc.toMap("accountName", "TOTAL EXPENSES", "balance", balanceTotal)); +context.expenseBalanceTotal = balanceTotal; + +// COST OF GOODS SOLD (COGS_EXPENSE) +// account balances +accountBalanceList = []; +transactionTotals = []; +balanceTotal = BigDecimal.ZERO; +List cogsExpenseAndExprs = FastList.newInstance(mainAndExprs); +cogsExpenseAndExprs.add(EntityCondition.makeCondition("glAccountClassId", EntityOperator.IN, cogsExpenseAccountClassIds)); +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"); + // expenses 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 = transactionTotalsMap.values().asList(); + // revenues are accounts of class DEBIT: the balance is given by debits minus credits + balanceTotal = balanceTotalDebit.subtract(balanceTotalCredit); +} +context.cogsExpense = balanceTotal; + +// OPERATING EXPENSES (SGA_EXPENSE) +// account balances +accountBalanceList = []; +transactionTotals = []; +balanceTotal = BigDecimal.ZERO; +List sgaExpenseAndExprs = FastList.newInstance(mainAndExprs); +sgaExpenseAndExprs.add(EntityCondition.makeCondition("glAccountClassId", EntityOperator.IN, sgaExpenseAccountClassIds)); +transactionTotals = delegator.findList("AcctgTransEntrySums", EntityCondition.makeCondition(sgaExpenseAndExprs, 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"); + // expenses 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 = transactionTotalsMap.values().asList(); + // revenues are accounts of class DEBIT: the balance is given by debits minus credits + balanceTotal = balanceTotalDebit.subtract(balanceTotalCredit); +} +sgaExpense = balanceTotal; + +// INCOME +// account balances +accountBalanceList = []; +transactionTotals = []; +balanceTotal = BigDecimal.ZERO; +List incomeAndExprs = FastList.newInstance(mainAndExprs); +incomeAndExprs.add(EntityCondition.makeCondition("glAccountClassId", EntityOperator.IN, incomeAccountClassIds)); +transactionTotals = delegator.findList("AcctgTransEntrySums", EntityCondition.makeCondition(incomeAndExprs, 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"); + // income 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 = transactionTotalsMap.values().asList(); + // incomes are accounts of class CREDIT: the balance is given by credits minus debits + balanceTotal = balanceTotalCredit.subtract(balanceTotalDebit); +} +context.incomeAccountBalanceList = accountBalanceList; +context.incomeAccountBalanceList.add(UtilMisc.toMap("accountName", "TOTAL INCOME", "balance", balanceTotal)); +context.incomeBalanceTotal = balanceTotal; + +// GROSS MARGIN = NET SALES - COSTS OF GOODS SOLD +context.grossMargin = (context.revenueBalanceTotal).subtract(context.cogsExpense); +// OPERATING EXPENSES +context.sgaExpense = sgaExpense; +// INCOME FROM OPERATIONS = GROSS MARGIN - OPERATING EXPENSES +context.incomeFromOperations = (context.grossMargin).subtract(context.sgaExpense); +// NET INCOME +context.netIncome = (context.revenueBalanceTotal).add(context.incomeBalanceTotal).subtract(context.expenseBalanceTotal); Propchange: ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy ------------------------------------------------------------------------------ svn:eol-style = native Propchange: ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy ------------------------------------------------------------------------------ svn:keywords = Date Rev Author URL Id Propchange: ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/MonthlyTrialBalance.groovy URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/MonthlyTrialBalance.groovy?rev=886815&r1=886814&r2=886815&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/MonthlyTrialBalance.groovy (original) +++ ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/actions/reports/MonthlyTrialBalance.groovy Thu Dec 3 15:27:10 2009 @@ -62,18 +62,6 @@ context.financialYearFromDate = customTimePeriodFromDate; } } - - - if (parameters.isIncomeStatement) { - prepareIncomeStatement = dispatcher.runSync("prepareIncomeStatement", - [fromDate : fromDate, thruDate : thruDate, organizationPartyId : organizationPartyId, glFiscalTypeId : parameters.glFiscalTypeId, userLogin : userLogin]); - glAccountTotalsMap = prepareIncomeStatement.glAccountTotalsMap; - if (glAccountTotalsMap) { - context.glAccountIncomeList = glAccountTotalsMap.income; - context.glAccountExpenseList = glAccountTotalsMap.expenses; - context.totalNetIncome = prepareIncomeStatement.totalNetIncome; - } - } } context.monthList = ExpressionUiHelper.getMonthValueList(locale); Modified: ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml?rev=886815&r1=886814&r2=886815&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml (original) +++ ofbiz/trunk/applications/accounting/webapp/accounting/WEB-INF/controller.xml Thu Dec 3 15:27:10 2009 @@ -2219,12 +2219,6 @@ <response name="success" type="view" value="ComparativeIncomeStatement"/> <response name="error" type="view" value="ComparativeIncomeStatement"/> </request-map> - <request-map uri="prepareIncomeStatement"> - <security https="true" auth="true"/> - <event type="service" invoke="prepareIncomeStatement"/> - <response name="success" type="view" value="IncomeStatement"/> - <response name="error" type="view" value="IncomeStatement"/> - </request-map> <request-map uri="BalanceSheet"><security https="true" auth="true"/><response name="success" type="view" value="BalanceSheet"/></request-map> <request-map uri="prepareBalanceSheet"> <security https="true" auth="true"/> Modified: ofbiz/trunk/applications/accounting/widget/ReportFinancialSummaryForms.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/widget/ReportFinancialSummaryForms.xml?rev=886815&r1=886814&r2=886815&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/widget/ReportFinancialSummaryForms.xml (original) +++ ofbiz/trunk/applications/accounting/widget/ReportFinancialSummaryForms.xml Thu Dec 3 15:27:10 2009 @@ -80,7 +80,6 @@ </form> <form name="IncomeStatementParameters" type="single" header-row-style="header-row" default-table-style="basic-table"> - <field name="isIncomeStatement"><hidden value="true"/></field> <field name="selectedMonth" title="${uiLabelMap.CommonMonth}"> <drop-down> <list-options list-name="monthList" key-name="value" description="${description}"/> @@ -98,30 +97,38 @@ <field name="submitButton" title="${uiLabelMap.CommonSubmit}" widget-style="smallSubmit" tooltip="Please enter From and Thru date in fields above"><submit button-type="button"/></field> </form> - <form name="IncomeStatementList" type="list" list-name="glAccountIncomeList" + <form name="IncomeStatementRevenues" type="list" list-name="revenueAccountBalanceList" odd-row-style="alternate-row" default-table-style="basic-table hover-bar"> - <field name="glAccountId"> - <hyperlink target="FindAcctgTransEntries" description="${glAccountId}"> + <field name="accountCode"> + <hyperlink target="FindAcctgTransEntries" description="${accountCode}"> <parameter param-name="glAccountId"/> <parameter param-name="organizationPartyId"/> </hyperlink> </field> - <field name="accountName" entry-name="glAccountId"><display-entity entity-name="GlAccount" key-field-name="glAccountId" description="${accountName}"/></field> - <field name="totalAmount"><display type="currency" currency="${currencyUomId}"/></field> - <field name="totalOfCurrentFiscalPeriod"><display type="currency" currency="${currencyUomId}"/></field> + <field name="accountName" title-area-style="tableheadwide"><display description="${accountName}"/></field> + <field name="balance" widget-style="tabletextright"><display type="currency" currency="${currencyUomId}"/></field> </form> - - <form name="ExpenseStatementList" type="list" list-name="glAccountExpenseList" + <form name="IncomeStatementExpenses" type="list" list-name="expenseAccountBalanceList" odd-row-style="alternate-row" default-table-style="basic-table hover-bar"> - <field name="glAccountId"> - <hyperlink target="FindAcctgTransEntries" description="${glAccountId}"> + <field name="accountCode"> + <hyperlink target="FindAcctgTransEntries" description="${accountCode}"> <parameter param-name="glAccountId"/> <parameter param-name="organizationPartyId"/> </hyperlink> </field> - <field name="accountName" entry-name="glAccountId"><display-entity entity-name="GlAccount" key-field-name="glAccountId" description="${accountName}"/></field> - <field name="totalAmount"><display type="currency" currency="${currencyUomId}"/></field> - <field name="totalOfCurrentFiscalPeriod"><display type="currency" currency="${currencyUomId}"/></field> + <field name="accountName" title-area-style="tableheadwide"><display description="${accountName}"/></field> + <field name="balance" widget-style="tabletextright"><display type="currency" currency="${currencyUomId}"/></field> + </form> + <form name="IncomeStatementIncome" type="list" list-name="incomeAccountBalanceList" + odd-row-style="alternate-row" default-table-style="basic-table hover-bar"> + <field name="accountCode"> + <hyperlink target="FindAcctgTransEntries" description="${accountCode}"> + <parameter param-name="glAccountId"/> + <parameter param-name="organizationPartyId"/> + </hyperlink> + </field> + <field name="accountName" title-area-style="tableheadwide"><display description="${accountName}"/></field> + <field name="balance" widget-style="tabletextright"><display type="currency" currency="${currencyUomId}"/></field> </form> <form name="BalanceSheetParameters" type="single" target="prepareBalanceSheet" Modified: ofbiz/trunk/applications/accounting/widget/ReportFinancialSummaryScreens.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/widget/ReportFinancialSummaryScreens.xml?rev=886815&r1=886814&r2=886815&view=diff ============================================================================== --- ofbiz/trunk/applications/accounting/widget/ReportFinancialSummaryScreens.xml (original) +++ ofbiz/trunk/applications/accounting/widget/ReportFinancialSummaryScreens.xml Thu Dec 3 15:27:10 2009 @@ -288,14 +288,13 @@ <set field="partyAcctgPreference" from-field="result.partyAccountingPreference"/> <set field="currencyUomId" from-field="partyAcctgPreference.baseCurrencyUomId"/> <!-- Get a default fromDate --> - <set field="findLastClosedDateInMap.organizationPartyId" from-field="organizationPartyId"/> - <service service-name="findLastClosedDate" in-map-name="findLastClosedDateInMap"> - <result-to-field result-name="lastClosedDate"/> - <result-to-field result-name="lastClosedTimePeriod"/> + <service service-name="findLastClosedDate" result-map="findLastClosedDateOutMap"> + <field-map field-name="organizationPartyId" from-field="organizationPartyId"/> </service> - <set field="fromDate" from-field="parameters.fromDate" type="Timestamp" default-value="${lastClosedDate}"/> + <set field="fromDate" from-field="parameters.fromDate" type="Timestamp" default-value="${findLastClosedDateOutMap.lastClosedDate}"/> <set field="thruDate" from-field="parameters.thruDate" type="Timestamp" default-value="${nowTimestamp}"/> <script location="component://accounting/webapp/accounting/WEB-INF/actions/reports/MonthlyTrialBalance.groovy"/> + <script location="component://accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy"/> </actions> <widgets> <decorator-screen name="CommonOrganizationAccountingReportsDecorator" location="${parameters.mainDecoratorLocation}"> @@ -312,27 +311,46 @@ <link text="${uiLabelMap.AccountingExportAsCsv}" style="button" target="IncomeStatementListCsv.csv"> <parameter param-name="fromDate" from-field="parameters.fromDate"/> <parameter param-name="thruDate" from-field="parameters.thruDate"/> - <parameter param-name="isIncomeStatement" value="true"/> - <parameter param-name="selectedMonth" from-field="parameters.selectedMonth"/> <parameter param-name="organizationPartyId" from-field="parameters.organizationPartyId"/> <parameter param-name="glFiscalTypeId" from-field="parameters.glFiscalTypeId"/> </link> <link text="${uiLabelMap.AccountingExportAsPdf}" style="button" target="IncomeStatementListPdf.pdf"> <parameter param-name="fromDate" from-field="parameters.fromDate"/> <parameter param-name="thruDate" from-field="parameters.thruDate"/> - <parameter param-name="isIncomeStatement" value="true"/> - <parameter param-name="selectedMonth" from-field="parameters.selectedMonth"/> <parameter param-name="organizationPartyId" from-field="parameters.organizationPartyId"/> <parameter param-name="glFiscalTypeId" from-field="parameters.glFiscalTypeId"/> </link> - <container style="h3"><label text="${uiLabelMap.AccountingIncome}"/></container> - <include-form name="IncomeStatementList" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> - <container style="h3"><label text="${uiLabelMap.AccountingExpenses}"/></container> - <include-form name="ExpenseStatementList" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> + <container> + <label style="h3" text="${uiLabelMap.AccountingRevenues}"/> + </container> + <include-form name="IncomeStatementRevenues" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> + <container> + <label style="h3" text="${uiLabelMap.AccountingExpenses}"/> + </container> + <include-form name="IncomeStatementExpenses" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> + <container> + <label style="h3" text="${uiLabelMap.AccountingIncome}"/> + </container> + <include-form name="IncomeStatementIncome" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> + <container> + <label style="h3" text="${uiLabelMap.AccountingNetSales}: ${revenueBalanceTotal}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingCostOfGoodsSold}: ${cogsExpense}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingGrossMargin}: ${grossMargin}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingOperatingExpenses}: ${sgaExpense}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingIncomeFromOperations}: ${incomeFromOperations}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingNetIncome}: ${netIncome}"/> + </container> </screenlet> - <container> - <label style="h3" text="${uiLabelMap.AccountingNetIncome}: ${totalNetIncome}"/> - </container> </widgets> </section> </decorator-section> @@ -463,12 +481,10 @@ <set field="partyAcctgPreference" from-field="result.partyAccountingPreference"/> <set field="currencyUomId" from-field="partyAcctgPreference.baseCurrencyUomId"/> <!-- Get a default fromDate --> - <set field="findLastClosedDateInMap.organizationPartyId" from-field="organizationPartyId"/> - <service service-name="findLastClosedDate" in-map-name="findLastClosedDateInMap"> - <result-to-field result-name="lastClosedDate"/> - <result-to-field result-name="lastClosedTimePeriod"/> + <service service-name="findLastClosedDate" result-map="findLastClosedDateOutMap"> + <field-map field-name="organizationPartyId" from-field="organizationPartyId"/> </service> - <set field="fromDate" from-field="parameters.fromDate" type="Timestamp" default-value="${lastClosedDate}"/> + <set field="fromDate" from-field="parameters.fromDate" type="Timestamp" default-value="${findLastClosedDateOutMap.lastClosedDate}"/> <set field="thruDate" from-field="parameters.thruDate" type="Timestamp" default-value="${nowTimestamp}"/> <script location="component://accounting/webapp/accounting/WEB-INF/actions/reports/TransactionTotals.groovy"/> </actions> @@ -587,17 +603,47 @@ <set field="viewSize" value="99999"/> <property-map resource="AccountingUiLabels" map-name="uiLabelMap" global="true"/> <set field="organizationPartyId" from-field="parameters.organizationPartyId"/> - <set field="isPdf" value="true" type="Boolean"/> - <script location="component://accounting/webapp/accounting/WEB-INF/actions/reports/MonthlyTrialBalance.groovy"/> + <set field="fromDate" from-field="parameters.fromDate" type="Timestamp"/> + <set field="thruDate" from-field="parameters.thruDate" type="Timestamp"/> + <script location="component://accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy"/> </actions> <widgets> <decorator-screen name="SimpleDecorator" location="component://common/widget/CommonScreens.xml"> <decorator-section name="body"> - <container style="h3"><label text="${uiLabelMap.AccountingIncome}"/></container> - <include-form name="IncomeStatementList" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> - <container style="h3"><label text="${uiLabelMap.AccountingExpenses}"/></container> - <include-form name="ExpenseStatementList" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> - <container><label style="h3" text="${uiLabelMap.AccountingNetIncome}: ${totalNetIncome}"/></container> + <container> + <label style="h1" text="${uiLabelMap.AccountingIncomeStatement}"/> + </container> + <include-form name="FindTransactionTotals" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> + <container> + <label style="h3" text="${uiLabelMap.AccountingRevenues}"/> + </container> + <include-form name="IncomeStatementRevenues" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> + <container> + <label style="h3" text="${uiLabelMap.AccountingExpenses}"/> + </container> + <include-form name="IncomeStatementExpenses" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> + <container> + <label style="h3" text="${uiLabelMap.AccountingIncome}"/> + </container> + <include-form name="IncomeStatementIncome" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> + <container> + <label style="h3" text="${uiLabelMap.AccountingNetSales}: ${revenueBalanceTotal}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingCostOfGoodsSold}: ${cogsExpense}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingGrossMargin}: ${grossMargin}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingOperatingExpenses}: ${sgaExpense}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingIncomeFromOperations}: ${incomeFromOperations}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingNetIncome}: ${netIncome}"/> + </container> </decorator-section> </decorator-screen> </widgets> @@ -610,14 +656,41 @@ <set field="viewSize" value="99999"/> <property-map resource="AccountingUiLabels" map-name="uiLabelMap" global="true"/> <set field="organizationPartyId" from-field="parameters.organizationPartyId"/> - <script location="component://accounting/webapp/accounting/WEB-INF/actions/reports/MonthlyTrialBalance.groovy"/> + <set field="fromDate" from-field="parameters.fromDate" type="Timestamp"/> + <set field="thruDate" from-field="parameters.thruDate" type="Timestamp"/> + <script location="component://accounting/webapp/accounting/WEB-INF/actions/reports/IncomeStatement.groovy"/> </actions> <widgets> - <container><label text="${uiLabelMap.AccountingIncome}"/></container> - <include-form name="IncomeStatementListCsv" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> - <container><label text="${uiLabelMap.AccountingExpenses}"/></container> - <include-form name="ExpenseStatementListCsv" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> - <container><label text="${uiLabelMap.AccountingNetIncome}: ${totalNetIncome}"/></container> + <container> + <label style="h3" text="${uiLabelMap.AccountingRevenues}"/> + </container> + <include-form name="IncomeStatementRevenues" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> + <container> + <label style="h3" text="${uiLabelMap.AccountingExpenses}"/> + </container> + <include-form name="IncomeStatementExpenses" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> + <container> + <label style="h3" text="${uiLabelMap.AccountingIncome}"/> + </container> + <include-form name="IncomeStatementIncome" location="component://accounting/widget/ReportFinancialSummaryForms.xml"/> + <container> + <label style="h3" text="${uiLabelMap.AccountingNetSales}: ${revenueBalanceTotal}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingCostOfGoodsSold}: ${cogsExpense}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingGrossMargin}: ${grossMargin}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingOperatingExpenses}: ${sgaExpense}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingIncomeFromOperations}: ${incomeFromOperations}"/> + </container> + <container> + <label style="h3" text="${uiLabelMap.AccountingNetIncome}: ${netIncome}"/> + </container> </widgets> </section> </screen> @@ -976,12 +1049,10 @@ <set field="tabButtonItem2" value="CostCenterReport"/> <set field="organizationPartyId" from-field="parameters.organizationPartyId" type="String"/> <!-- Get a default fromDate --> - <set field="findLastClosedDateInMap.organizationPartyId" from-field="organizationPartyId"/> - <service service-name="findLastClosedDate" in-map-name="findLastClosedDateInMap"> - <result-to-field result-name="lastClosedDate"/> - <result-to-field result-name="lastClosedTimePeriod"/> + <service service-name="findLastClosedDate" result-map="findLastClosedDateOutMap"> + <field-map field-name="organizationPartyId" from-field="organizationPartyId"/> </service> - <set field="fromDate" from-field="parameters.fromDate" type="Timestamp" default-value="${lastClosedDate}"/> + <set field="fromDate" from-field="parameters.fromDate" type="Timestamp" default-value="${findLastClosedDateOutMap.lastClosedDate}"/> <set field="thruDate" from-field="parameters.thruDate" type="Timestamp" default-value="${nowTimestamp}"/> <set field="glAcctgOrgAndCostCenterList" from-field="parameters.glAcctgOrgAndCostCenterList" type="List"/> |
| Free forum by Nabble | Edit this page |
