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.List; 022 023 import org.apache.ojb.broker.PersistenceBrokerException; 024 import org.kuali.kfs.module.bc.BCConstants; 025 import org.kuali.kfs.module.bc.BCKeyConstants; 026 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAccountObjectDetailReport; 027 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAccountObjectDetailReportTotal; 028 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionBalanceByAccount; 029 import org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDocumentAccountObjectDetailReportDao; 030 import org.kuali.kfs.module.bc.document.service.BudgetConstructionDocumentAccountObjectDetailReportService; 031 import org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper; 032 import org.kuali.kfs.module.bc.report.BudgetConstructionReportHelper; 033 import org.kuali.kfs.sys.KFSPropertyConstants; 034 import org.kuali.rice.kns.service.KualiConfigurationService; 035 import org.springframework.transaction.annotation.Transactional; 036 037 /** 038 * Service implementation of BudgetConstructionLevelSummaryReportService. 039 */ 040 @Transactional 041 public class BudgetConstructionDocumentAccountObjectDetailReportServiceImpl implements BudgetConstructionDocumentAccountObjectDetailReportService { 042 private BudgetConstructionDocumentAccountObjectDetailReportDao budgetConstructionDocumentAccountObjectDetailReportDao; 043 private KualiConfigurationService kualiConfigurationService; 044 private BudgetConstructionReportsServiceHelper budgetConstructionReportsServiceHelper; 045 046 public void updateDocumentAccountObjectDetailReportTable(String principalName, String documentNumber, Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber, String subAccountNumber) { 047 budgetConstructionDocumentAccountObjectDetailReportDao.updateDocumentAccountObjectDetailReportTable(principalName, documentNumber, universityFiscalYear, chartOfAccountsCode, accountNumber, subAccountNumber); 048 } 049 050 /** 051 * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionLevelSummaryReportService#buildReports(java.lang.Integer, 052 * java.util.Collection) 053 */ 054 public Collection<BudgetConstructionAccountObjectDetailReport> buildReports(String principalName) { 055 Collection<BudgetConstructionAccountObjectDetailReport> reportSet = new ArrayList(); 056 057 // build order list 058 List<String> orderList = buildOrderByList(); 059 Collection<BudgetConstructionBalanceByAccount> balanceByAccountList = budgetConstructionReportsServiceHelper.getDataForBuildingReports(BudgetConstructionBalanceByAccount.class, principalName, orderList); 060 061 062 063 064 List listForCalculateObject = BudgetConstructionReportHelper.deleteDuplicated((List) balanceByAccountList, fieldsForObject()); 065 List listForCalculateLevel = BudgetConstructionReportHelper.deleteDuplicated((List) balanceByAccountList, fieldsForLevel()); 066 List listForCalculateType = BudgetConstructionReportHelper.deleteDuplicated((List) balanceByAccountList, fieldsForType()); 067 068 // Calculate Total Section 069 List<BudgetConstructionAccountObjectDetailReportTotal> accountObjectDetailTotalObjectList; 070 List<BudgetConstructionAccountObjectDetailReportTotal> accountObjectDetailTotalLevelList; 071 List<BudgetConstructionAccountObjectDetailReportTotal> accountObjectDetailTotalTypeList; 072 073 accountObjectDetailTotalObjectList = calculateObjectTotal((List) balanceByAccountList, listForCalculateObject); 074 accountObjectDetailTotalLevelList = calculateLevelTotal((List) balanceByAccountList, listForCalculateLevel); 075 accountObjectDetailTotalTypeList = calculateTypeTotal((List) balanceByAccountList, listForCalculateType); 076 077 078 079 080 081 for (BudgetConstructionBalanceByAccount balanceByAccount : balanceByAccountList) { 082 BudgetConstructionAccountObjectDetailReport accountObjectDetailReport = new BudgetConstructionAccountObjectDetailReport(); 083 buildReportsHeader(balanceByAccount, accountObjectDetailReport); 084 buildReportsBody(balanceByAccount, accountObjectDetailReport); 085 buildReportsTotal(balanceByAccount, accountObjectDetailReport, accountObjectDetailTotalObjectList, accountObjectDetailTotalLevelList, accountObjectDetailTotalTypeList); 086 reportSet.add(accountObjectDetailReport); 087 } 088 089 return reportSet; 090 } 091 092 /** 093 * builds report Header 094 * 095 * @param BudgetConstructionObjectSummary bcas 096 */ 097 protected void buildReportsHeader(BudgetConstructionBalanceByAccount balanceByAccount, BudgetConstructionAccountObjectDetailReport accountObjectDetailReport) { 098 Integer prevFiscalyear = balanceByAccount.getUniversityFiscalYear() - 1; 099 accountObjectDetailReport.setFiscalYear(prevFiscalyear.toString() + "-" + balanceByAccount.getUniversityFiscalYear().toString().substring(2, 4)); 100 101 Integer prevPrevFiscalyear = prevFiscalyear - 1; 102 accountObjectDetailReport.setBaseFy(prevPrevFiscalyear.toString() + "-" + prevFiscalyear.toString().substring(2, 4)); 103 accountObjectDetailReport.setReqFy(prevFiscalyear.toString() + "-" + balanceByAccount.getUniversityFiscalYear().toString().substring(2, 4)); 104 105 accountObjectDetailReport.setAccountNumber(balanceByAccount.getAccountNumber()); 106 accountObjectDetailReport.setSubAccountNumber(balanceByAccount.getSubAccountNumber()); 107 accountObjectDetailReport.setChartOfAccountsCode(balanceByAccount.getChartOfAccountsCode()); 108 accountObjectDetailReport.setOrganizationCode(balanceByAccount.getAccount().getOrganizationCode()); 109 110 111 String orgName = null; 112 try { 113 orgName = balanceByAccount.getAccount().getOrganization().getOrganizationName(); 114 } 115 catch (PersistenceBrokerException e) { 116 } 117 String accountName = balanceByAccount.getAccount().getAccountName(); 118 String fundGroupCode = balanceByAccount.getAccount().getSubFundGroup().getFundGroupCode(); 119 String fundGroupName = balanceByAccount.getAccount().getSubFundGroup().getFundGroup().getName(); 120 121 122 if (orgName == null) { 123 accountObjectDetailReport.setOrganizationName(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_ORGANIZATION_NAME)); 124 } 125 else { 126 accountObjectDetailReport.setOrganizationName(orgName); 127 } 128 129 if (fundGroupCode == null) { 130 accountObjectDetailReport.setFundGroupCode(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_FUNDGROUP_CODE)); 131 } 132 else { 133 accountObjectDetailReport.setFundGroupCode(fundGroupCode); 134 } 135 136 if (fundGroupName == null) { 137 accountObjectDetailReport.setFundGroupName(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_FUNDGROUP_NAME)); 138 } 139 else { 140 accountObjectDetailReport.setFundGroupName(fundGroupName); 141 } 142 143 144 if (accountName == null) { 145 accountObjectDetailReport.setAccountName(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_ACCOUNT_DESCRIPTION)); 146 } 147 else { 148 accountObjectDetailReport.setAccountName(accountName); 149 } 150 151 String chartOfAccountDescription = ""; 152 if (balanceByAccount.getChartOfAccounts() != null){ 153 try { 154 chartOfAccountDescription = balanceByAccount.getChartOfAccounts().getFinChartOfAccountDescription(); 155 } 156 catch (PersistenceBrokerException e) { 157 chartOfAccountDescription = kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_CHART_DESCRIPTION); 158 } 159 } else { 160 chartOfAccountDescription = BCConstants.Report.CHART + BCConstants.Report.NOT_DEFINED; 161 } 162 163 accountObjectDetailReport.setChartOfAccountDescription(chartOfAccountDescription); 164 165 String subAccountName = ""; 166 167 if (!balanceByAccount.getSubAccountNumber().equals(BCConstants.Report.DASHES_SUB_ACCOUNT_CODE)){ 168 try { 169 subAccountName = balanceByAccount.getSubAccount().getSubAccountName(); 170 } 171 catch (PersistenceBrokerException e) { 172 subAccountName = kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_SUB_ACCOUNT_DESCRIPTION); 173 } 174 } 175 accountObjectDetailReport.setSubAccountName(subAccountName); 176 177 178 //group 179 accountObjectDetailReport.setTypeFinancialReportSortCode(balanceByAccount.getTypeFinancialReportSortCode()); 180 accountObjectDetailReport.setLevelFinancialReportSortCode(balanceByAccount.getLevelFinancialReportSortCode()); 181 accountObjectDetailReport.setFinancialSubObjectCode(balanceByAccount.getFinancialSubObjectCode()); 182 } 183 184 /** 185 * builds report body 186 * 187 * @param BudgetConstructionLevelSummary bcas 188 */ 189 protected void buildReportsBody(BudgetConstructionBalanceByAccount balanceByAccount, BudgetConstructionAccountObjectDetailReport accountObjectDetailReport) { 190 accountObjectDetailReport.setFinancialObjectCode(balanceByAccount.getFinancialObjectCode()); 191 192 if (balanceByAccount.getFinancialSubObjectCode().equals(BCConstants.DASH_SUB_OBJECT_CODE)){ 193 accountObjectDetailReport.setFinancialObjectName(balanceByAccount.getFinancialObject().getFinancialObjectCodeName()); 194 } 195 else { 196 accountObjectDetailReport.setFinancialObjectName(balanceByAccount.getFinancialSubObject().getFinancialSubObjectCodeName()); 197 } 198 199 accountObjectDetailReport.setPositionCsfLeaveFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(balanceByAccount.getPositionCsfLeaveFteQuantity(), 2, true)); 200 201 accountObjectDetailReport.setCsfFullTimeEmploymentQuantity(BudgetConstructionReportHelper.setDecimalDigit(balanceByAccount.getCsfFullTimeEmploymentQuantity(), 2, true)); 202 203 accountObjectDetailReport.setAppointmentRequestedCsfFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(balanceByAccount.getAppointmentRequestedCsfFteQuantity(), 2, true)); 204 205 accountObjectDetailReport.setAppointmentRequestedFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(balanceByAccount.getAppointmentRequestedFteQuantity(), 2, true)); 206 207 accountObjectDetailReport.setAccountLineAnnualBalanceAmount(BudgetConstructionReportHelper.convertKualiInteger(balanceByAccount.getAccountLineAnnualBalanceAmount())); 208 209 accountObjectDetailReport.setFinancialBeginningBalanceLineAmount(BudgetConstructionReportHelper.convertKualiInteger(balanceByAccount.getFinancialBeginningBalanceLineAmount())); 210 211 Integer changeAmount = BudgetConstructionReportHelper.convertKualiInteger(balanceByAccount.getAccountLineAnnualBalanceAmount()) - BudgetConstructionReportHelper.convertKualiInteger(balanceByAccount.getFinancialBeginningBalanceLineAmount()); 212 accountObjectDetailReport.setAmountChange(changeAmount); 213 accountObjectDetailReport.setPercentChange(BudgetConstructionReportHelper.calculatePercent(changeAmount, accountObjectDetailReport.getFinancialBeginningBalanceLineAmount())); 214 215 } 216 217 218 219 220 221 /** 222 * builds report total 223 */ 224 225 protected void buildReportsTotal(BudgetConstructionBalanceByAccount balanceByAccount, BudgetConstructionAccountObjectDetailReport accountObjectDetailReport, List<BudgetConstructionAccountObjectDetailReportTotal> accountObjectDetailTotalObjectList, List<BudgetConstructionAccountObjectDetailReportTotal> accountObjectDetailTotalLevelList, List<BudgetConstructionAccountObjectDetailReportTotal> accountObjectDetailTotalTypeList) { 226 227 for (BudgetConstructionAccountObjectDetailReportTotal objectTotal : accountObjectDetailTotalObjectList) { 228 if (BudgetConstructionReportHelper.isSameEntry(balanceByAccount, objectTotal.getBudgetConstructionBalanceByAccount(), fieldsForObject())) { 229 accountObjectDetailReport.setTotalObjectDescription(balanceByAccount.getFinancialObject().getFinancialObjectCodeName()); 230 231 accountObjectDetailReport.setTotalObjectPositionCsfLeaveFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(objectTotal.getTotalObjectPositionCsfLeaveFteQuantity(), 2, true)); 232 accountObjectDetailReport.setTotalObjectCsfFullTimeEmploymentQuantity(BudgetConstructionReportHelper.setDecimalDigit(objectTotal.getTotalObjectCsfFullTimeEmploymentQuantity(), 2, true)); 233 accountObjectDetailReport.setTotalObjectFinancialBeginningBalanceLineAmount(objectTotal.getTotalObjectFinancialBeginningBalanceLineAmount()); 234 accountObjectDetailReport.setTotalObjectAppointmentRequestedCsfFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(objectTotal.getTotalObjectAppointmentRequestedCsfFteQuantity(), 2, true)); 235 accountObjectDetailReport.setTotalObjectAppointmentRequestedFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(objectTotal.getTotalObjectAppointmentRequestedFteQuantity(), 2, true)); 236 accountObjectDetailReport.setTotalObjectAccountLineAnnualBalanceAmount(objectTotal.getTotalObjectAccountLineAnnualBalanceAmount()); 237 238 Integer totalObjectAmountChange = objectTotal.getTotalObjectAccountLineAnnualBalanceAmount() - objectTotal.getTotalObjectFinancialBeginningBalanceLineAmount(); 239 accountObjectDetailReport.setTotalObjectAmountChange(totalObjectAmountChange); 240 accountObjectDetailReport.setTotalObjectPercentChange(BudgetConstructionReportHelper.calculatePercent(totalObjectAmountChange, objectTotal.getTotalObjectFinancialBeginningBalanceLineAmount())); 241 } 242 } 243 244 for (BudgetConstructionAccountObjectDetailReportTotal levelTotal : accountObjectDetailTotalLevelList) { 245 if (BudgetConstructionReportHelper.isSameEntry(balanceByAccount, levelTotal.getBudgetConstructionBalanceByAccount(), fieldsForLevel())) { 246 accountObjectDetailReport.setTotalLevelDescription(balanceByAccount.getFinancialObjectLevel().getFinancialObjectLevelName()); 247 248 accountObjectDetailReport.setTotalLevelPositionCsfLeaveFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(levelTotal.getTotalLevelPositionCsfLeaveFteQuantity(), 2, true)); 249 accountObjectDetailReport.setTotalLevelCsfFullTimeEmploymentQuantity(BudgetConstructionReportHelper.setDecimalDigit(levelTotal.getTotalLevelCsfFullTimeEmploymentQuantity(), 2, true)); 250 accountObjectDetailReport.setTotalLevelFinancialBeginningBalanceLineAmount(levelTotal.getTotalLevelFinancialBeginningBalanceLineAmount()); 251 accountObjectDetailReport.setTotalLevelAppointmentRequestedCsfFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(levelTotal.getTotalLevelAppointmentRequestedCsfFteQuantity(), 2, true)); 252 accountObjectDetailReport.setTotalLevelAppointmentRequestedFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(levelTotal.getTotalLevelAppointmentRequestedFteQuantity(), 2, true)); 253 accountObjectDetailReport.setTotalLevelAccountLineAnnualBalanceAmount(levelTotal.getTotalLevelAccountLineAnnualBalanceAmount()); 254 255 Integer totalLevelAmountChange = levelTotal.getTotalLevelAccountLineAnnualBalanceAmount() - levelTotal.getTotalLevelFinancialBeginningBalanceLineAmount(); 256 accountObjectDetailReport.setTotalLevelAmountChange(totalLevelAmountChange); 257 accountObjectDetailReport.setTotalLevelPercentChange(BudgetConstructionReportHelper.calculatePercent(totalLevelAmountChange, levelTotal.getTotalLevelFinancialBeginningBalanceLineAmount())); 258 } 259 } 260 261 262 263 for (BudgetConstructionAccountObjectDetailReportTotal typeTotal : accountObjectDetailTotalTypeList) { 264 if (BudgetConstructionReportHelper.isSameEntry(balanceByAccount, typeTotal.getBudgetConstructionBalanceByAccount(), fieldsForType())) { 265 266 if (balanceByAccount.getTypeFinancialReportSortCode().equals(BCConstants.Report.INCOME_EXP_TYPE_A)) { 267 accountObjectDetailReport.setTotalTypeDescription(BCConstants.Report.TOTAL_REVENUES); 268 } 269 else { 270 accountObjectDetailReport.setTotalTypeDescription(BCConstants.Report.TOTAL_EXPENDITURES_MARGIN); 271 } 272 accountObjectDetailReport.setTotalTypePositionCsfLeaveFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(typeTotal.getTotalTypePositionCsfLeaveFteQuantity(), 2, true)); 273 accountObjectDetailReport.setTotalTypeCsfFullTimeEmploymentQuantity(BudgetConstructionReportHelper.setDecimalDigit(typeTotal.getTotalTypeCsfFullTimeEmploymentQuantity(), 2, true)); 274 accountObjectDetailReport.setTotalTypeFinancialBeginningBalanceLineAmount(typeTotal.getTotalTypeFinancialBeginningBalanceLineAmount()); 275 accountObjectDetailReport.setTotalTypeAppointmentRequestedCsfFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(typeTotal.getTotalTypeAppointmentRequestedCsfFteQuantity(), 2, true)); 276 accountObjectDetailReport.setTotalTypeAppointmentRequestedFteQuantity(BudgetConstructionReportHelper.setDecimalDigit(typeTotal.getTotalTypeAppointmentRequestedFteQuantity(), 2, true)); 277 accountObjectDetailReport.setTotalTypeAccountLineAnnualBalanceAmount(typeTotal.getTotalTypeAccountLineAnnualBalanceAmount()); 278 279 Integer totalTypeAmountChange = typeTotal.getTotalTypeAccountLineAnnualBalanceAmount() - typeTotal.getTotalTypeFinancialBeginningBalanceLineAmount(); 280 accountObjectDetailReport.setTotalTypeAmountChange(totalTypeAmountChange); 281 accountObjectDetailReport.setTotalTypePercentChange(BudgetConstructionReportHelper.calculatePercent(totalTypeAmountChange, typeTotal.getTotalTypeFinancialBeginningBalanceLineAmount())); 282 } 283 } 284 285 286 } 287 288 289 290 291 292 protected List calculateObjectTotal(List<BudgetConstructionBalanceByAccount> balanceByAccountList, List<BudgetConstructionBalanceByAccount> simpleList) { 293 294 BigDecimal totalObjectPositionCsfLeaveFteQuantity = BigDecimal.ZERO; 295 BigDecimal totalObjectCsfFullTimeEmploymentQuantity = BigDecimal.ZERO; 296 Integer totalObjectFinancialBeginningBalanceLineAmount = new Integer(0); 297 BigDecimal totalObjectAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO; 298 BigDecimal totalObjectAppointmentRequestedFteQuantity = BigDecimal.ZERO; 299 Integer totalObjectAccountLineAnnualBalanceAmount = new Integer(0); 300 301 List returnList = new ArrayList(); 302 303 for (BudgetConstructionBalanceByAccount simpleBalanceByAccountEntry : simpleList) { 304 305 BudgetConstructionAccountObjectDetailReportTotal bcObjectTotal = new BudgetConstructionAccountObjectDetailReportTotal(); 306 for (BudgetConstructionBalanceByAccount balanceByAccountEntry : balanceByAccountList) { 307 if (BudgetConstructionReportHelper.isSameEntry(simpleBalanceByAccountEntry, balanceByAccountEntry, fieldsForObject()) /* && !balanceByAccountEntry.getFinancialSubObjectCode().endsWith("---") */) { 308 totalObjectFinancialBeginningBalanceLineAmount += new Integer(balanceByAccountEntry.getFinancialBeginningBalanceLineAmount().intValue()); 309 totalObjectAccountLineAnnualBalanceAmount += new Integer(balanceByAccountEntry.getAccountLineAnnualBalanceAmount().intValue()); 310 totalObjectPositionCsfLeaveFteQuantity = totalObjectPositionCsfLeaveFteQuantity.add(balanceByAccountEntry.getPositionCsfLeaveFteQuantity()); 311 totalObjectCsfFullTimeEmploymentQuantity = totalObjectCsfFullTimeEmploymentQuantity.add(balanceByAccountEntry.getCsfFullTimeEmploymentQuantity()); 312 totalObjectAppointmentRequestedCsfFteQuantity = totalObjectAppointmentRequestedCsfFteQuantity.add(balanceByAccountEntry.getAppointmentRequestedCsfFteQuantity()); 313 totalObjectAppointmentRequestedFteQuantity = totalObjectAppointmentRequestedFteQuantity.add(balanceByAccountEntry.getAppointmentRequestedFteQuantity()); 314 } 315 } 316 bcObjectTotal.setBudgetConstructionBalanceByAccount(simpleBalanceByAccountEntry); 317 bcObjectTotal.setTotalObjectPositionCsfLeaveFteQuantity(totalObjectPositionCsfLeaveFteQuantity); 318 bcObjectTotal.setTotalObjectCsfFullTimeEmploymentQuantity(totalObjectCsfFullTimeEmploymentQuantity); 319 bcObjectTotal.setTotalObjectFinancialBeginningBalanceLineAmount(totalObjectFinancialBeginningBalanceLineAmount); 320 bcObjectTotal.setTotalObjectAppointmentRequestedCsfFteQuantity(totalObjectAppointmentRequestedCsfFteQuantity); 321 bcObjectTotal.setTotalObjectAppointmentRequestedFteQuantity(totalObjectAppointmentRequestedFteQuantity); 322 bcObjectTotal.setTotalObjectAccountLineAnnualBalanceAmount(totalObjectAccountLineAnnualBalanceAmount); 323 324 returnList.add(bcObjectTotal); 325 326 totalObjectPositionCsfLeaveFteQuantity = BigDecimal.ZERO; 327 totalObjectCsfFullTimeEmploymentQuantity = BigDecimal.ZERO; 328 totalObjectFinancialBeginningBalanceLineAmount = new Integer(0); 329 totalObjectAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO; 330 totalObjectAppointmentRequestedFteQuantity = BigDecimal.ZERO; 331 totalObjectAccountLineAnnualBalanceAmount = new Integer(0); 332 333 } 334 return returnList; 335 336 } 337 338 339 340 341 protected List calculateLevelTotal(List<BudgetConstructionBalanceByAccount> balanceByAccountList, List<BudgetConstructionBalanceByAccount> simpleList) { 342 343 BigDecimal totalLevelPositionCsfLeaveFteQuantity = BigDecimal.ZERO; 344 BigDecimal totalLevelCsfFullTimeEmploymentQuantity = BigDecimal.ZERO; 345 Integer totalLevelFinancialBeginningBalanceLineAmount = new Integer(0); 346 BigDecimal totalLevelAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO; 347 BigDecimal totalLevelAppointmentRequestedFteQuantity = BigDecimal.ZERO; 348 Integer totalLevelAccountLineAnnualBalanceAmount = new Integer(0); 349 350 List returnList = new ArrayList(); 351 352 for (BudgetConstructionBalanceByAccount simpleBcosEntry : simpleList) { 353 354 BudgetConstructionAccountObjectDetailReportTotal bcObjectTotal = new BudgetConstructionAccountObjectDetailReportTotal(); 355 for (BudgetConstructionBalanceByAccount balanceByAccountEntry : balanceByAccountList) { 356 if (BudgetConstructionReportHelper.isSameEntry(simpleBcosEntry, balanceByAccountEntry, fieldsForLevel())) { 357 totalLevelFinancialBeginningBalanceLineAmount += new Integer(balanceByAccountEntry.getFinancialBeginningBalanceLineAmount().intValue()); 358 totalLevelAccountLineAnnualBalanceAmount += new Integer(balanceByAccountEntry.getAccountLineAnnualBalanceAmount().intValue()); 359 totalLevelPositionCsfLeaveFteQuantity = totalLevelPositionCsfLeaveFteQuantity.add(balanceByAccountEntry.getPositionCsfLeaveFteQuantity()); 360 totalLevelCsfFullTimeEmploymentQuantity = totalLevelCsfFullTimeEmploymentQuantity.add(balanceByAccountEntry.getCsfFullTimeEmploymentQuantity()); 361 totalLevelAppointmentRequestedCsfFteQuantity = totalLevelAppointmentRequestedCsfFteQuantity.add(balanceByAccountEntry.getAppointmentRequestedCsfFteQuantity()); 362 totalLevelAppointmentRequestedFteQuantity = totalLevelAppointmentRequestedFteQuantity.add(balanceByAccountEntry.getAppointmentRequestedFteQuantity()); 363 } 364 } 365 bcObjectTotal.setBudgetConstructionBalanceByAccount(simpleBcosEntry); 366 bcObjectTotal.setTotalLevelPositionCsfLeaveFteQuantity(totalLevelPositionCsfLeaveFteQuantity); 367 bcObjectTotal.setTotalLevelCsfFullTimeEmploymentQuantity(totalLevelCsfFullTimeEmploymentQuantity); 368 bcObjectTotal.setTotalLevelFinancialBeginningBalanceLineAmount(totalLevelFinancialBeginningBalanceLineAmount); 369 bcObjectTotal.setTotalLevelAppointmentRequestedCsfFteQuantity(totalLevelAppointmentRequestedCsfFteQuantity); 370 bcObjectTotal.setTotalLevelAppointmentRequestedFteQuantity(totalLevelAppointmentRequestedFteQuantity); 371 bcObjectTotal.setTotalLevelAccountLineAnnualBalanceAmount(totalLevelAccountLineAnnualBalanceAmount); 372 373 returnList.add(bcObjectTotal); 374 375 totalLevelPositionCsfLeaveFteQuantity = BigDecimal.ZERO; 376 totalLevelCsfFullTimeEmploymentQuantity = BigDecimal.ZERO; 377 totalLevelFinancialBeginningBalanceLineAmount = new Integer(0); 378 totalLevelAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO; 379 totalLevelAppointmentRequestedFteQuantity = BigDecimal.ZERO; 380 totalLevelAccountLineAnnualBalanceAmount = new Integer(0); 381 } 382 return returnList; 383 384 } 385 386 387 protected List calculateTypeTotal(List<BudgetConstructionBalanceByAccount> balanceByAccountList, List<BudgetConstructionBalanceByAccount> simpleList) { 388 389 BigDecimal totalTypePositionCsfLeaveFteQuantity = BigDecimal.ZERO; 390 BigDecimal totalTypeCsfFullTimeEmploymentQuantity = BigDecimal.ZERO; 391 Integer totalTypeFinancialBeginningBalanceLineAmount = new Integer(0); 392 BigDecimal totalTypeAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO; 393 BigDecimal totalTypeAppointmentRequestedFteQuantity = BigDecimal.ZERO; 394 Integer totalTypeAccountLineAnnualBalanceAmount = new Integer(0); 395 396 List returnList = new ArrayList(); 397 for (BudgetConstructionBalanceByAccount simpleBcosEntry : simpleList) { 398 BudgetConstructionAccountObjectDetailReportTotal bcObjectTotal = new BudgetConstructionAccountObjectDetailReportTotal(); 399 for (BudgetConstructionBalanceByAccount balanceByAccountEntry : balanceByAccountList) { 400 if (BudgetConstructionReportHelper.isSameEntry(simpleBcosEntry, balanceByAccountEntry, fieldsForType())) { 401 402 totalTypeFinancialBeginningBalanceLineAmount += new Integer(balanceByAccountEntry.getFinancialBeginningBalanceLineAmount().intValue()); 403 totalTypeAccountLineAnnualBalanceAmount += new Integer(balanceByAccountEntry.getAccountLineAnnualBalanceAmount().intValue()); 404 totalTypePositionCsfLeaveFteQuantity = totalTypePositionCsfLeaveFteQuantity.add(balanceByAccountEntry.getPositionCsfLeaveFteQuantity()); 405 totalTypeCsfFullTimeEmploymentQuantity = totalTypeCsfFullTimeEmploymentQuantity.add(balanceByAccountEntry.getCsfFullTimeEmploymentQuantity()); 406 totalTypeAppointmentRequestedCsfFteQuantity = totalTypeAppointmentRequestedCsfFteQuantity.add(balanceByAccountEntry.getAppointmentRequestedCsfFteQuantity()); 407 totalTypeAppointmentRequestedFteQuantity = totalTypeAppointmentRequestedFteQuantity.add(balanceByAccountEntry.getAppointmentRequestedFteQuantity()); 408 } 409 } 410 411 bcObjectTotal.setBudgetConstructionBalanceByAccount(simpleBcosEntry); 412 bcObjectTotal.setTotalTypePositionCsfLeaveFteQuantity(totalTypePositionCsfLeaveFteQuantity); 413 bcObjectTotal.setTotalTypeCsfFullTimeEmploymentQuantity(totalTypeCsfFullTimeEmploymentQuantity); 414 bcObjectTotal.setTotalTypeFinancialBeginningBalanceLineAmount(totalTypeFinancialBeginningBalanceLineAmount); 415 bcObjectTotal.setTotalTypeAppointmentRequestedCsfFteQuantity(totalTypeAppointmentRequestedCsfFteQuantity); 416 bcObjectTotal.setTotalTypeAppointmentRequestedFteQuantity(totalTypeAppointmentRequestedFteQuantity); 417 bcObjectTotal.setTotalTypeAccountLineAnnualBalanceAmount(totalTypeAccountLineAnnualBalanceAmount); 418 419 returnList.add(bcObjectTotal); 420 421 totalTypePositionCsfLeaveFteQuantity = BigDecimal.ZERO; 422 totalTypeCsfFullTimeEmploymentQuantity = BigDecimal.ZERO; 423 totalTypeFinancialBeginningBalanceLineAmount = new Integer(0); 424 totalTypeAppointmentRequestedCsfFteQuantity = BigDecimal.ZERO; 425 totalTypeAppointmentRequestedFteQuantity = BigDecimal.ZERO; 426 totalTypeAccountLineAnnualBalanceAmount = new Integer(0); 427 } 428 429 return returnList; 430 } 431 432 433 434 435 436 437 438 /** 439 * builds orderByList for sort order. 440 * 441 * @return returnList 442 */ 443 protected List<String> buildOrderByList() { 444 List<String> returnList = new ArrayList(); 445 returnList.add(KFSPropertyConstants.ACCOUNT_NUMBER); 446 returnList.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER); 447 returnList.add(KFSPropertyConstants.TYPE_FINANCIAL_REPORT_SORT_CODE); 448 returnList.add(KFSPropertyConstants.FINANCIAL_CONSOLIDATION_SORT_CODE); 449 returnList.add(KFSPropertyConstants.LEVEL_FINANCIAL_REPORT_SORT_CODE); 450 returnList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE); 451 returnList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE); 452 return returnList; 453 } 454 455 /** 456 * builds list of fields for comparing entry of Object 457 * @return List<String> 458 */ 459 protected List<String> fieldsForObject() { 460 List<String> fieldList = new ArrayList(); 461 fieldList.addAll(fieldsForLevel()); 462 fieldList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE); 463 //fieldList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE); 464 return fieldList; 465 } 466 467 /** 468 * builds list of fields for comparing entry of Level 469 * @return List<String> 470 */ 471 protected List<String> fieldsForLevel() { 472 List<String> fieldList = new ArrayList(); 473 fieldList.addAll(fieldsForType()); 474 fieldList.add(KFSPropertyConstants.LEVEL_FINANCIAL_REPORT_SORT_CODE); 475 return fieldList; 476 } 477 478 /** 479 * builds list of fields for comparing entry of GexpAndType 480 * @return List<String> 481 */ 482 protected List<String> fieldsForType() { 483 List<String> fieldList = new ArrayList(); 484 fieldList.add(KFSPropertyConstants.TYPE_FINANCIAL_REPORT_SORT_CODE); 485 return fieldList; 486 } 487 488 /*protected List<String> commonFields(){ 489 List<String> fieldList = new ArrayList(); 490 fieldList.add(KFSPropertyConstants.TYPE_FINANCIAL_REPORT_SORT_CODE); 491 fieldList.add(KFSPropertyConstants.LEVEL_FINANCIAL_REPORT_SORT_CODE); 492 fieldList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE); 493 fieldList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE); 494 495 returnList.add(KFSPropertyConstants.ACCOUNT_NUMBER); 496 returnList.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER); 497 returnList.add(KFSPropertyConstants.TYPE_FINANCIAL_REPORT_SORT_CODE); 498 returnList.add(KFSPropertyConstants.FINANCIAL_CONSOLIDATION_SORT_CODE); 499 returnList.add(KFSPropertyConstants.LEVEL_FINANCIAL_REPORT_SORT_CODE); 500 returnList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE); 501 returnList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE); 502 503 504 return fieldList; 505 } 506 507 */ 508 509 public void setKualiConfigurationService(KualiConfigurationService kualiConfigurationService) { 510 this.kualiConfigurationService = kualiConfigurationService; 511 } 512 513 public void setBudgetConstructionReportsServiceHelper(BudgetConstructionReportsServiceHelper budgetConstructionReportsServiceHelper) { 514 this.budgetConstructionReportsServiceHelper = budgetConstructionReportsServiceHelper; 515 } 516 517 public void setBudgetConstructionDocumentAccountObjectDetailReportDao(BudgetConstructionDocumentAccountObjectDetailReportDao budgetConstructionDocumentAccountObjectDetailReportDao) { 518 this.budgetConstructionDocumentAccountObjectDetailReportDao = budgetConstructionDocumentAccountObjectDetailReportDao; 519 } 520 521 } 522