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