001    /*
002     * Copyright 2011 The Kuali Foundation.
003     * 
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     * http://www.opensource.org/licenses/ecl2.php
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.kfs.module.bc.document.service.impl;
017    
018    import java.math.BigDecimal;
019    import java.util.ArrayList;
020    import java.util.Collection;
021    import java.util.Iterator;
022    import java.util.List;
023    
024    import org.apache.ojb.broker.PersistenceBrokerException;
025    import org.kuali.kfs.module.bc.BCConstants;
026    import org.kuali.kfs.module.bc.BCKeyConstants;
027    import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAccountSummary;
028    import org.kuali.kfs.module.bc.businessobject.BudgetConstructionOrgAccountSummaryReport;
029    import org.kuali.kfs.module.bc.businessobject.BudgetConstructionOrgAccountSummaryReportTotal;
030    import org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionAccountSummaryReportDao;
031    import org.kuali.kfs.module.bc.document.service.BudgetConstructionAccountSummaryReportService;
032    import org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper;
033    import org.kuali.kfs.module.bc.report.BudgetConstructionReportHelper;
034    import org.kuali.kfs.sys.KFSPropertyConstants;
035    import org.kuali.rice.kns.service.KualiConfigurationService;
036    import org.springframework.transaction.annotation.Transactional;
037    
038    /**
039     * Service implementation of BudgetConstructionAccountSummaryReportService.
040     */
041    @Transactional
042    public class BudgetConstructionAccountSummaryReportServiceImpl implements BudgetConstructionAccountSummaryReportService {
043    
044        private BudgetConstructionAccountSummaryReportDao budgetConstructionAccountSummaryReportDao;
045        private KualiConfigurationService kualiConfigurationService;
046        private BudgetConstructionReportsServiceHelper budgetConstructionReportsServiceHelper;
047        private boolean trExist = false;
048    
049        /**
050         * @see org.kuali.kfs.module.bc.document.service.BudgetReportsControlListService#updateRepotsAccountSummaryTable(java.lang.String)
051         */
052        public void updateReportsAccountSummaryTable(String principalName) {
053            budgetConstructionAccountSummaryReportDao.cleanReportsAccountSummaryTable(principalName);
054            budgetConstructionAccountSummaryReportDao.updateReportsAccountSummaryTable(principalName);
055        }
056    
057        /**
058         * @see org.kuali.kfs.module.bc.document.service.BudgetReportsControlListService#updateRepotsAccountSummaryTableWithConsolidation(java.lang.String)
059         */
060        public void updateReportsAccountSummaryTableWithConsolidation(String principalName) {
061            budgetConstructionAccountSummaryReportDao.cleanReportsAccountSummaryTable(principalName);
062            budgetConstructionAccountSummaryReportDao.updateReportsAccountSummaryTableWithConsolidation(principalName);
063        }
064    
065        /**
066         * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionAccountSummaryReportService#updateReportsAccountSummaryTable(java.lang.String,
067         *      boolean)
068         */
069        public void updateReportsAccountSummaryTable(String principalName, boolean consolidated) {
070            if (consolidated) {
071                updateReportsAccountSummaryTableWithConsolidation(principalName);
072            }
073            else {
074                updateReportsAccountSummaryTable(principalName);
075            }
076        }
077    
078        /**
079         * sets budgetConstructionAccountSummaryReportDao
080         * 
081         * @param budgetConstructionAccountSummaryReportDao
082         */
083        public void setBudgetConstructionAccountSummaryReportDao(BudgetConstructionAccountSummaryReportDao budgetConstructionAccountSummaryReportDao) {
084            this.budgetConstructionAccountSummaryReportDao = budgetConstructionAccountSummaryReportDao;
085        }
086    
087        /**
088         * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionAccountSummaryReportService#buildReports(java.lang.Integer,
089         *      java.util.Collection)
090         */
091        public Collection<BudgetConstructionOrgAccountSummaryReport> buildReports(Integer universityFiscalYear, String principalName, boolean consolidated) {
092            Collection<BudgetConstructionOrgAccountSummaryReport> reportSet = new ArrayList();
093            Collection<BudgetConstructionAccountSummary> accountSummaryList = budgetConstructionReportsServiceHelper.getDataForBuildingReports(BudgetConstructionAccountSummary.class, principalName, buildOrderByList());
094    
095            // Making a list with same organizationChartOfAccountsCode, organizationCode, chartOfAccountsCode, subFundGroupCode
096            List totalList = BudgetConstructionReportHelper.deleteDuplicated((List) accountSummaryList, fieldsForTotal());
097    
098            // Calculate Total Section
099            List<BudgetConstructionOrgAccountSummaryReportTotal> orgAccountSummaryReportTotalList = calculateTotal((List) accountSummaryList, totalList);
100    
101            // builds report
102            for (BudgetConstructionAccountSummary accountSummaryEntry : accountSummaryList) {
103                BudgetConstructionOrgAccountSummaryReport orgAccountSummaryReportEntry = new BudgetConstructionOrgAccountSummaryReport();
104                buildReportsHeader(universityFiscalYear, orgAccountSummaryReportEntry, accountSummaryEntry, consolidated);
105                buildReportsBody(orgAccountSummaryReportEntry, accountSummaryEntry);
106                buildReportsTotal(orgAccountSummaryReportEntry, accountSummaryEntry, orgAccountSummaryReportTotalList);
107                reportSet.add(orgAccountSummaryReportEntry);
108            }
109    
110            return reportSet;
111        }
112    
113        /**
114         * builds report Header
115         * 
116         * @param BudgetConstructionAccountSummary bcas
117         */
118        protected void buildReportsHeader(Integer universityFiscalYear, BudgetConstructionOrgAccountSummaryReport orgAccountSummaryReportEntry, BudgetConstructionAccountSummary accountSummary, boolean consolidated) {
119            String orgChartDesc = accountSummary.getOrganizationChartOfAccounts().getFinChartOfAccountDescription();
120            String chartDesc = accountSummary.getChartOfAccounts().getFinChartOfAccountDescription();
121            String orgName = accountSummary.getOrganization().getOrganizationName();
122            String reportChartDesc = accountSummary.getChartOfAccounts().getReportsToChartOfAccounts().getFinChartOfAccountDescription();
123            String subFundGroupName = accountSummary.getFundGroup().getName();
124            String subFundGroupDes = accountSummary.getSubFundGroup().getSubFundGroupDescription();
125            Integer prevFiscalyear = universityFiscalYear - 1;
126            orgAccountSummaryReportEntry.setFiscalYear(prevFiscalyear.toString() + "-" + universityFiscalYear.toString().substring(2, 4));
127            orgAccountSummaryReportEntry.setOrgChartOfAccountsCode(accountSummary.getOrganizationChartOfAccountsCode());
128    
129            if (orgChartDesc == null) {
130                orgAccountSummaryReportEntry.setOrgChartOfAccountDescription(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_CHART_DESCRIPTION));
131            }
132            else {
133                orgAccountSummaryReportEntry.setOrgChartOfAccountDescription(orgChartDesc);
134            }
135    
136            orgAccountSummaryReportEntry.setOrganizationCode(accountSummary.getOrganizationCode());
137            if (orgName == null) {
138                orgAccountSummaryReportEntry.setOrganizationName(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_ORGANIZATION_NAME));
139            }
140            else {
141                orgAccountSummaryReportEntry.setOrganizationName(orgName);
142            }
143    
144            orgAccountSummaryReportEntry.setChartOfAccountsCode(accountSummary.getChartOfAccountsCode());
145            if (chartDesc == null) {
146                orgAccountSummaryReportEntry.setChartOfAccountDescription(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_CHART_DESCRIPTION));
147            }
148            else {
149                orgAccountSummaryReportEntry.setChartOfAccountDescription(chartDesc);
150            }
151    
152            orgAccountSummaryReportEntry.setFundGroupCode(accountSummary.getFundGroupCode());
153            if (subFundGroupName == null) {
154                orgAccountSummaryReportEntry.setFundGroupName(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_FUNDGROUP_NAME));
155            }
156            else {
157                orgAccountSummaryReportEntry.setFundGroupName(subFundGroupName);
158            }
159    
160            orgAccountSummaryReportEntry.setSubFundGroupCode(accountSummary.getSubFundGroupCode());
161            if (subFundGroupName == null) {
162                orgAccountSummaryReportEntry.setSubFundGroupDescription(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_SUBFUNDGROUP_DESCRIPTION));
163            }
164            else {
165                orgAccountSummaryReportEntry.setSubFundGroupDescription(subFundGroupDes);
166            }
167    
168            Integer prevPrevFiscalyear = prevFiscalyear - 1;
169            orgAccountSummaryReportEntry.setBaseFy(prevPrevFiscalyear.toString() + "-" + prevFiscalyear.toString().substring(2, 4));
170            orgAccountSummaryReportEntry.setReqFy(prevFiscalyear.toString() + "-" + universityFiscalYear.toString().substring(2, 4));
171            orgAccountSummaryReportEntry.setHeader1(kualiConfigurationService.getPropertyString(BCKeyConstants.MSG_REPORT_HEADER_ACCOUNT_SUB));
172            orgAccountSummaryReportEntry.setHeader2(kualiConfigurationService.getPropertyString(BCKeyConstants.MSG_REPORT_HEADER_ACCOUNT_SUB_NAME));
173            orgAccountSummaryReportEntry.setHeader3(kualiConfigurationService.getPropertyString(BCKeyConstants.MSG_REPORT_HEADER_BASE_AMOUNT));
174            orgAccountSummaryReportEntry.setHeader4(kualiConfigurationService.getPropertyString(BCKeyConstants.MSG_REPORT_HEADER_REQ_AMOUNT));
175            orgAccountSummaryReportEntry.setHeader5(kualiConfigurationService.getPropertyString(BCKeyConstants.MSG_REPORT_HEADER_CHANGE));
176            orgAccountSummaryReportEntry.setHeader6(kualiConfigurationService.getPropertyString(BCKeyConstants.MSG_REPORT_HEADER_CHANGE));
177            if (consolidated) {
178                orgAccountSummaryReportEntry.setConsHdr(BCConstants.Report.CONSOLIIDATED);
179            }
180            else {
181                orgAccountSummaryReportEntry.setConsHdr(BCConstants.Report.BLANK);
182            }
183        }
184    
185        /**
186         * builds report body
187         * 
188         * @param BudgetConstructionAccountSummary bcas
189         */
190        protected void buildReportsBody(BudgetConstructionOrgAccountSummaryReport orgAccountSummaryReportEntry, BudgetConstructionAccountSummary accountSummary) {
191            orgAccountSummaryReportEntry.setAccountNumber(accountSummary.getAccountNumber());
192            orgAccountSummaryReportEntry.setSubAccountNumber(accountSummary.getSubAccountNumber());
193    
194            if (accountSummary.getSubAccountNumber().equals(BCConstants.Report.DASHES_SUB_ACCOUNT_CODE)) {
195                if (accountSummary.getAccount().getAccountName() == null) {
196                    orgAccountSummaryReportEntry.setAccountNameAndSubAccountName(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_ACCOUNT_DESCRIPTION));
197                }
198                else
199                    orgAccountSummaryReportEntry.setAccountNameAndSubAccountName(accountSummary.getAccount().getAccountName());
200            }
201            else {
202                try {
203                    if (accountSummary.getSubAccount().getSubAccountName() == null) {
204                        orgAccountSummaryReportEntry.setAccountNameAndSubAccountName(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_SUB_ACCOUNT_DESCRIPTION));
205                    }
206                    else
207                        orgAccountSummaryReportEntry.setAccountNameAndSubAccountName(accountSummary.getSubAccount().getSubAccountName());
208                }
209                catch (PersistenceBrokerException e) {
210                    orgAccountSummaryReportEntry.setAccountNameAndSubAccountName(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_SUB_ACCOUNT_DESCRIPTION));
211                }
212            }
213    
214            // build income expense description
215            if (accountSummary.getIncomeExpenseCode().equals(BCConstants.Report.INCOME_EXP_TYPE_A)) {
216                orgAccountSummaryReportEntry.setIncExpDesc(kualiConfigurationService.getPropertyString(BCKeyConstants.MSG_REPORT_INCOME_EXP_DESC_REVENUE));
217            }
218            else if (accountSummary.getIncomeExpenseCode().equals(BCConstants.Report.INCOME_EXP_TYPE_E)) {
219                orgAccountSummaryReportEntry.setIncExpDesc(kualiConfigurationService.getPropertyString(BCKeyConstants.MSG_REPORT_INCOME_EXP_DESC_EXP_GROSS));
220            }
221            else if (accountSummary.getIncomeExpenseCode().equals(BCConstants.Report.INCOME_EXP_TYPE_T)) {
222                trExist = true;
223                orgAccountSummaryReportEntry.setIncExpDesc(kualiConfigurationService.getPropertyString(BCKeyConstants.MSG_REPORT_INCOME_EXP_DESC_TRNFR_IN));
224            }
225            else {
226                if (trExist) {
227                    trExist = false;
228                    orgAccountSummaryReportEntry.setIncExpDesc(kualiConfigurationService.getPropertyString(BCKeyConstants.MSG_REPORT_INCOME_EXP_DESC_EXP_NET_TRNFR));
229                }
230                else {
231                    orgAccountSummaryReportEntry.setIncExpDesc(kualiConfigurationService.getPropertyString(BCKeyConstants.MSG_REPORT_INCOME_EXP_DESC_EXPENDITURE));
232                }
233            }
234    
235            Integer beginingBalanceLineAmt = 0;
236            Integer accountLineAnnualBalAmt = 0;
237            if (accountSummary.getFinancialBeginningBalanceLineAmount() != null) {
238                beginingBalanceLineAmt = BudgetConstructionReportHelper.convertKualiInteger(accountSummary.getFinancialBeginningBalanceLineAmount());
239            }
240    
241            if (accountSummary.getFinancialBeginningBalanceLineAmount() != null) {
242                accountLineAnnualBalAmt = BudgetConstructionReportHelper.convertKualiInteger(accountSummary.getAccountLineAnnualBalanceAmount());
243            }
244    
245            orgAccountSummaryReportEntry.setBaseAmount(beginingBalanceLineAmt);
246            orgAccountSummaryReportEntry.setReqAmount(accountLineAnnualBalAmt);
247            orgAccountSummaryReportEntry.setAmountChange(accountLineAnnualBalAmt - beginingBalanceLineAmt);
248    
249            orgAccountSummaryReportEntry.setPercentChange(BudgetConstructionReportHelper.calculatePercent(orgAccountSummaryReportEntry.getAmountChange(), beginingBalanceLineAmt));
250    
251        }
252    
253        /**
254         * builds report total
255         * 
256         * @param BudgetConstructionAccountSummary bcas
257         * @param List reportTotalList
258         */
259        protected void buildReportsTotal(BudgetConstructionOrgAccountSummaryReport orgAccountSummaryReportEntry, BudgetConstructionAccountSummary accountSummary, List reportTotalList) {
260            Iterator totalListIter = reportTotalList.iterator();
261            while (totalListIter.hasNext()) {
262                BudgetConstructionOrgAccountSummaryReportTotal bcasTotalEntry = (BudgetConstructionOrgAccountSummaryReportTotal) totalListIter.next();
263                if (BudgetConstructionReportHelper.isSameEntry(accountSummary, bcasTotalEntry.getBcas(), fieldsForTotal())) {
264                    BigDecimal percentChange = BigDecimal.ZERO;
265                    orgAccountSummaryReportEntry.setTotalRevenueBaseAmount(bcasTotalEntry.getTotalRevenueBaseAmount());
266                    orgAccountSummaryReportEntry.setTotalGrossBaseAmount(bcasTotalEntry.getTotalGrossBaseAmount());
267                    orgAccountSummaryReportEntry.setTotalTransferInBaseAmount(bcasTotalEntry.getTotalTransferInBaseAmount());
268                    orgAccountSummaryReportEntry.setTotalNetTransferBaseAmount(bcasTotalEntry.getTotalNetTransferBaseAmount());
269    
270                    orgAccountSummaryReportEntry.setTotalRevenueReqAmount(bcasTotalEntry.getTotalRevenueReqAmount());
271                    orgAccountSummaryReportEntry.setTotalGrossReqAmount(bcasTotalEntry.getTotalGrossReqAmount());
272                    orgAccountSummaryReportEntry.setTotalTransferInReqAmount(bcasTotalEntry.getTotalTransferInReqAmount());
273                    orgAccountSummaryReportEntry.setTotalNetTransferReqAmount(bcasTotalEntry.getTotalNetTransferReqAmount());
274    
275                    orgAccountSummaryReportEntry.setTotalRevenueAmountChange(orgAccountSummaryReportEntry.getTotalRevenueReqAmount() - orgAccountSummaryReportEntry.getTotalRevenueBaseAmount());
276                    percentChange = BudgetConstructionReportHelper.calculatePercent(orgAccountSummaryReportEntry.getTotalRevenueAmountChange(), orgAccountSummaryReportEntry.getTotalRevenueBaseAmount());
277                    orgAccountSummaryReportEntry.setTotalRevenuePercentChange(percentChange);
278    
279                    orgAccountSummaryReportEntry.setTotalGrossAmountChange(orgAccountSummaryReportEntry.getTotalGrossReqAmount() - orgAccountSummaryReportEntry.getTotalGrossBaseAmount());
280                    percentChange = BudgetConstructionReportHelper.calculatePercent(orgAccountSummaryReportEntry.getTotalGrossAmountChange(), orgAccountSummaryReportEntry.getTotalGrossBaseAmount());
281                    orgAccountSummaryReportEntry.setTotalGrossPercentChange(percentChange);
282    
283                    orgAccountSummaryReportEntry.setTotalTransferAmountChange(orgAccountSummaryReportEntry.getTotalTransferInReqAmount() - orgAccountSummaryReportEntry.getTotalTransferInBaseAmount());
284                    percentChange = BudgetConstructionReportHelper.calculatePercent(orgAccountSummaryReportEntry.getTotalTransferAmountChange(), orgAccountSummaryReportEntry.getTotalTransferInBaseAmount());
285                    orgAccountSummaryReportEntry.setTotalTransferInPercentChange(percentChange);
286    
287                    orgAccountSummaryReportEntry.setTotalNetTransferAmountChange(orgAccountSummaryReportEntry.getTotalNetTransferReqAmount() - orgAccountSummaryReportEntry.getTotalNetTransferBaseAmount());
288                    percentChange = BudgetConstructionReportHelper.calculatePercent(orgAccountSummaryReportEntry.getTotalNetTransferAmountChange(), orgAccountSummaryReportEntry.getTotalNetTransferBaseAmount());
289                    orgAccountSummaryReportEntry.setTotalNetTransferPercentChange(percentChange);
290    
291                    orgAccountSummaryReportEntry.setRevExpDifferenceBaseAmount(orgAccountSummaryReportEntry.getTotalRevenueBaseAmount() - orgAccountSummaryReportEntry.getTotalNetTransferBaseAmount());
292                    orgAccountSummaryReportEntry.setRevExpDifferenceReqAmount(orgAccountSummaryReportEntry.getTotalRevenueReqAmount() - orgAccountSummaryReportEntry.getTotalNetTransferReqAmount());
293                    orgAccountSummaryReportEntry.setRevExpDifferenceAmountChange(orgAccountSummaryReportEntry.getRevExpDifferenceReqAmount() - orgAccountSummaryReportEntry.getRevExpDifferenceBaseAmount());
294                    percentChange = BudgetConstructionReportHelper.calculatePercent(orgAccountSummaryReportEntry.getRevExpDifferenceAmountChange(), orgAccountSummaryReportEntry.getRevExpDifferenceBaseAmount());
295                    orgAccountSummaryReportEntry.setRevExpDifferencePercentChange(percentChange);
296                }
297            }
298        }
299    
300        /**
301         * Calculates total part of report
302         * 
303         * @param List bcasList
304         * @param List simpleList
305         */
306        protected List calculateTotal(List bcasList, List simpleList) {
307    
308            Integer totalRevenueBaseAmount = 0;
309            Integer totalGrossBaseAmount = 0;
310            Integer totalTransferInBaseAmount = 0;
311            Integer totalNetTransferBaseAmount = 0;
312            Integer totalRevenueReqAmount = 0;
313            Integer totalGrossReqAmount = 0;
314            Integer totalTransferInReqAmount = 0;
315            Integer totalNetTransferReqAmount = 0;
316    
317            List returnList = new ArrayList();
318            Iterator simpleListIterator = simpleList.iterator();
319            boolean prev = false;
320            while (simpleListIterator.hasNext()) {
321                BudgetConstructionAccountSummary simpleBcasEntry = (BudgetConstructionAccountSummary) simpleListIterator.next();
322                Iterator bcasListIterator = bcasList.iterator();
323                while (bcasListIterator.hasNext()) {
324                    BudgetConstructionAccountSummary bcasListEntry = (BudgetConstructionAccountSummary) bcasListIterator.next();
325                    if (BudgetConstructionReportHelper.isSameEntry(simpleBcasEntry, bcasListEntry, fieldsForTotal())) {
326                        if (bcasListEntry.getIncomeExpenseCode().equals(BCConstants.Report.INCOME_EXP_TYPE_A)) {
327                            prev = false;
328                            totalRevenueBaseAmount += BudgetConstructionReportHelper.convertKualiInteger(bcasListEntry.getFinancialBeginningBalanceLineAmount());
329                            totalRevenueReqAmount += BudgetConstructionReportHelper.convertKualiInteger(bcasListEntry.getAccountLineAnnualBalanceAmount());
330                        }
331                        else if (bcasListEntry.getIncomeExpenseCode().equals(BCConstants.Report.INCOME_EXP_TYPE_E)) {
332                            prev = false;
333                            totalGrossBaseAmount += BudgetConstructionReportHelper.convertKualiInteger(bcasListEntry.getFinancialBeginningBalanceLineAmount());
334                            totalGrossReqAmount += BudgetConstructionReportHelper.convertKualiInteger(bcasListEntry.getAccountLineAnnualBalanceAmount());
335    
336                        }
337                        else if (bcasListEntry.getIncomeExpenseCode().equals(BCConstants.Report.INCOME_EXP_TYPE_T)) {
338                            prev = true;
339                            totalTransferInBaseAmount += BudgetConstructionReportHelper.convertKualiInteger(bcasListEntry.getFinancialBeginningBalanceLineAmount());
340                            totalTransferInReqAmount += BudgetConstructionReportHelper.convertKualiInteger(bcasListEntry.getAccountLineAnnualBalanceAmount());
341                        }
342                        else if (bcasListEntry.getIncomeExpenseCode().equals(BCConstants.Report.INCOME_EXP_TYPE_X)) {
343                            totalNetTransferBaseAmount += BudgetConstructionReportHelper.convertKualiInteger(bcasListEntry.getFinancialBeginningBalanceLineAmount());
344                            totalNetTransferReqAmount += BudgetConstructionReportHelper.convertKualiInteger(bcasListEntry.getAccountLineAnnualBalanceAmount());
345                            if (!prev) {
346                                prev = false;
347                                totalGrossBaseAmount += BudgetConstructionReportHelper.convertKualiInteger(bcasListEntry.getFinancialBeginningBalanceLineAmount());
348                                totalGrossReqAmount += BudgetConstructionReportHelper.convertKualiInteger(bcasListEntry.getAccountLineAnnualBalanceAmount());
349                            }
350                        }
351                    }
352                }
353                BudgetConstructionOrgAccountSummaryReportTotal bcoasrTotal = new BudgetConstructionOrgAccountSummaryReportTotal();
354                bcoasrTotal.setBcas(simpleBcasEntry);
355                bcoasrTotal.setTotalGrossBaseAmount(totalGrossBaseAmount);
356                bcoasrTotal.setTotalGrossReqAmount(totalGrossReqAmount);
357                bcoasrTotal.setTotalNetTransferBaseAmount(totalNetTransferBaseAmount);
358                bcoasrTotal.setTotalNetTransferReqAmount(totalNetTransferReqAmount);
359                bcoasrTotal.setTotalRevenueBaseAmount(totalRevenueBaseAmount);
360                bcoasrTotal.setTotalRevenueReqAmount(totalRevenueReqAmount);
361                bcoasrTotal.setTotalTransferInBaseAmount(totalTransferInBaseAmount);
362                bcoasrTotal.setTotalTransferInReqAmount(totalTransferInReqAmount);
363                returnList.add(bcoasrTotal);
364                totalGrossBaseAmount = 0;
365                totalGrossReqAmount = 0;
366                totalNetTransferBaseAmount = 0;
367                totalNetTransferReqAmount = 0;
368                totalRevenueBaseAmount = 0;
369                totalRevenueReqAmount = 0;
370                totalTransferInBaseAmount = 0;
371                totalTransferInReqAmount = 0;
372            }
373    
374            return returnList;
375        }
376    
377        protected List<String> fieldsForTotal() {
378    
379            List<String> fieldList = new ArrayList();
380            fieldList.add(KFSPropertyConstants.ORGANIZATION_CHART_OF_ACCOUNTS_CODE);
381            fieldList.add(KFSPropertyConstants.ORGANIZATION_CODE);
382            fieldList.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
383            fieldList.add(KFSPropertyConstants.SUB_FUND_GROUP_CODE);
384    
385            return fieldList;
386        }
387    
388        /**
389         * builds orderByList for sort order.
390         * 
391         * @return returnList
392         */
393        public List<String> buildOrderByList() {
394            List<String> returnList = new ArrayList();
395            returnList.add(KFSPropertyConstants.ORGANIZATION_CHART_OF_ACCOUNTS_CODE);
396            returnList.add(KFSPropertyConstants.ORGANIZATION_CODE);
397            returnList.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
398            returnList.add(KFSPropertyConstants.SUB_FUND_SORT_CODE);
399            returnList.add(KFSPropertyConstants.FUND_GROUP_CODE);
400            returnList.add(KFSPropertyConstants.SUB_FUND_GROUP_CODE);
401            returnList.add(KFSPropertyConstants.ACCOUNT_NUMBER);
402            returnList.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER);
403            returnList.add(KFSPropertyConstants.INCOME_EXPENSE_CODE);
404    
405            return returnList;
406        }
407    
408        public void setKualiConfigurationService(KualiConfigurationService kualiConfigurationService) {
409            this.kualiConfigurationService = kualiConfigurationService;
410        }
411    
412        public void setBudgetConstructionReportsServiceHelper(BudgetConstructionReportsServiceHelper budgetConstructionReportsServiceHelper) {
413            this.budgetConstructionReportsServiceHelper = budgetConstructionReportsServiceHelper;
414        }
415    }