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.HashMap;
022 import java.util.List;
023 import java.util.Map;
024
025 import org.apache.commons.lang.StringUtils;
026 import org.apache.ojb.broker.PersistenceBrokerException;
027 import org.kuali.kfs.module.bc.BCConstants;
028 import org.kuali.kfs.module.bc.BCKeyConstants;
029 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAccountBalance;
030 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionOrgAccountObjectDetailReport;
031 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionOrgAccountObjectDetailReportTotal;
032 import org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionAccountObjectDetailReportDao;
033 import org.kuali.kfs.module.bc.document.service.BudgetConstructionAccountObjectDetailReportService;
034 import org.kuali.kfs.module.bc.document.service.BudgetConstructionOrganizationReportsService;
035 import org.kuali.kfs.module.bc.report.BudgetConstructionReportHelper;
036 import org.kuali.kfs.sys.KFSPropertyConstants;
037 import org.kuali.rice.kns.service.BusinessObjectService;
038 import org.kuali.rice.kns.service.KualiConfigurationService;
039 import org.springframework.transaction.annotation.Transactional;
040
041 /**
042 * Service implementation of BudgetConstructionAccountSummaryReportService.
043 */
044 @Transactional
045 public class BudgetConstructionAccountObjectDetailReportServiceImpl implements BudgetConstructionAccountObjectDetailReportService {
046
047 private BudgetConstructionAccountObjectDetailReportDao budgetConstructionAccountObjectDetailReportDao;
048 private KualiConfigurationService kualiConfigurationService;
049 private BudgetConstructionOrganizationReportsService budgetConstructionOrganizationReportsService;
050 private BusinessObjectService businessObjectService;
051
052 /**
053 * @see org.kuali.kfs.module.bc.document.service.BudgetReportsControlListService#updateSubFundSummaryReport(java.lang.String)
054 */
055 public void updateAccountObjectDetailReport(String principalName, boolean consolidated) {
056 if (consolidated) {
057 budgetConstructionAccountObjectDetailReportDao.updateReportsAccountObjectConsolidatedTable(principalName);
058 }
059 else {
060 budgetConstructionAccountObjectDetailReportDao.updateReportsAccountObjectDetailTable(principalName);
061 }
062 }
063
064 public Collection<BudgetConstructionOrgAccountObjectDetailReport> buildReports(Integer universityFiscalYear, String principalName, boolean consolidated) {
065 Collection<BudgetConstructionOrgAccountObjectDetailReport> reportSet = new ArrayList();
066 Collection<BudgetConstructionAccountBalance> accountObjectDetailList;
067
068 // build searchCriteria
069 Map searchCriteria = new HashMap();
070 searchCriteria.put(KFSPropertyConstants.KUALI_USER_PERSON_UNIVERSAL_IDENTIFIER, principalName);
071
072 // build order list
073 List<String> orderList = buildOrderByList();
074 accountObjectDetailList = budgetConstructionOrganizationReportsService.getBySearchCriteriaOrderByList(BudgetConstructionAccountBalance.class, searchCriteria, orderList);
075
076
077 // BudgetConstructionReportHelper.deleteDuplicated((List) positionFundingDetailList, fieldsForSubFundTotal())
078 List listForCalculateObject = BudgetConstructionReportHelper.deleteDuplicated((List) accountObjectDetailList, fieldsForObject());
079 List listForCalculateLevel = BudgetConstructionReportHelper.deleteDuplicated((List) accountObjectDetailList, fieldsForLevel());
080 List listForCalculateGexpAndType = BudgetConstructionReportHelper.deleteDuplicated((List) accountObjectDetailList, fieldsForGexpAndType());
081 List listForCalculateAccountTotal = BudgetConstructionReportHelper.deleteDuplicated((List) accountObjectDetailList, fieldsForAccountTotal());
082 List listForCalculateSubFundTotal = BudgetConstructionReportHelper.deleteDuplicated((List) accountObjectDetailList, fieldsForSubFundTotal());
083
084 // Calculate Total Section
085 List<BudgetConstructionOrgAccountObjectDetailReportTotal> accountObjectDetailTotalObjectList;
086 List<BudgetConstructionOrgAccountObjectDetailReportTotal> accountObjectDetailTotalLevelList;
087 List<BudgetConstructionOrgAccountObjectDetailReportTotal> accountObjectDetailTotalGexpAndTypeList;
088 List<BudgetConstructionOrgAccountObjectDetailReportTotal> accountObjectDetailAccountTotalList;
089 List<BudgetConstructionOrgAccountObjectDetailReportTotal> accountObjectDetailSubFundTotalList;
090
091 accountObjectDetailTotalObjectList = calculateObjectTotal((List) accountObjectDetailList, listForCalculateObject);
092 accountObjectDetailTotalLevelList = calculateLevelTotal((List) accountObjectDetailList, listForCalculateLevel);
093 accountObjectDetailTotalGexpAndTypeList = calculateGexpAndTypeTotal((List) accountObjectDetailList, listForCalculateGexpAndType);
094 accountObjectDetailAccountTotalList = calculateAccountTotal((List) accountObjectDetailList, listForCalculateAccountTotal);
095 accountObjectDetailSubFundTotalList = calculateSubFundTotal((List) accountObjectDetailList, listForCalculateSubFundTotal);
096
097 for (BudgetConstructionAccountBalance accountObjectDetailEntry : accountObjectDetailList) {
098 BudgetConstructionOrgAccountObjectDetailReport accountObjectDetailReport = new BudgetConstructionOrgAccountObjectDetailReport();
099 buildReportsHeader(universityFiscalYear, accountObjectDetailReport, accountObjectDetailEntry, consolidated);
100 buildReportsBody(universityFiscalYear, accountObjectDetailReport, accountObjectDetailEntry);
101 buildReportsTotal(accountObjectDetailReport, accountObjectDetailEntry, accountObjectDetailTotalObjectList, accountObjectDetailTotalLevelList, accountObjectDetailTotalGexpAndTypeList, accountObjectDetailAccountTotalList, accountObjectDetailSubFundTotalList);
102 reportSet.add(accountObjectDetailReport);
103 }
104 return reportSet;
105 }
106
107
108 /**
109 * builds report Header
110 *
111 * @param BudgetConstructionObjectSummary bcas
112 */
113 protected void buildReportsHeader(Integer universityFiscalYear, BudgetConstructionOrgAccountObjectDetailReport orgAccountObjectDetailReportEntry, BudgetConstructionAccountBalance accountBalance, boolean consolidated) {
114 String orgChartDesc = accountBalance.getOrganizationChartOfAccounts().getFinChartOfAccountDescription();
115 String chartDesc = accountBalance.getChartOfAccounts().getFinChartOfAccountDescription();
116 String orgName = "";
117 try {
118 orgName = accountBalance.getOrganization().getOrganizationName();
119 }
120 catch (PersistenceBrokerException e) {
121 }
122 String reportChartDesc = accountBalance.getChartOfAccounts().getReportsToChartOfAccounts().getFinChartOfAccountDescription();
123 String subFundGroupName = accountBalance.getSubFundGroup().getSubFundGroupCode();
124 String subFundGroupDes = accountBalance.getSubFundGroup().getSubFundGroupDescription();
125 String fundGroupName = accountBalance.getSubFundGroup().getFundGroupCode();
126 String fundGroupDes = accountBalance.getSubFundGroup().getFundGroup().getName();
127
128 Integer prevFiscalyear = universityFiscalYear - 1;
129 orgAccountObjectDetailReportEntry.setFiscalYear(prevFiscalyear.toString() + "-" + universityFiscalYear.toString().substring(2, 4));
130 orgAccountObjectDetailReportEntry.setOrgChartOfAccountsCode(accountBalance.getOrganizationChartOfAccountsCode());
131
132 if (orgChartDesc == null) {
133 orgAccountObjectDetailReportEntry.setOrgChartOfAccountDescription(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_CHART_DESCRIPTION));
134 }
135 else {
136 orgAccountObjectDetailReportEntry.setOrgChartOfAccountDescription(orgChartDesc);
137 }
138
139 orgAccountObjectDetailReportEntry.setOrganizationCode(accountBalance.getOrganizationCode());
140 if (orgName == null) {
141 orgAccountObjectDetailReportEntry.setOrganizationName(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_ORGANIZATION_NAME));
142 }
143 else {
144 orgAccountObjectDetailReportEntry.setOrganizationName(orgName);
145 }
146
147 orgAccountObjectDetailReportEntry.setChartOfAccountsCode(accountBalance.getChartOfAccountsCode());
148 if (chartDesc == null) {
149 orgAccountObjectDetailReportEntry.setChartOfAccountDescription(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_CHART_DESCRIPTION));
150 }
151 else {
152 orgAccountObjectDetailReportEntry.setChartOfAccountDescription(chartDesc);
153 }
154
155 orgAccountObjectDetailReportEntry.setFundGroupCode(accountBalance.getSubFundGroup().getFundGroupCode());
156 if (fundGroupDes == null) {
157 orgAccountObjectDetailReportEntry.setFundGroupName(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_FUNDGROUP_NAME));
158 }
159 else {
160 orgAccountObjectDetailReportEntry.setFundGroupName(fundGroupDes);
161 }
162
163 orgAccountObjectDetailReportEntry.setSubFundGroupCode(accountBalance.getSubFundGroupCode());
164 if (subFundGroupDes == null) {
165 orgAccountObjectDetailReportEntry.setSubFundGroupDescription(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_SUBFUNDGROUP_DESCRIPTION));
166 }
167 else {
168 orgAccountObjectDetailReportEntry.setSubFundGroupDescription(subFundGroupDes);
169 }
170
171 Integer prevPrevFiscalyear = prevFiscalyear - 1;
172 orgAccountObjectDetailReportEntry.setBaseFy(prevPrevFiscalyear.toString() + "-" + prevFiscalyear.toString().substring(2, 4) + " Base");
173 orgAccountObjectDetailReportEntry.setReqFy(prevFiscalyear.toString() + "-" + universityFiscalYear.toString().substring(2, 4) + " Request");
174 if (consolidated) {
175 orgAccountObjectDetailReportEntry.setConsHdr(BCConstants.Report.CONSOLIIDATED);
176 }
177 else {
178 orgAccountObjectDetailReportEntry.setConsHdr(BCConstants.Report.BLANK);
179 }
180
181 orgAccountObjectDetailReportEntry.setAccountNumber(accountBalance.getAccountNumber());
182 String accountName = accountBalance.getAccount().getAccountName();
183 if (accountName == null) {
184 orgAccountObjectDetailReportEntry.setAccountName(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_ACCOUNT_DESCRIPTION));
185 }
186 else {
187 orgAccountObjectDetailReportEntry.setAccountName(accountName);
188 }
189
190 orgAccountObjectDetailReportEntry.setSubAccountNumber(accountBalance.getSubAccountNumber());
191
192 String subAccountName = StringUtils.EMPTY;
193 String subAccountNumberAndName = StringUtils.EMPTY;
194 String divider = StringUtils.EMPTY;
195 // set accountNumber and name, subAccountNumber and name
196 if (accountBalance.getAccount() != null) {
197 orgAccountObjectDetailReportEntry.setAccountNumberAndName(accountBalance.getAccountNumber() + " " + accountBalance.getAccount().getAccountName());
198 orgAccountObjectDetailReportEntry.setAccountName(accountBalance.getAccount().getAccountName());
199 }
200
201 if (!accountBalance.getSubAccountNumber().equals(BCConstants.Report.DASHES_SUB_ACCOUNT_CODE)) {
202 divider = BCConstants.Report.DIVIDER;
203 try {
204 subAccountName = accountBalance.getSubAccount().getSubAccountName();
205 subAccountNumberAndName = accountBalance.getSubAccount().getSubAccountNumber() + " " + accountBalance.getSubAccount().getSubAccountName();
206 }
207 catch (PersistenceBrokerException e) {
208 subAccountName = kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_SUB_ACCOUNT_DESCRIPTION);
209 subAccountNumberAndName = subAccountName;
210 }
211 }
212
213 orgAccountObjectDetailReportEntry.setSubAccountName(subAccountName);
214 orgAccountObjectDetailReportEntry.setSubAccountNumberAndName(subAccountNumberAndName);
215 orgAccountObjectDetailReportEntry.setDivider(divider);
216
217 // For group
218 orgAccountObjectDetailReportEntry.setSubAccountNumber(accountBalance.getSubAccountNumber() + accountBalance.getAccountNumber());
219 orgAccountObjectDetailReportEntry.setFinancialObjectCode(accountBalance.getFinancialObjectCode());
220 orgAccountObjectDetailReportEntry.setFinancialSubObjectCode(accountBalance.getFinancialSubObjectCode());
221 // orgAccountObjectDetailReportEntry.setFinancialObjectLevelCode(accountBalance.getFinancialObjectLevelCode());
222 orgAccountObjectDetailReportEntry.setIncomeExpenseCode(accountBalance.getIncomeExpenseCode());
223 // orgAccountObjectDetailReportEntry.setFinancialConsolidationSortCode(accountBalance.getFinancialConsolidationSortCode());
224 orgAccountObjectDetailReportEntry.setFinancialLevelSortCode(accountBalance.getFinancialLevelSortCode());
225
226 // page break
227
228 // page break org_fin_coa_cd, org_cd, sub_fund_grp_cd)%\
229 orgAccountObjectDetailReportEntry.setPageBreak(accountBalance.getOrganizationChartOfAccountsCode() + accountBalance.getOrganizationCode() + accountBalance.getSubFundGroupCode());
230 }
231
232
233 /**
234 * builds report body
235 *
236 * @param BudgetConstructionLevelSummary bcas
237 */
238 protected void buildReportsBody(Integer universityFiscalYear, BudgetConstructionOrgAccountObjectDetailReport orgAccountObjectDetailReportEntry, BudgetConstructionAccountBalance accountBalance) {
239 if (accountBalance.getFinancialSubObjectCode().equals(BCConstants.DASH_SUB_OBJECT_CODE)) {
240 orgAccountObjectDetailReportEntry.setFinancialObjectName(accountBalance.getFinancialObject().getFinancialObjectCodeName());
241 }
242 else {
243 orgAccountObjectDetailReportEntry.setFinancialObjectName(accountBalance.getFinancialSubObject().getFinancialSubObjectCodeName());
244 }
245
246 orgAccountObjectDetailReportEntry.setPositionCsfLeaveFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(accountBalance.getPositionCsfLeaveFteQuantity(), 2, true));
247
248 orgAccountObjectDetailReportEntry.setPositionFullTimeEquivalencyQuantity(BudgetConstructionReportHelper.setDecimalDigit(accountBalance.getPositionFullTimeEquivalencyQuantity(), 2, true));
249
250 orgAccountObjectDetailReportEntry.setAppointmentRequestedCsfFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(accountBalance.getAppointmentRequestedCsfFteQuantity(), 2, true));
251
252 orgAccountObjectDetailReportEntry.setAppointmentRequestedFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(accountBalance.getAppointmentRequestedFteQuantity(), 2, true));
253
254 orgAccountObjectDetailReportEntry.setAccountLineAnnualBalanceAmount(BudgetConstructionReportHelper.convertKualiInteger(accountBalance.getAccountLineAnnualBalanceAmount()));
255
256 orgAccountObjectDetailReportEntry.setFinancialBeginningBalanceLineAmount(BudgetConstructionReportHelper.convertKualiInteger(accountBalance.getFinancialBeginningBalanceLineAmount()));
257
258 Integer changeAmount = BudgetConstructionReportHelper.convertKualiInteger(accountBalance.getAccountLineAnnualBalanceAmount()) - BudgetConstructionReportHelper.convertKualiInteger(accountBalance.getFinancialBeginningBalanceLineAmount());
259 orgAccountObjectDetailReportEntry.setAmountChange(changeAmount);
260 orgAccountObjectDetailReportEntry.setPercentChange(BudgetConstructionReportHelper.calculatePercent(orgAccountObjectDetailReportEntry.getAmountChange(), orgAccountObjectDetailReportEntry.getFinancialBeginningBalanceLineAmount()));
261 }
262
263 /**
264 * builds report total
265 */
266
267 protected void buildReportsTotal(BudgetConstructionOrgAccountObjectDetailReport orgObjectSummaryReportEntry, BudgetConstructionAccountBalance accountBalance, List<BudgetConstructionOrgAccountObjectDetailReportTotal> accountObjectDetailTotalObjectList, List<BudgetConstructionOrgAccountObjectDetailReportTotal> accountObjectDetailTotalLevelList, List<BudgetConstructionOrgAccountObjectDetailReportTotal> accountObjectDetailTotalGexpAndTypeList, List<BudgetConstructionOrgAccountObjectDetailReportTotal> accountObjectDetailAccountTotalList, List<BudgetConstructionOrgAccountObjectDetailReportTotal> accountObjectDetailSubFundTotalList) {
268
269 for (BudgetConstructionOrgAccountObjectDetailReportTotal objectTotal : accountObjectDetailTotalObjectList) {
270 if (BudgetConstructionReportHelper.isSameEntry(accountBalance, objectTotal.getBudgetConstructionAccountBalance(), fieldsForObject())) {
271 orgObjectSummaryReportEntry.setTotalObjectDescription(accountBalance.getFinancialObject().getFinancialObjectCodeName());
272
273 orgObjectSummaryReportEntry.setTotalObjectPositionCsfLeaveFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(objectTotal.getTotalObjectPositionCsfLeaveFteQuantity(), 2, true));
274 orgObjectSummaryReportEntry.setTotalObjectPositionFullTimeEquivalencyQuantity(BudgetConstructionReportHelper.setDecimalDigit(objectTotal.getTotalObjectPositionFullTimeEquivalencyQuantity(), 2, true));
275 orgObjectSummaryReportEntry.setTotalObjectFinancialBeginningBalanceLineAmount(objectTotal.getTotalObjectFinancialBeginningBalanceLineAmount());
276 orgObjectSummaryReportEntry.setTotalObjectAppointmentRequestedCsfFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(objectTotal.getTotalObjectAppointmentRequestedCsfFteQuantity(), 2, true));
277 orgObjectSummaryReportEntry.setTotalObjectAppointmentRequestedFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(objectTotal.getTotalObjectAppointmentRequestedFteQuantity(), 2, true));
278 orgObjectSummaryReportEntry.setTotalObjectAccountLineAnnualBalanceAmount(objectTotal.getTotalObjectAccountLineAnnualBalanceAmount());
279
280 Integer totalObjectAmountChange = objectTotal.getTotalObjectAccountLineAnnualBalanceAmount() - objectTotal.getTotalObjectFinancialBeginningBalanceLineAmount();
281 orgObjectSummaryReportEntry.setTotalObjectAmountChange(totalObjectAmountChange);
282 orgObjectSummaryReportEntry.setTotalObjectPercentChange(BudgetConstructionReportHelper.calculatePercent(totalObjectAmountChange, objectTotal.getTotalObjectFinancialBeginningBalanceLineAmount()));
283 }
284 }
285
286 for (BudgetConstructionOrgAccountObjectDetailReportTotal levelTotal : accountObjectDetailTotalLevelList) {
287 if (BudgetConstructionReportHelper.isSameEntry(accountBalance, levelTotal.getBudgetConstructionAccountBalance(), fieldsForLevel())) {
288 orgObjectSummaryReportEntry.setTotalLevelDescription(accountBalance.getFinancialObjectLevel().getFinancialObjectLevelName());
289
290 orgObjectSummaryReportEntry.setTotalLevelPositionCsfLeaveFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(levelTotal.getTotalLevelPositionCsfLeaveFteQuantity(), 2, true));
291 orgObjectSummaryReportEntry.setTotalLevelPositionFullTimeEquivalencyQuantity(BudgetConstructionReportHelper.setDecimalDigit(levelTotal.getTotalLevelPositionFullTimeEquivalencyQuantity(), 2, true));
292 orgObjectSummaryReportEntry.setTotalLevelFinancialBeginningBalanceLineAmount(levelTotal.getTotalLevelFinancialBeginningBalanceLineAmount());
293 orgObjectSummaryReportEntry.setTotalLevelAppointmentRequestedCsfFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(levelTotal.getTotalLevelAppointmentRequestedCsfFteQuantity(), 2, true));
294 orgObjectSummaryReportEntry.setTotalLevelAppointmentRequestedFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(levelTotal.getTotalLevelAppointmentRequestedFteQuantity(), 2, true));
295 orgObjectSummaryReportEntry.setTotalLevelAccountLineAnnualBalanceAmount(levelTotal.getTotalLevelAccountLineAnnualBalanceAmount());
296
297 Integer totalLevelAmountChange = levelTotal.getTotalLevelAccountLineAnnualBalanceAmount() - levelTotal.getTotalLevelFinancialBeginningBalanceLineAmount();
298 orgObjectSummaryReportEntry.setTotalLevelAmountChange(totalLevelAmountChange);
299 orgObjectSummaryReportEntry.setTotalLevelPercentChange(BudgetConstructionReportHelper.calculatePercent(totalLevelAmountChange, levelTotal.getTotalLevelFinancialBeginningBalanceLineAmount()));
300 }
301 }
302
303
304 for (BudgetConstructionOrgAccountObjectDetailReportTotal gexpAndTypeTotal : accountObjectDetailTotalGexpAndTypeList) {
305 if (BudgetConstructionReportHelper.isSameEntry(accountBalance, gexpAndTypeTotal.getBudgetConstructionAccountBalance(), fieldsForGexpAndType())) {
306
307 orgObjectSummaryReportEntry.setGrossFinancialBeginningBalanceLineAmount(gexpAndTypeTotal.getGrossFinancialBeginningBalanceLineAmount());
308 orgObjectSummaryReportEntry.setGrossAccountLineAnnualBalanceAmount(gexpAndTypeTotal.getGrossAccountLineAnnualBalanceAmount());
309 Integer grossAmountChange = gexpAndTypeTotal.getGrossAccountLineAnnualBalanceAmount() - gexpAndTypeTotal.getGrossFinancialBeginningBalanceLineAmount();
310 orgObjectSummaryReportEntry.setGrossAmountChange(grossAmountChange);
311 orgObjectSummaryReportEntry.setGrossPercentChange(BudgetConstructionReportHelper.calculatePercent(grossAmountChange, gexpAndTypeTotal.getGrossFinancialBeginningBalanceLineAmount()));
312
313 if (accountBalance.getIncomeExpenseCode().equals(BCConstants.Report.INCOME_EXP_TYPE_A)) {
314 orgObjectSummaryReportEntry.setTypeDesc(kualiConfigurationService.getPropertyString(BCKeyConstants.MSG_REPORT_INCOME_EXP_DESC_UPPERCASE_REVENUE));
315 }
316 else {
317 orgObjectSummaryReportEntry.setTypeDesc(kualiConfigurationService.getPropertyString(BCKeyConstants.MSG_REPORT_INCOME_EXP_DESC_EXPENDITURE_NET_TRNFR));
318 }
319
320 orgObjectSummaryReportEntry.setTypePositionCsfLeaveFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(gexpAndTypeTotal.getTypePositionCsfLeaveFteQuantity(), 2, true));
321 orgObjectSummaryReportEntry.setTypePositionFullTimeEquivalencyQuantity(BudgetConstructionReportHelper.setDecimalDigit(gexpAndTypeTotal.getTypePositionFullTimeEquivalencyQuantity(), 2, true));
322 orgObjectSummaryReportEntry.setTypeFinancialBeginningBalanceLineAmount(gexpAndTypeTotal.getTypeFinancialBeginningBalanceLineAmount());
323 orgObjectSummaryReportEntry.setTypeAppointmentRequestedCsfFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(gexpAndTypeTotal.getTypeAppointmentRequestedCsfFteQuantity(), 2, true));
324 orgObjectSummaryReportEntry.setTypeAppointmentRequestedFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(gexpAndTypeTotal.getTypeAppointmentRequestedFteQuantity(), 2, true));
325
326 orgObjectSummaryReportEntry.setTypeAccountLineAnnualBalanceAmount(gexpAndTypeTotal.getTypeAccountLineAnnualBalanceAmount());
327 Integer typeAmountChange = gexpAndTypeTotal.getTypeAccountLineAnnualBalanceAmount() - gexpAndTypeTotal.getTypeFinancialBeginningBalanceLineAmount();
328 orgObjectSummaryReportEntry.setTypeAmountChange(typeAmountChange);
329 orgObjectSummaryReportEntry.setTypePercentChange(BudgetConstructionReportHelper.calculatePercent(typeAmountChange, gexpAndTypeTotal.getTypeFinancialBeginningBalanceLineAmount()));
330 }
331 }
332
333 for (BudgetConstructionOrgAccountObjectDetailReportTotal accountTotal : accountObjectDetailAccountTotalList) {
334 if (BudgetConstructionReportHelper.isSameEntry(accountBalance, accountTotal.getBudgetConstructionAccountBalance(), fieldsForAccountTotal())) {
335
336 if (orgObjectSummaryReportEntry.getSubAccountName().equals(BCConstants.Report.BLANK)) {
337 orgObjectSummaryReportEntry.setAccountNameForAccountTotal(orgObjectSummaryReportEntry.getAccountName());
338 }
339 else {
340 orgObjectSummaryReportEntry.setAccountNameForAccountTotal(orgObjectSummaryReportEntry.getSubAccountName());
341 }
342
343 orgObjectSummaryReportEntry.setAccountPositionCsfLeaveFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(accountTotal.getAccountPositionCsfLeaveFteQuantity(), 2, true));
344 orgObjectSummaryReportEntry.setAccountPositionFullTimeEquivalencyQuantity(BudgetConstructionReportHelper.setDecimalDigit(accountTotal.getAccountPositionFullTimeEquivalencyQuantity(), 2, true));
345 orgObjectSummaryReportEntry.setAccountAppointmentRequestedCsfFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(accountTotal.getAccountAppointmentRequestedCsfFteQuantity(), 2, true));
346 orgObjectSummaryReportEntry.setAccountAppointmentRequestedFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(accountTotal.getAccountAppointmentRequestedFteQuantity(), 2, true));
347
348 orgObjectSummaryReportEntry.setAccountRevenueFinancialBeginningBalanceLineAmount(accountTotal.getAccountRevenueFinancialBeginningBalanceLineAmount());
349 orgObjectSummaryReportEntry.setAccountRevenueAccountLineAnnualBalanceAmount(accountTotal.getAccountRevenueAccountLineAnnualBalanceAmount());
350
351 Integer accountRevenueAmountChange = accountTotal.getAccountRevenueAccountLineAnnualBalanceAmount() - accountTotal.getAccountRevenueFinancialBeginningBalanceLineAmount();
352 orgObjectSummaryReportEntry.setAccountRevenueAmountChange(accountRevenueAmountChange);
353 orgObjectSummaryReportEntry.setAccountRevenuePercentChange(BudgetConstructionReportHelper.calculatePercent(accountRevenueAmountChange, accountTotal.getAccountRevenueFinancialBeginningBalanceLineAmount()));
354
355 Integer accountGrossFinancialBeginningBalanceLineAmount = accountTotal.getAccountExpenditureFinancialBeginningBalanceLineAmount() - accountTotal.getAccountTrnfrInFinancialBeginningBalanceLineAmount();
356 Integer accountGrossAccountLineAnnualBalanceAmount = accountTotal.getAccountExpenditureAccountLineAnnualBalanceAmount() - accountTotal.getAccountTrnfrInAccountLineAnnualBalanceAmount();
357 orgObjectSummaryReportEntry.setAccountGrossFinancialBeginningBalanceLineAmount(accountGrossFinancialBeginningBalanceLineAmount);
358 orgObjectSummaryReportEntry.setAccountGrossAccountLineAnnualBalanceAmount(accountGrossAccountLineAnnualBalanceAmount);
359 Integer accountGrossAmountChange = accountGrossAccountLineAnnualBalanceAmount - accountGrossFinancialBeginningBalanceLineAmount;
360 orgObjectSummaryReportEntry.setAccountGrossAmountChange(accountGrossAmountChange);
361 orgObjectSummaryReportEntry.setAccountGrossPercentChange(BudgetConstructionReportHelper.calculatePercent(accountGrossAmountChange, accountGrossFinancialBeginningBalanceLineAmount));
362
363 orgObjectSummaryReportEntry.setAccountTrnfrInFinancialBeginningBalanceLineAmount(accountTotal.getAccountTrnfrInFinancialBeginningBalanceLineAmount());
364 orgObjectSummaryReportEntry.setAccountTrnfrInAccountLineAnnualBalanceAmount(accountTotal.getAccountTrnfrInAccountLineAnnualBalanceAmount());
365
366 Integer accountTrnfrInAmountChange = accountTotal.getAccountTrnfrInAccountLineAnnualBalanceAmount() - accountTotal.getAccountTrnfrInFinancialBeginningBalanceLineAmount();
367 orgObjectSummaryReportEntry.setAccountTrnfrInAmountChange(accountTrnfrInAmountChange);
368 orgObjectSummaryReportEntry.setAccountTrnfrInPercentChange(BudgetConstructionReportHelper.calculatePercent(accountTrnfrInAmountChange, accountTotal.getAccountTrnfrInFinancialBeginningBalanceLineAmount()));
369
370 orgObjectSummaryReportEntry.setAccountExpenditureFinancialBeginningBalanceLineAmount(accountTotal.getAccountExpenditureFinancialBeginningBalanceLineAmount());
371 orgObjectSummaryReportEntry.setAccountExpenditureAccountLineAnnualBalanceAmount(accountTotal.getAccountExpenditureAccountLineAnnualBalanceAmount());
372
373 Integer accountExpenditureAmountChange = accountTotal.getAccountExpenditureAccountLineAnnualBalanceAmount() - accountTotal.getAccountExpenditureFinancialBeginningBalanceLineAmount();
374 orgObjectSummaryReportEntry.setAccountExpenditureAmountChange(accountExpenditureAmountChange);
375 orgObjectSummaryReportEntry.setAccountExpenditurePercentChange(BudgetConstructionReportHelper.calculatePercent(accountExpenditureAmountChange, accountTotal.getAccountExpenditureFinancialBeginningBalanceLineAmount()));
376
377 Integer accountDifferenceFinancialBeginningBalanceLineAmount = accountTotal.getAccountRevenueFinancialBeginningBalanceLineAmount() - accountTotal.getAccountExpenditureFinancialBeginningBalanceLineAmount();
378 Integer accountDifferenceAccountLineAnnualBalanceAmount = accountTotal.getAccountRevenueAccountLineAnnualBalanceAmount() - accountTotal.getAccountExpenditureAccountLineAnnualBalanceAmount();
379
380 orgObjectSummaryReportEntry.setAccountDifferenceFinancialBeginningBalanceLineAmount(accountDifferenceFinancialBeginningBalanceLineAmount);
381 orgObjectSummaryReportEntry.setAccountDifferenceAccountLineAnnualBalanceAmount(accountDifferenceAccountLineAnnualBalanceAmount);
382
383 orgObjectSummaryReportEntry.setAccountDifferenceFinancialBeginningBalanceLineAmount(accountDifferenceFinancialBeginningBalanceLineAmount);
384 orgObjectSummaryReportEntry.setAccountDifferenceAccountLineAnnualBalanceAmount(accountDifferenceAccountLineAnnualBalanceAmount);
385
386 Integer accountDifferenceAmountChange = accountDifferenceAccountLineAnnualBalanceAmount - accountDifferenceFinancialBeginningBalanceLineAmount;
387 orgObjectSummaryReportEntry.setAccountDifferenceAmountChange(accountDifferenceAmountChange);
388 orgObjectSummaryReportEntry.setAccountDifferencePercentChange(BudgetConstructionReportHelper.calculatePercent(accountDifferenceAmountChange, accountDifferenceFinancialBeginningBalanceLineAmount));
389 }
390 }
391
392 for (BudgetConstructionOrgAccountObjectDetailReportTotal subFundTotal : accountObjectDetailSubFundTotalList) {
393 if (BudgetConstructionReportHelper.isSameEntry(accountBalance, subFundTotal.getBudgetConstructionAccountBalance(), fieldsForSubFundTotal())) {
394
395 orgObjectSummaryReportEntry.setSubFundPositionCsfLeaveFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(subFundTotal.getSubFundPositionCsfLeaveFteQuantity(), 2, true));
396 orgObjectSummaryReportEntry.setSubFundPositionFullTimeEquivalencyQuantity(BudgetConstructionReportHelper.setDecimalDigit(subFundTotal.getSubFundPositionFullTimeEquivalencyQuantity(), 2, true));
397 orgObjectSummaryReportEntry.setSubFundAppointmentRequestedCsfFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(subFundTotal.getSubFundAppointmentRequestedCsfFteQuantity(), 2, true));
398 orgObjectSummaryReportEntry.setSubFundAppointmentRequestedFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(subFundTotal.getSubFundAppointmentRequestedFteQuantity(), 2, true));
399
400 orgObjectSummaryReportEntry.setSubFundRevenueFinancialBeginningBalanceLineAmount(subFundTotal.getSubFundRevenueFinancialBeginningBalanceLineAmount());
401 orgObjectSummaryReportEntry.setSubFundRevenueAccountLineAnnualBalanceAmount(subFundTotal.getSubFundRevenueAccountLineAnnualBalanceAmount());
402
403 Integer subFundRevenueAmountChange = subFundTotal.getSubFundRevenueAccountLineAnnualBalanceAmount() - subFundTotal.getSubFundRevenueFinancialBeginningBalanceLineAmount();
404 orgObjectSummaryReportEntry.setSubFundRevenueAmountChange(subFundRevenueAmountChange);
405 orgObjectSummaryReportEntry.setSubFundRevenuePercentChange(BudgetConstructionReportHelper.calculatePercent(subFundRevenueAmountChange, subFundTotal.getSubFundRevenueFinancialBeginningBalanceLineAmount()));
406
407 Integer subFundGrossFinancialBeginningBalanceLineAmount = subFundTotal.getSubFundExpenditureFinancialBeginningBalanceLineAmount() - subFundTotal.getSubFundTrnfrInFinancialBeginningBalanceLineAmount();
408 Integer subFundGrossAccountLineAnnualBalanceAmount = subFundTotal.getSubFundExpenditureAccountLineAnnualBalanceAmount() - subFundTotal.getSubFundTrnfrInAccountLineAnnualBalanceAmount();
409 orgObjectSummaryReportEntry.setSubFundGrossFinancialBeginningBalanceLineAmount(subFundGrossFinancialBeginningBalanceLineAmount);
410 orgObjectSummaryReportEntry.setSubFundGrossAccountLineAnnualBalanceAmount(subFundGrossAccountLineAnnualBalanceAmount);
411 Integer subFundGrossAmountChange = subFundGrossAccountLineAnnualBalanceAmount - subFundGrossFinancialBeginningBalanceLineAmount;
412 orgObjectSummaryReportEntry.setSubFundGrossAmountChange(subFundGrossAmountChange);
413 orgObjectSummaryReportEntry.setSubFundGrossPercentChange(BudgetConstructionReportHelper.calculatePercent(subFundGrossAmountChange, subFundGrossFinancialBeginningBalanceLineAmount));
414
415 orgObjectSummaryReportEntry.setSubFundTrnfrInFinancialBeginningBalanceLineAmount(subFundTotal.getSubFundTrnfrInFinancialBeginningBalanceLineAmount());
416 orgObjectSummaryReportEntry.setSubFundTrnfrInAccountLineAnnualBalanceAmount(subFundTotal.getSubFundTrnfrInAccountLineAnnualBalanceAmount());
417
418 Integer subFundTrnfrInAmountChange = subFundTotal.getSubFundTrnfrInAccountLineAnnualBalanceAmount() - subFundTotal.getSubFundTrnfrInFinancialBeginningBalanceLineAmount();
419 orgObjectSummaryReportEntry.setSubFundTrnfrInAmountChange(subFundTrnfrInAmountChange);
420 orgObjectSummaryReportEntry.setSubFundTrnfrInPercentChange(BudgetConstructionReportHelper.calculatePercent(subFundTrnfrInAmountChange, subFundTotal.getSubFundTrnfrInFinancialBeginningBalanceLineAmount()));
421
422 orgObjectSummaryReportEntry.setSubFundExpenditureFinancialBeginningBalanceLineAmount(subFundTotal.getSubFundExpenditureFinancialBeginningBalanceLineAmount());
423 orgObjectSummaryReportEntry.setSubFundExpenditureAccountLineAnnualBalanceAmount(subFundTotal.getSubFundExpenditureAccountLineAnnualBalanceAmount());
424
425 Integer subFundExpenditureAmountChange = subFundTotal.getSubFundExpenditureAccountLineAnnualBalanceAmount() - subFundTotal.getSubFundExpenditureFinancialBeginningBalanceLineAmount();
426 orgObjectSummaryReportEntry.setSubFundExpenditureAmountChange(subFundExpenditureAmountChange);
427 orgObjectSummaryReportEntry.setSubFundExpenditurePercentChange(BudgetConstructionReportHelper.calculatePercent(subFundExpenditureAmountChange, subFundTotal.getSubFundExpenditureFinancialBeginningBalanceLineAmount()));
428
429 Integer subFundDifferenceFinancialBeginningBalanceLineAmount = subFundTotal.getSubFundRevenueFinancialBeginningBalanceLineAmount() - subFundTotal.getSubFundExpenditureFinancialBeginningBalanceLineAmount();
430 Integer subFundDifferenceAccountLineAnnualBalanceAmount = subFundTotal.getSubFundRevenueAccountLineAnnualBalanceAmount() - subFundTotal.getSubFundExpenditureAccountLineAnnualBalanceAmount();
431
432 orgObjectSummaryReportEntry.setSubFundDifferenceFinancialBeginningBalanceLineAmount(subFundDifferenceFinancialBeginningBalanceLineAmount);
433 orgObjectSummaryReportEntry.setSubFundDifferenceAccountLineAnnualBalanceAmount(subFundDifferenceAccountLineAnnualBalanceAmount);
434
435 orgObjectSummaryReportEntry.setSubFundDifferenceFinancialBeginningBalanceLineAmount(subFundDifferenceFinancialBeginningBalanceLineAmount);
436 orgObjectSummaryReportEntry.setSubFundDifferenceAccountLineAnnualBalanceAmount(subFundDifferenceAccountLineAnnualBalanceAmount);
437
438 Integer subFundDifferenceAmountChange = subFundDifferenceAccountLineAnnualBalanceAmount - subFundDifferenceFinancialBeginningBalanceLineAmount;
439 orgObjectSummaryReportEntry.setSubFundDifferenceAmountChange(subFundDifferenceAmountChange);
440 orgObjectSummaryReportEntry.setSubFundDifferencePercentChange(BudgetConstructionReportHelper.calculatePercent(subFundDifferenceAmountChange, subFundDifferenceFinancialBeginningBalanceLineAmount));
441 }
442 }
443
444
445 }
446
447 protected List calculateObjectTotal(List<BudgetConstructionAccountBalance> bcosList, List<BudgetConstructionAccountBalance> simpleList) {
448
449 BigDecimal totalObjectPositionCsfLeaveFteQuantity = BigDecimal.ZERO;
450 BigDecimal totalObjectPositionFullTimeEquivalencyQuantity = BigDecimal.ZERO;
451 Integer totalObjectFinancialBeginningBalanceLineAmount = new Integer(0);
452 BigDecimal totalObjectAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
453 BigDecimal totalObjectAppointmentRequestedFteQuantity = BigDecimal.ZERO;
454 Integer totalObjectAccountLineAnnualBalanceAmount = new Integer(0);
455
456 List returnList = new ArrayList();
457
458 for (BudgetConstructionAccountBalance simpleBcosEntry : simpleList) {
459
460 BudgetConstructionOrgAccountObjectDetailReportTotal bcObjectTotal = new BudgetConstructionOrgAccountObjectDetailReportTotal();
461 for (BudgetConstructionAccountBalance bcosListEntry : bcosList) {
462 if (BudgetConstructionReportHelper.isSameEntry(simpleBcosEntry, bcosListEntry, fieldsForObject())) {
463 totalObjectFinancialBeginningBalanceLineAmount += new Integer(bcosListEntry.getFinancialBeginningBalanceLineAmount().intValue());
464 totalObjectAccountLineAnnualBalanceAmount += new Integer(bcosListEntry.getAccountLineAnnualBalanceAmount().intValue());
465 totalObjectPositionCsfLeaveFteQuantity = totalObjectPositionCsfLeaveFteQuantity.add(bcosListEntry.getPositionCsfLeaveFteQuantity());
466 totalObjectPositionFullTimeEquivalencyQuantity = totalObjectPositionFullTimeEquivalencyQuantity.add(bcosListEntry.getPositionFullTimeEquivalencyQuantity());
467 totalObjectAppointmentRequestedCsfFteQuantity = totalObjectAppointmentRequestedCsfFteQuantity.add(bcosListEntry.getAppointmentRequestedCsfFteQuantity());
468 totalObjectAppointmentRequestedFteQuantity = totalObjectAppointmentRequestedFteQuantity.add(bcosListEntry.getAppointmentRequestedFteQuantity());
469 }
470 }
471 bcObjectTotal.setBudgetConstructionAccountBalance(simpleBcosEntry);
472 bcObjectTotal.setTotalObjectPositionCsfLeaveFteQuantity(totalObjectPositionCsfLeaveFteQuantity);
473 bcObjectTotal.setTotalObjectPositionFullTimeEquivalencyQuantity(totalObjectPositionFullTimeEquivalencyQuantity);
474 bcObjectTotal.setTotalObjectFinancialBeginningBalanceLineAmount(totalObjectFinancialBeginningBalanceLineAmount);
475 bcObjectTotal.setTotalObjectAppointmentRequestedCsfFteQuantity(totalObjectAppointmentRequestedCsfFteQuantity);
476 bcObjectTotal.setTotalObjectAppointmentRequestedFteQuantity(totalObjectAppointmentRequestedFteQuantity);
477 bcObjectTotal.setTotalObjectAccountLineAnnualBalanceAmount(totalObjectAccountLineAnnualBalanceAmount);
478
479 returnList.add(bcObjectTotal);
480
481 totalObjectPositionCsfLeaveFteQuantity = BigDecimal.ZERO;
482 totalObjectPositionFullTimeEquivalencyQuantity = BigDecimal.ZERO;
483 totalObjectFinancialBeginningBalanceLineAmount = new Integer(0);
484 totalObjectAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
485 totalObjectAppointmentRequestedFteQuantity = BigDecimal.ZERO;
486 totalObjectAccountLineAnnualBalanceAmount = new Integer(0);
487 }
488 return returnList;
489
490 }
491
492 public void setBusinessObjectService(BusinessObjectService businessObjectService) {
493 this.businessObjectService = businessObjectService;
494 }
495
496 protected List calculateLevelTotal(List<BudgetConstructionAccountBalance> bcosList, List<BudgetConstructionAccountBalance> simpleList) {
497
498 BigDecimal totalLevelPositionCsfLeaveFteQuantity = BigDecimal.ZERO;
499 BigDecimal totalLevelPositionFullTimeEquivalencyQuantity = BigDecimal.ZERO;
500 Integer totalLevelFinancialBeginningBalanceLineAmount = new Integer(0);
501 BigDecimal totalLevelAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
502 BigDecimal totalLevelAppointmentRequestedFteQuantity = BigDecimal.ZERO;
503 Integer totalLevelAccountLineAnnualBalanceAmount = new Integer(0);
504
505 List returnList = new ArrayList();
506
507 for (BudgetConstructionAccountBalance simpleBcosEntry : simpleList) {
508
509 BudgetConstructionOrgAccountObjectDetailReportTotal bcObjectTotal = new BudgetConstructionOrgAccountObjectDetailReportTotal();
510 for (BudgetConstructionAccountBalance bcosListEntry : bcosList) {
511 if (BudgetConstructionReportHelper.isSameEntry(simpleBcosEntry, bcosListEntry, fieldsForLevel())) {
512 totalLevelFinancialBeginningBalanceLineAmount += new Integer(bcosListEntry.getFinancialBeginningBalanceLineAmount().intValue());
513 totalLevelAccountLineAnnualBalanceAmount += new Integer(bcosListEntry.getAccountLineAnnualBalanceAmount().intValue());
514 totalLevelPositionCsfLeaveFteQuantity = totalLevelPositionCsfLeaveFteQuantity.add(bcosListEntry.getPositionCsfLeaveFteQuantity());
515 totalLevelPositionFullTimeEquivalencyQuantity = totalLevelPositionFullTimeEquivalencyQuantity.add(bcosListEntry.getPositionFullTimeEquivalencyQuantity());
516 totalLevelAppointmentRequestedCsfFteQuantity = totalLevelAppointmentRequestedCsfFteQuantity.add(bcosListEntry.getAppointmentRequestedCsfFteQuantity());
517 totalLevelAppointmentRequestedFteQuantity = totalLevelAppointmentRequestedFteQuantity.add(bcosListEntry.getAppointmentRequestedFteQuantity());
518 }
519 }
520 bcObjectTotal.setBudgetConstructionAccountBalance(simpleBcosEntry);
521 bcObjectTotal.setTotalLevelPositionCsfLeaveFteQuantity(totalLevelPositionCsfLeaveFteQuantity);
522 bcObjectTotal.setTotalLevelPositionFullTimeEquivalencyQuantity(totalLevelPositionFullTimeEquivalencyQuantity);
523 bcObjectTotal.setTotalLevelFinancialBeginningBalanceLineAmount(totalLevelFinancialBeginningBalanceLineAmount);
524 bcObjectTotal.setTotalLevelAppointmentRequestedCsfFteQuantity(totalLevelAppointmentRequestedCsfFteQuantity);
525 bcObjectTotal.setTotalLevelAppointmentRequestedFteQuantity(totalLevelAppointmentRequestedFteQuantity);
526 bcObjectTotal.setTotalLevelAccountLineAnnualBalanceAmount(totalLevelAccountLineAnnualBalanceAmount);
527
528 returnList.add(bcObjectTotal);
529
530 totalLevelPositionCsfLeaveFteQuantity = BigDecimal.ZERO;
531 totalLevelPositionFullTimeEquivalencyQuantity = BigDecimal.ZERO;
532 totalLevelFinancialBeginningBalanceLineAmount = new Integer(0);
533 totalLevelAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
534 totalLevelAppointmentRequestedFteQuantity = BigDecimal.ZERO;
535 totalLevelAccountLineAnnualBalanceAmount = new Integer(0);
536 }
537 return returnList;
538 }
539
540
541 protected List calculateGexpAndTypeTotal(List<BudgetConstructionAccountBalance> bcabList, List<BudgetConstructionAccountBalance> simpleList) {
542
543 Integer grossFinancialBeginningBalanceLineAmount = new Integer(0);
544 Integer grossAccountLineAnnualBalanceAmount = new Integer(0);
545
546 BigDecimal typePositionCsfLeaveFteQuantity = BigDecimal.ZERO;
547 BigDecimal typePositionFullTimeEquivalencyQuantity = BigDecimal.ZERO;
548 Integer typeFinancialBeginningBalanceLineAmount = new Integer(0);
549 BigDecimal typeAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
550 BigDecimal typeAppointmentRequestedFteQuantity = BigDecimal.ZERO;
551 Integer typeAccountLineAnnualBalanceAmount = new Integer(0);
552
553 List returnList = new ArrayList();
554 for (BudgetConstructionAccountBalance simpleBcosEntry : simpleList) {
555 BudgetConstructionOrgAccountObjectDetailReportTotal bcObjectTotal = new BudgetConstructionOrgAccountObjectDetailReportTotal();
556 for (BudgetConstructionAccountBalance bcabListEntry : bcabList) {
557 if (BudgetConstructionReportHelper.isSameEntry(simpleBcosEntry, bcabListEntry, fieldsForGexpAndType())) {
558
559 typeFinancialBeginningBalanceLineAmount += new Integer(bcabListEntry.getFinancialBeginningBalanceLineAmount().intValue());
560 typeAccountLineAnnualBalanceAmount += new Integer(bcabListEntry.getAccountLineAnnualBalanceAmount().intValue());
561 typePositionCsfLeaveFteQuantity = typePositionCsfLeaveFteQuantity.add(bcabListEntry.getPositionCsfLeaveFteQuantity());
562 typePositionFullTimeEquivalencyQuantity = typePositionFullTimeEquivalencyQuantity.add(bcabListEntry.getPositionFullTimeEquivalencyQuantity());
563 typeAppointmentRequestedCsfFteQuantity = typeAppointmentRequestedCsfFteQuantity.add(bcabListEntry.getAppointmentRequestedCsfFteQuantity());
564 typeAppointmentRequestedFteQuantity = typeAppointmentRequestedFteQuantity.add(bcabListEntry.getAppointmentRequestedFteQuantity());
565
566 if (bcabListEntry.getIncomeExpenseCode().equals("B") && !bcabListEntry.getFinancialObjectLevelCode().equals("CORI") && !bcabListEntry.getFinancialObjectLevelCode().equals("TRIN")) {
567 grossFinancialBeginningBalanceLineAmount += new Integer(bcabListEntry.getFinancialBeginningBalanceLineAmount().intValue());
568 grossAccountLineAnnualBalanceAmount += new Integer(bcabListEntry.getAccountLineAnnualBalanceAmount().intValue());
569 }
570 }
571 }
572 bcObjectTotal.setBudgetConstructionAccountBalance(simpleBcosEntry);
573
574 bcObjectTotal.setGrossFinancialBeginningBalanceLineAmount(grossFinancialBeginningBalanceLineAmount);
575 bcObjectTotal.setGrossAccountLineAnnualBalanceAmount(grossAccountLineAnnualBalanceAmount);
576
577 bcObjectTotal.setTypePositionCsfLeaveFteQuantity(typePositionCsfLeaveFteQuantity);
578 bcObjectTotal.setTypePositionFullTimeEquivalencyQuantity(typePositionFullTimeEquivalencyQuantity);
579 bcObjectTotal.setTypeFinancialBeginningBalanceLineAmount(typeFinancialBeginningBalanceLineAmount);
580 bcObjectTotal.setTypeAppointmentRequestedCsfFteQuantity(typeAppointmentRequestedCsfFteQuantity);
581 bcObjectTotal.setTypeAppointmentRequestedFteQuantity(typeAppointmentRequestedFteQuantity);
582 bcObjectTotal.setTypeAccountLineAnnualBalanceAmount(typeAccountLineAnnualBalanceAmount);
583
584 returnList.add(bcObjectTotal);
585
586 grossFinancialBeginningBalanceLineAmount = new Integer(0);
587 grossAccountLineAnnualBalanceAmount = new Integer(0);
588
589 typePositionCsfLeaveFteQuantity = BigDecimal.ZERO;
590 typePositionFullTimeEquivalencyQuantity = BigDecimal.ZERO;
591 typeFinancialBeginningBalanceLineAmount = new Integer(0);
592 typeAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
593 typeAppointmentRequestedFteQuantity = BigDecimal.ZERO;
594 typeAccountLineAnnualBalanceAmount = new Integer(0);
595 }
596 return returnList;
597 }
598
599 protected List calculateAccountTotal(List<BudgetConstructionAccountBalance> bcabList, List<BudgetConstructionAccountBalance> simpleList) {
600 BigDecimal accountPositionCsfLeaveFteQuantity = BigDecimal.ZERO;
601 BigDecimal accountPositionFullTimeEquivalencyQuantity = BigDecimal.ZERO;
602 BigDecimal accountAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
603 BigDecimal accountAppointmentRequestedFteQuantity = BigDecimal.ZERO;
604
605 Integer accountRevenueFinancialBeginningBalanceLineAmount = new Integer(0);
606 Integer accountRevenueAccountLineAnnualBalanceAmount = new Integer(0);
607 Integer accountTrnfrInFinancialBeginningBalanceLineAmount = new Integer(0);
608 Integer accountTrnfrInAccountLineAnnualBalanceAmount = new Integer(0);
609 Integer accountExpenditureFinancialBeginningBalanceLineAmount = new Integer(0);
610 Integer accountExpenditureAccountLineAnnualBalanceAmount = new Integer(0);
611
612 List returnList = new ArrayList();
613
614 for (BudgetConstructionAccountBalance simpleBcosEntry : simpleList) {
615 BudgetConstructionOrgAccountObjectDetailReportTotal bcObjectTotal = new BudgetConstructionOrgAccountObjectDetailReportTotal();
616 for (BudgetConstructionAccountBalance bcabListEntry : bcabList) {
617 if (BudgetConstructionReportHelper.isSameEntry(simpleBcosEntry, bcabListEntry, fieldsForAccountTotal())) {
618
619 accountPositionCsfLeaveFteQuantity = accountPositionCsfLeaveFteQuantity.add(bcabListEntry.getPositionCsfLeaveFteQuantity());
620 accountPositionFullTimeEquivalencyQuantity = accountPositionFullTimeEquivalencyQuantity.add(bcabListEntry.getPositionFullTimeEquivalencyQuantity());
621 accountAppointmentRequestedCsfFteQuantity = accountAppointmentRequestedCsfFteQuantity.add(bcabListEntry.getAppointmentRequestedCsfFteQuantity());
622 accountAppointmentRequestedFteQuantity = accountAppointmentRequestedFteQuantity.add(bcabListEntry.getAppointmentRequestedFteQuantity());
623
624 if (bcabListEntry.getIncomeExpenseCode().equals("A")) {
625 accountRevenueFinancialBeginningBalanceLineAmount += new Integer(bcabListEntry.getFinancialBeginningBalanceLineAmount().intValue());
626 accountRevenueAccountLineAnnualBalanceAmount += new Integer(bcabListEntry.getAccountLineAnnualBalanceAmount().intValue());
627 }
628 else {
629 accountExpenditureFinancialBeginningBalanceLineAmount += new Integer(bcabListEntry.getFinancialBeginningBalanceLineAmount().intValue());
630 accountExpenditureAccountLineAnnualBalanceAmount += new Integer(bcabListEntry.getAccountLineAnnualBalanceAmount().intValue());
631 }
632
633 if (bcabListEntry.getIncomeExpenseCode().equals("B")) {
634 if (bcabListEntry.getFinancialObjectLevelCode().equals("CORI") || bcabListEntry.getFinancialObjectLevelCode().equals("TRIN")) {
635 accountTrnfrInFinancialBeginningBalanceLineAmount += new Integer(bcabListEntry.getFinancialBeginningBalanceLineAmount().intValue());
636 accountTrnfrInAccountLineAnnualBalanceAmount += new Integer(bcabListEntry.getAccountLineAnnualBalanceAmount().intValue());
637 }
638 }
639 }
640 }
641
642 bcObjectTotal.setBudgetConstructionAccountBalance(simpleBcosEntry);
643
644 bcObjectTotal.setAccountPositionCsfLeaveFteQuantity(accountPositionCsfLeaveFteQuantity);
645 bcObjectTotal.setAccountPositionFullTimeEquivalencyQuantity(accountPositionFullTimeEquivalencyQuantity);
646 bcObjectTotal.setAccountAppointmentRequestedCsfFteQuantity(accountAppointmentRequestedCsfFteQuantity);
647 bcObjectTotal.setAccountAppointmentRequestedFteQuantity(accountAppointmentRequestedFteQuantity);
648
649 bcObjectTotal.setAccountRevenueFinancialBeginningBalanceLineAmount(accountRevenueFinancialBeginningBalanceLineAmount);
650 bcObjectTotal.setAccountRevenueAccountLineAnnualBalanceAmount(accountRevenueAccountLineAnnualBalanceAmount);
651 bcObjectTotal.setAccountTrnfrInFinancialBeginningBalanceLineAmount(accountTrnfrInFinancialBeginningBalanceLineAmount);
652 bcObjectTotal.setAccountTrnfrInAccountLineAnnualBalanceAmount(accountTrnfrInAccountLineAnnualBalanceAmount);
653 bcObjectTotal.setAccountExpenditureFinancialBeginningBalanceLineAmount(accountExpenditureFinancialBeginningBalanceLineAmount);
654 bcObjectTotal.setAccountExpenditureAccountLineAnnualBalanceAmount(accountExpenditureAccountLineAnnualBalanceAmount);
655
656 returnList.add(bcObjectTotal);
657
658 accountPositionCsfLeaveFteQuantity = BigDecimal.ZERO;
659 accountPositionFullTimeEquivalencyQuantity = BigDecimal.ZERO;
660 accountAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
661 accountAppointmentRequestedFteQuantity = BigDecimal.ZERO;
662
663 accountRevenueFinancialBeginningBalanceLineAmount = new Integer(0);
664 accountRevenueAccountLineAnnualBalanceAmount = new Integer(0);
665 accountTrnfrInFinancialBeginningBalanceLineAmount = new Integer(0);
666 accountTrnfrInAccountLineAnnualBalanceAmount = new Integer(0);
667 accountExpenditureFinancialBeginningBalanceLineAmount = new Integer(0);
668 accountExpenditureAccountLineAnnualBalanceAmount = new Integer(0);
669 }
670 return returnList;
671 }
672
673
674 protected List calculateSubFundTotal(List<BudgetConstructionAccountBalance> bcabList, List<BudgetConstructionAccountBalance> simpleList) {
675
676 BigDecimal subFundPositionCsfLeaveFteQuantity = BigDecimal.ZERO;
677 BigDecimal subFundPositionFullTimeEquivalencyQuantity = BigDecimal.ZERO;
678 BigDecimal subFundAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
679 BigDecimal subFundAppointmentRequestedFteQuantity = BigDecimal.ZERO;
680
681 Integer subFundRevenueFinancialBeginningBalanceLineAmount = new Integer(0);
682 Integer subFundRevenueAccountLineAnnualBalanceAmount = new Integer(0);
683 Integer subFundTrnfrInFinancialBeginningBalanceLineAmount = new Integer(0);
684 Integer subFundTrnfrInAccountLineAnnualBalanceAmount = new Integer(0);
685 Integer subFundExpenditureFinancialBeginningBalanceLineAmount = new Integer(0);
686 Integer subFundExpenditureAccountLineAnnualBalanceAmount = new Integer(0);
687
688 List returnList = new ArrayList();
689
690 for (BudgetConstructionAccountBalance simpleBcosEntry : simpleList) {
691 BudgetConstructionOrgAccountObjectDetailReportTotal bcObjectTotal = new BudgetConstructionOrgAccountObjectDetailReportTotal();
692 for (BudgetConstructionAccountBalance bcabListEntry : bcabList) {
693 if (BudgetConstructionReportHelper.isSameEntry(simpleBcosEntry, bcabListEntry, fieldsForSubFundTotal())) {
694
695 subFundPositionCsfLeaveFteQuantity = subFundPositionCsfLeaveFteQuantity.add(bcabListEntry.getPositionCsfLeaveFteQuantity());
696 subFundPositionFullTimeEquivalencyQuantity = subFundPositionFullTimeEquivalencyQuantity.add(bcabListEntry.getPositionFullTimeEquivalencyQuantity());
697 subFundAppointmentRequestedCsfFteQuantity = subFundAppointmentRequestedCsfFteQuantity.add(bcabListEntry.getAppointmentRequestedCsfFteQuantity());
698 subFundAppointmentRequestedFteQuantity = subFundAppointmentRequestedFteQuantity.add(bcabListEntry.getAppointmentRequestedFteQuantity());
699
700 if (bcabListEntry.getIncomeExpenseCode().equals("A")) {
701 subFundRevenueFinancialBeginningBalanceLineAmount += new Integer(bcabListEntry.getFinancialBeginningBalanceLineAmount().intValue());
702 subFundRevenueAccountLineAnnualBalanceAmount += new Integer(bcabListEntry.getAccountLineAnnualBalanceAmount().intValue());
703 }
704 else {
705 subFundExpenditureFinancialBeginningBalanceLineAmount += new Integer(bcabListEntry.getFinancialBeginningBalanceLineAmount().intValue());
706 subFundExpenditureAccountLineAnnualBalanceAmount += new Integer(bcabListEntry.getAccountLineAnnualBalanceAmount().intValue());
707 }
708
709 if (bcabListEntry.getIncomeExpenseCode().equals("B")) {
710 if (bcabListEntry.getFinancialObjectLevelCode().equals("CORI") || bcabListEntry.getFinancialObjectLevelCode().equals("TRIN")) {
711 subFundTrnfrInFinancialBeginningBalanceLineAmount += new Integer(bcabListEntry.getFinancialBeginningBalanceLineAmount().intValue());
712 subFundTrnfrInAccountLineAnnualBalanceAmount += new Integer(bcabListEntry.getAccountLineAnnualBalanceAmount().intValue());
713 }
714 }
715 }
716 }
717
718 bcObjectTotal.setBudgetConstructionAccountBalance(simpleBcosEntry);
719
720 bcObjectTotal.setSubFundPositionCsfLeaveFteQuantity(subFundPositionCsfLeaveFteQuantity);
721 bcObjectTotal.setSubFundPositionFullTimeEquivalencyQuantity(subFundPositionFullTimeEquivalencyQuantity);
722 bcObjectTotal.setSubFundAppointmentRequestedCsfFteQuantity(subFundAppointmentRequestedCsfFteQuantity);
723 bcObjectTotal.setSubFundAppointmentRequestedFteQuantity(subFundAppointmentRequestedFteQuantity);
724
725 bcObjectTotal.setSubFundRevenueFinancialBeginningBalanceLineAmount(subFundRevenueFinancialBeginningBalanceLineAmount);
726 bcObjectTotal.setSubFundRevenueAccountLineAnnualBalanceAmount(subFundRevenueAccountLineAnnualBalanceAmount);
727
728 bcObjectTotal.setSubFundTrnfrInFinancialBeginningBalanceLineAmount(subFundTrnfrInFinancialBeginningBalanceLineAmount);
729 bcObjectTotal.setSubFundTrnfrInAccountLineAnnualBalanceAmount(subFundTrnfrInAccountLineAnnualBalanceAmount);
730
731 bcObjectTotal.setSubFundExpenditureFinancialBeginningBalanceLineAmount(subFundExpenditureFinancialBeginningBalanceLineAmount);
732 bcObjectTotal.setSubFundExpenditureAccountLineAnnualBalanceAmount(subFundExpenditureAccountLineAnnualBalanceAmount);
733
734 returnList.add(bcObjectTotal);
735
736 subFundPositionCsfLeaveFteQuantity = BigDecimal.ZERO;
737 subFundPositionFullTimeEquivalencyQuantity = BigDecimal.ZERO;
738 subFundAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO;
739 subFundAppointmentRequestedFteQuantity = BigDecimal.ZERO;
740
741 subFundRevenueFinancialBeginningBalanceLineAmount = new Integer(0);
742 subFundRevenueAccountLineAnnualBalanceAmount = new Integer(0);
743 subFundTrnfrInFinancialBeginningBalanceLineAmount = new Integer(0);
744 subFundTrnfrInAccountLineAnnualBalanceAmount = new Integer(0);
745 subFundExpenditureFinancialBeginningBalanceLineAmount = new Integer(0);
746 subFundExpenditureAccountLineAnnualBalanceAmount = new Integer(0);
747 }
748 return returnList;
749 }
750
751
752 /**
753 * builds list of fields for comparing entry of Object
754 *
755 * @return List<String>
756 */
757 protected List<String> fieldsForObject() {
758 List<String> fieldList = new ArrayList();
759 fieldList.addAll(fieldsForLevel());
760 fieldList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE);
761 // fieldList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE);
762 return fieldList;
763 }
764
765 /**
766 * builds list of fields for comparing entry of Level
767 *
768 * @return List<String>
769 */
770 protected List<String> fieldsForLevel() {
771 List<String> fieldList = new ArrayList();
772 fieldList.addAll(fieldsForGexpAndType());
773 fieldList.add(KFSPropertyConstants.FINANCIAL_LEVEL_SORT_CODE);
774 return fieldList;
775 }
776
777 /**
778 * builds list of fields for comparing entry of GexpAndType
779 *
780 * @return List<String>
781 */
782 protected List<String> fieldsForGexpAndType() {
783 List<String> fieldList = new ArrayList();
784 fieldList.addAll(fieldsForAccountTotal());
785 fieldList.add(KFSPropertyConstants.INCOME_EXPENSE_CODE);
786 return fieldList;
787 }
788
789 /**
790 * builds list of fields for comparing entry of AccountTotal
791 *
792 * @return List<String>
793 */
794 protected List<String> fieldsForAccountTotal() {
795 List<String> fieldList = new ArrayList();
796 // fieldList.addAll(fieldsForSubFundTotal());
797 fieldList.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
798 fieldList.add(KFSPropertyConstants.ACCOUNT_NUMBER);
799 fieldList.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER);
800 return fieldList;
801 }
802
803 /**
804 * builds list of fields for comparing entry of SubFundTotal total
805 *
806 * @return List<String>
807 */
808 protected List<String> fieldsForSubFundTotal() {
809 List<String> fieldList = new ArrayList();
810
811 fieldList.add(KFSPropertyConstants.ORGANIZATION_CHART_OF_ACCOUNTS_CODE);
812 fieldList.add(KFSPropertyConstants.ORGANIZATION_CODE);
813 fieldList.add(KFSPropertyConstants.SUB_FUND_GROUP_CODE);
814 return fieldList;
815 }
816
817
818 public List<String> buildOrderByList() {
819 List<String> returnList = new ArrayList();
820 returnList.add(KFSPropertyConstants.ORGANIZATION_CHART_OF_ACCOUNTS_CODE);
821 returnList.add(KFSPropertyConstants.ORGANIZATION_CODE);
822 returnList.add(KFSPropertyConstants.SUB_FUND_GROUP_CODE);
823 returnList.add(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR);
824 returnList.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
825 returnList.add(KFSPropertyConstants.ACCOUNT_NUMBER);
826 returnList.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER);
827 returnList.add(KFSPropertyConstants.INCOME_EXPENSE_CODE);
828 returnList.add(KFSPropertyConstants.FINANCIAL_CONSOLIDATION_SORT_CODE);
829 returnList.add(KFSPropertyConstants.FINANCIAL_LEVEL_SORT_CODE);
830 returnList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE);
831 returnList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE);
832 return returnList;
833 }
834
835 public void setKualiConfigurationService(KualiConfigurationService kualiConfigurationService) {
836 this.kualiConfigurationService = kualiConfigurationService;
837 }
838
839 public KualiConfigurationService getKualiConfigurationService() {
840 return kualiConfigurationService;
841 }
842
843 public void setBudgetConstructionAccountObjectDetailReportDao(BudgetConstructionAccountObjectDetailReportDao budgetConstructionAccountObjectDetailReportDao) {
844 this.budgetConstructionAccountObjectDetailReportDao = budgetConstructionAccountObjectDetailReportDao;
845 }
846
847 public void setBudgetConstructionOrganizationReportsService(BudgetConstructionOrganizationReportsService budgetConstructionOrganizationReportsService) {
848 this.budgetConstructionOrganizationReportsService = budgetConstructionOrganizationReportsService;
849 }
850
851 }