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; 017 018 import java.math.BigDecimal; 019 import java.util.ArrayList; 020 import java.util.HashMap; 021 import java.util.LinkedHashMap; 022 import java.util.List; 023 import java.util.ListIterator; 024 import java.util.Map; 025 026 import org.kuali.kfs.coa.businessobject.Account; 027 import org.kuali.kfs.coa.businessobject.Chart; 028 import org.kuali.kfs.coa.businessobject.Organization; 029 import org.kuali.kfs.coa.businessobject.SubAccount; 030 import org.kuali.kfs.module.bc.BCConstants; 031 import org.kuali.kfs.module.bc.BCConstants.AccountSalarySettingOnlyCause; 032 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAccountReports; 033 import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionGeneralLedger; 034 import org.kuali.kfs.module.bc.document.service.BudgetParameterService; 035 import org.kuali.kfs.sys.KFSConstants; 036 import org.kuali.kfs.sys.KFSPropertyConstants; 037 import org.kuali.kfs.sys.context.SpringContext; 038 import org.kuali.kfs.sys.document.FinancialSystemTransactionalDocumentBase; 039 import org.kuali.rice.kew.dto.DocumentRouteStatusChangeDTO; 040 import org.kuali.rice.kim.bo.Person; 041 import org.kuali.rice.kns.service.BusinessObjectService; 042 import org.kuali.rice.kns.util.KualiDecimal; 043 import org.kuali.rice.kns.util.KualiInteger; 044 import org.kuali.rice.kns.util.TypedArrayList; 045 046 public class BudgetConstructionDocument extends FinancialSystemTransactionalDocumentBase { 047 048 protected static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(BudgetConstructionDocument.class); 049 050 protected Integer universityFiscalYear; 051 protected String chartOfAccountsCode; 052 protected String accountNumber; 053 protected String subAccountNumber; 054 protected Integer organizationLevelCode; 055 protected String organizationLevelChartOfAccountsCode; 056 protected String organizationLevelOrganizationCode; 057 protected String budgetLockUserIdentifier; 058 protected String budgetTransactionLockUserIdentifier; 059 060 protected Chart chartOfAccounts; 061 protected Account account; 062 protected SubAccount subAccount; 063 protected Person budgetLockUser; 064 protected Person budgetTransactionLockUser; 065 protected Organization organizationLevelOrganization; 066 protected BudgetConstructionAccountReports budgetConstructionAccountReports; 067 068 protected List pendingBudgetConstructionGeneralLedgerRevenueLines; 069 protected List pendingBudgetConstructionGeneralLedgerExpenditureLines; 070 071 protected Integer previousUniversityFiscalYear; 072 073 // revenue and expenditure line totals 074 protected KualiInteger revenueAccountLineAnnualBalanceAmountTotal; 075 protected KualiInteger revenueFinancialBeginningBalanceLineAmountTotal; 076 protected KualiDecimal revenuePercentChangeTotal; 077 protected KualiInteger expenditureAccountLineAnnualBalanceAmountTotal; 078 protected KualiInteger expenditureFinancialBeginningBalanceLineAmountTotal; 079 protected KualiDecimal expenditurePercentChangeTotal; 080 081 // benefits calculation state flags 082 // these are set when a change is detected in the request and the line 083 // is involved in the benefits calculation - ie exists in 084 protected boolean isBenefitsCalcNeeded; 085 protected boolean isMonthlyBenefitsCalcNeeded; 086 087 protected boolean isSalarySettingOnly; 088 protected AccountSalarySettingOnlyCause accountSalarySettingOnlyCause; 089 protected boolean containsTwoPlug = false; 090 protected boolean budgetableDocument = false; 091 092 // This property supports a hack to indicate to the rules framework 093 // the user is performing an action (save) that forces rules check on nonZero request amounts 094 // while still allowing the user to do salary setting cleanup when a document becomes not budgetable 095 protected boolean cleanupModeActionForceCheck = false; 096 097 public BudgetConstructionDocument() { 098 super(); 099 // setPendingBudgetConstructionGeneralLedgerExpenditureLines(new ArrayList()); 100 // setPendingBudgetConstructionGeneralLedgerRevenueLines(new ArrayList()); 101 setPendingBudgetConstructionGeneralLedgerExpenditureLines(new TypedArrayList(PendingBudgetConstructionGeneralLedger.class)); 102 setPendingBudgetConstructionGeneralLedgerRevenueLines(new TypedArrayList(PendingBudgetConstructionGeneralLedger.class)); 103 zeroTotals(); 104 } 105 106 /** 107 * This zeros revenue and expenditure totals displayed on the BC document screen 108 */ 109 public void zeroTotals() { 110 111 revenueAccountLineAnnualBalanceAmountTotal = new KualiInteger(BigDecimal.ZERO); 112 revenueFinancialBeginningBalanceLineAmountTotal = new KualiInteger(BigDecimal.ZERO); 113 revenuePercentChangeTotal = new KualiDecimal(0); 114 expenditureAccountLineAnnualBalanceAmountTotal = new KualiInteger(BigDecimal.ZERO); 115 expenditureFinancialBeginningBalanceLineAmountTotal = new KualiInteger(BigDecimal.ZERO); 116 expenditurePercentChangeTotal = new KualiDecimal(0); 117 } 118 119 /** 120 * move stuff from constructor to here so as to get out of fred's way initiateDocument would be called from 121 * BudgetConstructionAction 122 */ 123 public void initiateDocument() { 124 125 126 Map fieldValues = new HashMap(); 127 // fieldValues.put("UNIV_FISCAL_YR", new Integer(2008)); 128 // fieldValues.put("FIN_COA_CD", "BA"); 129 // fieldValues.put("ACCOUNT_NBR", "6044906"); 130 // fieldValues.put("SUB_ACCT_NBR", "-----"); 131 // fieldValues.put("UNIV_FISCAL_YR", budgetConstructionHeader.getUniversityFiscalYear()); 132 // fieldValues.put("FIN_COA_CD", budgetConstructionHeader.getChartOfAccountsCode()); 133 // fieldValues.put("ACCOUNT_NBR", budgetConstructionHeader.getAccountNumber()); 134 // fieldValues.put("SUB_ACCT_NBR", budgetConstructionHeader.getSubAccountNumber()); 135 fieldValues.put("UNIV_FISCAL_YR", getUniversityFiscalYear()); 136 fieldValues.put("FIN_COA_CD", getChartOfAccountsCode()); 137 fieldValues.put("ACCOUNT_NBR", getAccountNumber()); 138 fieldValues.put("SUB_ACCT_NBR", getSubAccountNumber()); 139 140 // this needs to do query FIN_OBJ_TYP_CD IN ('IN','IC','IN') or equivalent 141 fieldValues.put("FIN_OBJ_TYP_CD", "IN"); 142 143 pendingBudgetConstructionGeneralLedgerRevenueLines = (ArrayList) SpringContext.getBean(BusinessObjectService.class).findMatchingOrderBy(PendingBudgetConstructionGeneralLedger.class, fieldValues, "FIN_OBJECT_CD", true); 144 if (LOG.isDebugEnabled()) { 145 LOG.debug("pendingBudgetConstructionGeneralLedgerRevenue is: " + pendingBudgetConstructionGeneralLedgerRevenueLines); 146 } 147 148 // this needs to do query FIN_OBJ_TYP_CD IN ('EE','ES','EX') or equivalent 149 fieldValues.remove("FIN_OBJ_TYP_CD"); 150 fieldValues.put("FIN_OBJ_TYP_CD", "EX"); 151 152 pendingBudgetConstructionGeneralLedgerExpenditureLines = (ArrayList) SpringContext.getBean(BusinessObjectService.class).findMatchingOrderBy(PendingBudgetConstructionGeneralLedger.class, fieldValues, "FIN_OBJECT_CD", true); 153 if (LOG.isDebugEnabled()) { 154 LOG.debug("pendingBudgetConstructionGeneralLedgerExpenditure is: " + pendingBudgetConstructionGeneralLedgerExpenditureLines); 155 } 156 // Iterator<PendingBudgetConstructionGeneralLedger> iter = 157 // pendingBudgetConstructionGeneralLedgerExpenditureLines.iterator(); 158 // while (iter.hasNext()){ 159 // iter.next().refreshReferenceObject("budgetConstructionMonthly"); 160 // } 161 162 } 163 164 /** 165 * This adds a revenue or expenditure line to the appropriate list 166 * 167 * @param isRevenue 168 * @param line 169 */ 170 public int addPBGLLine(PendingBudgetConstructionGeneralLedger line, boolean isRevenue) { 171 int insertPoint = 0; 172 ListIterator pbglLines; 173 if (isRevenue) { 174 pbglLines = this.getPendingBudgetConstructionGeneralLedgerRevenueLines().listIterator(); 175 } 176 else { 177 pbglLines = this.getPendingBudgetConstructionGeneralLedgerExpenditureLines().listIterator(); 178 } 179 while (pbglLines.hasNext()) { 180 PendingBudgetConstructionGeneralLedger pbglLine = (PendingBudgetConstructionGeneralLedger) pbglLines.next(); 181 if (pbglLine.getFinancialObjectCode().compareToIgnoreCase(line.getFinancialObjectCode()) < 0) { 182 insertPoint++; 183 } 184 else { 185 if (pbglLine.getFinancialObjectCode().compareToIgnoreCase(line.getFinancialObjectCode()) > 0) { 186 break; 187 } 188 else { 189 if ((pbglLine.getFinancialObjectCode().compareToIgnoreCase(line.getFinancialObjectCode()) == 0) && (pbglLine.getFinancialSubObjectCode().compareToIgnoreCase(line.getFinancialSubObjectCode()) < 0)) { 190 insertPoint++; 191 } 192 else { 193 break; 194 } 195 } 196 } 197 } 198 if (isRevenue) { 199 this.pendingBudgetConstructionGeneralLedgerRevenueLines.add(insertPoint, line); 200 } 201 else { 202 this.pendingBudgetConstructionGeneralLedgerExpenditureLines.add(insertPoint, line); 203 } 204 return insertPoint; 205 206 } 207 208 /** 209 * Gets the universityFiscalYear attribute. 210 * 211 * @return Returns the universityFiscalYear 212 */ 213 public Integer getUniversityFiscalYear() { 214 return universityFiscalYear; 215 } 216 217 /** 218 * Sets the universityFiscalYear attribute. 219 * 220 * @param universityFiscalYear The universityFiscalYear to set. 221 */ 222 public void setUniversityFiscalYear(Integer universityFiscalYear) { 223 this.universityFiscalYear = universityFiscalYear; 224 setPreviousUniversityFiscalYear(universityFiscalYear - 1); 225 } 226 227 228 /** 229 * Gets the chartOfAccountsCode attribute. 230 * 231 * @return Returns the chartOfAccountsCode 232 */ 233 public String getChartOfAccountsCode() { 234 return chartOfAccountsCode; 235 } 236 237 /** 238 * Sets the chartOfAccountsCode attribute. 239 * 240 * @param chartOfAccountsCode The chartOfAccountsCode to set. 241 */ 242 public void setChartOfAccountsCode(String chartOfAccountsCode) { 243 this.chartOfAccountsCode = chartOfAccountsCode; 244 } 245 246 247 /** 248 * Gets the accountNumber attribute. 249 * 250 * @return Returns the accountNumber 251 */ 252 public String getAccountNumber() { 253 return accountNumber; 254 } 255 256 /** 257 * Sets the accountNumber attribute. 258 * 259 * @param accountNumber The accountNumber to set. 260 */ 261 public void setAccountNumber(String accountNumber) { 262 this.accountNumber = accountNumber; 263 } 264 265 266 /** 267 * Gets the subAccountNumber attribute. 268 * 269 * @return Returns the subAccountNumber 270 */ 271 public String getSubAccountNumber() { 272 return subAccountNumber; 273 } 274 275 /** 276 * Sets the subAccountNumber attribute. 277 * 278 * @param subAccountNumber The subAccountNumber to set. 279 */ 280 public void setSubAccountNumber(String subAccountNumber) { 281 this.subAccountNumber = subAccountNumber; 282 } 283 284 285 /** 286 * Gets the organizationLevelCode attribute. 287 * 288 * @return Returns the organizationLevelCode 289 */ 290 public Integer getOrganizationLevelCode() { 291 return organizationLevelCode; 292 } 293 294 /** 295 * Sets the organizationLevelCode attribute. 296 * 297 * @param organizationLevelCode The organizationLevelCode to set. 298 */ 299 public void setOrganizationLevelCode(Integer organizationLevelCode) { 300 this.organizationLevelCode = organizationLevelCode; 301 } 302 303 304 /** 305 * Gets the organizationLevelChartOfAccountsCode attribute. 306 * 307 * @return Returns the organizationLevelChartOfAccountsCode 308 */ 309 public String getOrganizationLevelChartOfAccountsCode() { 310 return organizationLevelChartOfAccountsCode; 311 } 312 313 /** 314 * Sets the organizationLevelChartOfAccountsCode attribute. 315 * 316 * @param organizationLevelChartOfAccountsCode The organizationLevelChartOfAccountsCode to set. 317 */ 318 public void setOrganizationLevelChartOfAccountsCode(String organizationLevelChartOfAccountsCode) { 319 this.organizationLevelChartOfAccountsCode = organizationLevelChartOfAccountsCode; 320 } 321 322 323 /** 324 * Gets the organizationLevelOrganizationCode attribute. 325 * 326 * @return Returns the organizationLevelOrganizationCode 327 */ 328 public String getOrganizationLevelOrganizationCode() { 329 return organizationLevelOrganizationCode; 330 } 331 332 /** 333 * Sets the organizationLevelOrganizationCode attribute. 334 * 335 * @param organizationLevelOrganizationCode The organizationLevelOrganizationCode to set. 336 */ 337 public void setOrganizationLevelOrganizationCode(String organizationLevelOrganizationCode) { 338 this.organizationLevelOrganizationCode = organizationLevelOrganizationCode; 339 } 340 341 342 /** 343 * Gets the budgetLockUserIdentifier attribute. 344 * 345 * @return Returns the budgetLockUserIdentifier 346 */ 347 public String getBudgetLockUserIdentifier() { 348 return budgetLockUserIdentifier; 349 } 350 351 /** 352 * Sets the budgetLockUserIdentifier attribute. 353 * 354 * @param budgetLockUserIdentifier The budgetLockUserIdentifier to set. 355 */ 356 public void setBudgetLockUserIdentifier(String budgetLockUserIdentifier) { 357 this.budgetLockUserIdentifier = budgetLockUserIdentifier; 358 } 359 360 361 /** 362 * Gets the budgetTransactionLockUserIdentifier attribute. 363 * 364 * @return Returns the budgetTransactionLockUserIdentifier 365 */ 366 public String getBudgetTransactionLockUserIdentifier() { 367 return budgetTransactionLockUserIdentifier; 368 } 369 370 /** 371 * Sets the budgetTransactionLockUserIdentifier attribute. 372 * 373 * @param budgetTransactionLockUserIdentifier The budgetTransactionLockUserIdentifier to set. 374 */ 375 public void setBudgetTransactionLockUserIdentifier(String budgetTransactionLockUserIdentifier) { 376 this.budgetTransactionLockUserIdentifier = budgetTransactionLockUserIdentifier; 377 } 378 379 380 /** 381 * Gets the chartOfAccounts attribute. 382 * 383 * @return Returns the chartOfAccounts 384 */ 385 public Chart getChartOfAccounts() { 386 return chartOfAccounts; 387 } 388 389 /** 390 * Sets the chartOfAccounts attribute. 391 * 392 * @param chartOfAccounts The chartOfAccounts to set. 393 * @deprecated 394 */ 395 public void setChartOfAccounts(Chart chartOfAccounts) { 396 this.chartOfAccounts = chartOfAccounts; 397 } 398 399 /** 400 * Gets the account attribute. 401 * 402 * @return Returns the account 403 */ 404 public Account getAccount() { 405 return account; 406 } 407 408 /** 409 * Sets the account attribute. 410 * 411 * @param account The account to set. 412 * @deprecated 413 */ 414 public void setAccount(Account account) { 415 this.account = account; 416 } 417 418 public Person getBudgetLockUser() { 419 budgetLockUser = SpringContext.getBean(org.kuali.rice.kim.service.PersonService.class).updatePersonIfNecessary(budgetLockUserIdentifier, budgetLockUser); 420 return budgetLockUser; 421 } 422 423 /** 424 * Sets the budgetLockUser attribute. 425 * 426 * @param budgetLockUser The budgetLockUser to set. 427 * @deprecated 428 */ 429 public void setBudgetLockUser(Person budgetLockUser) { 430 this.budgetLockUser = budgetLockUser; 431 } 432 433 public Person getBudgetTransactionLockUser() { 434 budgetTransactionLockUser = SpringContext.getBean(org.kuali.rice.kim.service.PersonService.class).updatePersonIfNecessary(budgetTransactionLockUserIdentifier, budgetTransactionLockUser); 435 return budgetTransactionLockUser; 436 } 437 438 /** 439 * Sets the budgetTransactionLockUser attribute value. 440 * 441 * @param budgetTransactionLockUser The budgetTransactionLockUser to set. 442 * @deprecated 443 */ 444 public void setBudgetTransactionLockUser(Person budgetTransactionLockUser) { 445 this.budgetTransactionLockUser = budgetTransactionLockUser; 446 } 447 448 /** 449 * Gets the organizationLevelOrganization attribute. 450 * 451 * @return Returns the organizationLevelOrganization. 452 */ 453 public Organization getOrganizationLevelOrganization() { 454 return organizationLevelOrganization; 455 } 456 457 /** 458 * Sets the organizationLevelOrganization attribute value. 459 * 460 * @param organizationLevelOrganization The organizationLevelOrganization to set. 461 * @deprecated 462 */ 463 public void setOrganizationLevelOrganization(Organization organizationLevelOrganization) { 464 this.organizationLevelOrganization = organizationLevelOrganization; 465 } 466 467 /** 468 * Gets the subAccount attribute. 469 * 470 * @return Returns the subAccount. 471 */ 472 public SubAccount getSubAccount() { 473 return subAccount; 474 } 475 476 /** 477 * Sets the subAccount attribute value. 478 * 479 * @param subAccount The subAccount to set. 480 */ 481 public void setSubAccount(SubAccount subAccount) { 482 this.subAccount = subAccount; 483 } 484 485 /** 486 * Gets the previousUniversityFiscalYear attribute. 487 * 488 * @return Returns the previousUniversityFiscalYear. 489 */ 490 public Integer getPreviousUniversityFiscalYear() { 491 if (previousUniversityFiscalYear == null) { 492 this.previousUniversityFiscalYear = this.getUniversityFiscalYear() - 1; 493 } 494 return previousUniversityFiscalYear; 495 } 496 497 /** 498 * Sets the previousUniversityFiscalYear attribute value. 499 * 500 * @param previousUniversityFiscalYear The previousUniversityFiscalYear to set. 501 */ 502 public void setPreviousUniversityFiscalYear(Integer previousUniversityFiscalYear) { 503 this.previousUniversityFiscalYear = previousUniversityFiscalYear; 504 } 505 506 /** 507 * Gets the budgetConstructionAccountReports attribute. 508 * 509 * @return Returns the budgetConstructionAccountReports. 510 */ 511 public BudgetConstructionAccountReports getBudgetConstructionAccountReports() { 512 return budgetConstructionAccountReports; 513 } 514 515 /** 516 * Sets the budgetConstructionAccountReports attribute value. 517 * 518 * @param budgetConstructionAccountReports The budgetConstructionAccountReports to set. 519 * @deprecated 520 */ 521 public void setBudgetConstructionAccountReports(BudgetConstructionAccountReports budgetConstructionAccountReports) { 522 this.budgetConstructionAccountReports = budgetConstructionAccountReports; 523 } 524 525 /** 526 * @see org.kuali.rice.kns.document.DocumentBase#buildListOfDeletionAwareLists() 527 */ 528 @Override 529 public List buildListOfDeletionAwareLists() { 530 // return new ArrayList(); 531 List managedLists = super.buildListOfDeletionAwareLists(); 532 533 managedLists.add(getPendingBudgetConstructionGeneralLedgerRevenueLines()); 534 managedLists.add(getPendingBudgetConstructionGeneralLedgerExpenditureLines()); 535 // managedLists.add(getSourceAccountingLines()); 536 // managedLists.add(getTargetAccountingLines()); 537 538 return managedLists; 539 } 540 541 public List<PendingBudgetConstructionGeneralLedger> getPendingBudgetConstructionGeneralLedgerRevenueLines() { 542 return pendingBudgetConstructionGeneralLedgerRevenueLines; 543 } 544 545 public void setPendingBudgetConstructionGeneralLedgerRevenueLines(List pendingBudgetConstructionGeneralLedgerRevenueLines) { 546 this.pendingBudgetConstructionGeneralLedgerRevenueLines = pendingBudgetConstructionGeneralLedgerRevenueLines; 547 } 548 549 public List<PendingBudgetConstructionGeneralLedger> getPendingBudgetConstructionGeneralLedgerExpenditureLines() { 550 return pendingBudgetConstructionGeneralLedgerExpenditureLines; 551 } 552 553 public void setPendingBudgetConstructionGeneralLedgerExpenditureLines(List pendingBudgetConstructionGeneralLedgerExpenditureLines) { 554 this.pendingBudgetConstructionGeneralLedgerExpenditureLines = pendingBudgetConstructionGeneralLedgerExpenditureLines; 555 } 556 557 /** 558 * Gets the expenditureAccountLineAnnualBalanceAmountTotal attribute. 559 * 560 * @return Returns the expenditureAccountLineAnnualBalanceAmountTotal. 561 */ 562 public KualiInteger getExpenditureAccountLineAnnualBalanceAmountTotal() { 563 return expenditureAccountLineAnnualBalanceAmountTotal; 564 } 565 566 /** 567 * Sets the expenditureAccountLineAnnualBalanceAmountTotal attribute value. 568 * 569 * @param expenditureAccountLineAnnualBalanceAmountTotal The expenditureAccountLineAnnualBalanceAmountTotal to set. 570 */ 571 public void setExpenditureAccountLineAnnualBalanceAmountTotal(KualiInteger expenditureAccountLineAnnualBalanceAmountTotal) { 572 this.expenditureAccountLineAnnualBalanceAmountTotal = expenditureAccountLineAnnualBalanceAmountTotal; 573 } 574 575 /** 576 * Gets the expenditureFinancialBeginningBalanceLineAmountTotal attribute. 577 * 578 * @return Returns the expenditureFinancialBeginningBalanceLineAmountTotal. 579 */ 580 public KualiInteger getExpenditureFinancialBeginningBalanceLineAmountTotal() { 581 return expenditureFinancialBeginningBalanceLineAmountTotal; 582 } 583 584 /** 585 * Sets the expenditureFinancialBeginningBalanceLineAmountTotal attribute value. 586 * 587 * @param expenditureFinancialBeginningBalanceLineAmountTotal The expenditureFinancialBeginningBalanceLineAmountTotal to set. 588 */ 589 public void setExpenditureFinancialBeginningBalanceLineAmountTotal(KualiInteger expenditureFinancialBeginningBalanceLineAmountTotal) { 590 this.expenditureFinancialBeginningBalanceLineAmountTotal = expenditureFinancialBeginningBalanceLineAmountTotal; 591 } 592 593 /** 594 * Gets the revenueAccountLineAnnualBalanceAmountTotal attribute. 595 * 596 * @return Returns the revenueAccountLineAnnualBalanceAmountTotal. 597 */ 598 public KualiInteger getRevenueAccountLineAnnualBalanceAmountTotal() { 599 return revenueAccountLineAnnualBalanceAmountTotal; 600 } 601 602 /** 603 * Sets the revenueAccountLineAnnualBalanceAmountTotal attribute value. 604 * 605 * @param revenueAccountLineAnnualBalanceAmountTotal The revenueAccountLineAnnualBalanceAmountTotal to set. 606 */ 607 public void setRevenueAccountLineAnnualBalanceAmountTotal(KualiInteger revenueAccountLineAnnualBalanceAmountTotal) { 608 this.revenueAccountLineAnnualBalanceAmountTotal = revenueAccountLineAnnualBalanceAmountTotal; 609 } 610 611 /** 612 * Gets the revenueFinancialBeginningBalanceLineAmountTotal attribute. 613 * 614 * @return Returns the revenueFinancialBeginningBalanceLineAmountTotal. 615 */ 616 public KualiInteger getRevenueFinancialBeginningBalanceLineAmountTotal() { 617 return revenueFinancialBeginningBalanceLineAmountTotal; 618 } 619 620 /** 621 * Sets the revenueFinancialBeginningBalanceLineAmountTotal attribute value. 622 * 623 * @param revenueFinancialBeginningBalanceLineAmountTotal The revenueFinancialBeginningBalanceLineAmountTotal to set. 624 */ 625 public void setRevenueFinancialBeginningBalanceLineAmountTotal(KualiInteger revenueFinancialBeginningBalanceLineAmountTotal) { 626 this.revenueFinancialBeginningBalanceLineAmountTotal = revenueFinancialBeginningBalanceLineAmountTotal; 627 } 628 629 /** 630 * Gets the expenditurePercentChangeTotal attribute. 631 * 632 * @return Returns the expenditurePercentChangeTotal. 633 */ 634 public KualiDecimal getExpenditurePercentChangeTotal() { 635 if (expenditureFinancialBeginningBalanceLineAmountTotal == null || expenditureFinancialBeginningBalanceLineAmountTotal.isZero()) { 636 this.expenditurePercentChangeTotal = null; 637 } 638 else { 639 BigDecimal diffRslt = (expenditureAccountLineAnnualBalanceAmountTotal.bigDecimalValue().setScale(4)).subtract(expenditureFinancialBeginningBalanceLineAmountTotal.bigDecimalValue().setScale(4)); 640 BigDecimal divRslt = diffRslt.divide((expenditureFinancialBeginningBalanceLineAmountTotal.bigDecimalValue().setScale(4)), KualiDecimal.ROUND_BEHAVIOR); 641 this.expenditurePercentChangeTotal = new KualiDecimal(divRslt.multiply(BigDecimal.valueOf(100)).setScale(2)); 642 } 643 return expenditurePercentChangeTotal; 644 } 645 646 /** 647 * Sets the expenditurePercentChangeTotal attribute value. 648 * 649 * @param expenditurePercentChangeTotal The expenditurePercentChangeTotal to set. 650 */ 651 public void setExpenditurePercentChangeTotal(KualiDecimal expenditurePercentChangeTotal) { 652 this.expenditurePercentChangeTotal = expenditurePercentChangeTotal; 653 } 654 655 /** 656 * Gets the revenuePercentChangeTotal attribute. 657 * 658 * @return Returns the revenuePercentChangeTotal. 659 */ 660 public KualiDecimal getRevenuePercentChangeTotal() { 661 if (revenueFinancialBeginningBalanceLineAmountTotal == null || revenueFinancialBeginningBalanceLineAmountTotal.isZero()) { 662 this.revenuePercentChangeTotal = null; 663 } 664 else { 665 BigDecimal diffRslt = (revenueAccountLineAnnualBalanceAmountTotal.bigDecimalValue().setScale(4)).subtract(revenueFinancialBeginningBalanceLineAmountTotal.bigDecimalValue().setScale(4)); 666 BigDecimal divRslt = diffRslt.divide((revenueFinancialBeginningBalanceLineAmountTotal.bigDecimalValue().setScale(4)), KualiDecimal.ROUND_BEHAVIOR); 667 this.revenuePercentChangeTotal = new KualiDecimal(divRslt.multiply(BigDecimal.valueOf(100)).setScale(2)); 668 } 669 return revenuePercentChangeTotal; 670 } 671 672 /** 673 * Sets the revenuePercentChangeTotal attribute value. 674 * 675 * @param revenuePercentChangeTotal The revenuePercentChangeTotal to set. 676 */ 677 public void setRevenuePercentChangeTotal(KualiDecimal revenuePercentChangeTotal) { 678 this.revenuePercentChangeTotal = revenuePercentChangeTotal; 679 } 680 681 /** 682 * Gets the isBenefitsCalcNeeded attribute. 683 * 684 * @return Returns the isBenefitsCalcNeeded. 685 */ 686 public boolean isBenefitsCalcNeeded() { 687 return isBenefitsCalcNeeded; 688 } 689 690 /** 691 * Sets the isBenefitsCalcNeeded attribute value. 692 * 693 * @param isBenefitsCalcNeeded The isBenefitsCalcNeeded to set. 694 */ 695 public void setBenefitsCalcNeeded(boolean isBenefitsCalcNeeded) { 696 this.isBenefitsCalcNeeded = isBenefitsCalcNeeded; 697 } 698 699 /** 700 * Gets the isMonthlyBenefitsCalcNeeded attribute. 701 * 702 * @return Returns the isMonthlyBenefitsCalcNeeded. 703 */ 704 public boolean isMonthlyBenefitsCalcNeeded() { 705 return isMonthlyBenefitsCalcNeeded; 706 } 707 708 /** 709 * Sets the isMonthlyBenefitsCalcNeeded attribute value. 710 * 711 * @param isMonthlyBenefitsCalcNeeded The isMonthlyBenefitsCalcNeeded to set. 712 */ 713 public void setMonthlyBenefitsCalcNeeded(boolean isMonthlyBenefitsCalcNeeded) { 714 this.isMonthlyBenefitsCalcNeeded = isMonthlyBenefitsCalcNeeded; 715 } 716 717 /** 718 * Gets the isSalarySettingOnly attribute. 719 * 720 * @return Returns the isSalarySettingOnly. 721 */ 722 public boolean isSalarySettingOnly() { 723 if (this.getAccountSalarySettingOnlyCause() == AccountSalarySettingOnlyCause.MISSING_PARAM || this.getAccountSalarySettingOnlyCause() == AccountSalarySettingOnlyCause.NONE) { 724 isSalarySettingOnly = false; 725 } 726 else { 727 isSalarySettingOnly = true; 728 } 729 return isSalarySettingOnly; 730 } 731 732 /** 733 * Sets the isSalarySettingOnly attribute value. 734 * 735 * @param isSalarySettingOnly The isSalarySettingOnly to set. 736 */ 737 public void setSalarySettingOnly(boolean isSalarySettingOnly) { 738 this.isSalarySettingOnly = isSalarySettingOnly; 739 } 740 741 /** 742 * Gets the accountSalarySettingOnlyCause attribute. 743 * 744 * @return Returns the accountSalarySettingOnlyCause. 745 */ 746 public AccountSalarySettingOnlyCause getAccountSalarySettingOnlyCause() { 747 if (accountSalarySettingOnlyCause == null) { 748 accountSalarySettingOnlyCause = SpringContext.getBean(BudgetParameterService.class).isSalarySettingOnlyAccount(this); 749 } 750 751 return accountSalarySettingOnlyCause; 752 } 753 754 /** 755 * Sets the accountSalarySettingOnlyCause attribute value. 756 * 757 * @param accountSalarySettingOnlyCause The accountSalarySettingOnlyCause to set. 758 */ 759 public void setAccountSalarySettingOnlyCause(AccountSalarySettingOnlyCause accountSalarySettingOnlyCause) { 760 this.accountSalarySettingOnlyCause = accountSalarySettingOnlyCause; 761 } 762 763 /** 764 * Gets the containsTwoPlug attribute. 765 * 766 * @return Returns the containsTwoPlug. 767 */ 768 public boolean isContainsTwoPlug() { 769 return containsTwoPlug; 770 } 771 772 /** 773 * Sets the containsTwoPlug attribute value. 774 * 775 * @param containsTwoPlug The containsTwoPlug to set. 776 */ 777 public void setContainsTwoPlug(boolean containsTwoPlug) { 778 this.containsTwoPlug = containsTwoPlug; 779 } 780 781 /** 782 * Gets the budgetableDocument attribute. 783 * 784 * @return Returns the budgetableDocument. 785 */ 786 public boolean isBudgetableDocument() { 787 return budgetableDocument; 788 } 789 790 /** 791 * Sets the budgetableDocument attribute value. 792 * 793 * @param budgetableDocument The budgetableDocument to set. 794 */ 795 public void setBudgetableDocument(boolean budgetableDocument) { 796 this.budgetableDocument = budgetableDocument; 797 } 798 799 /** 800 * Gets the cleanupModeActionForceCheck attribute. 801 * 802 * @return Returns the cleanupModeActionForceCheck. 803 */ 804 public boolean isCleanupModeActionForceCheck() { 805 return cleanupModeActionForceCheck; 806 } 807 808 /** 809 * Sets the cleanupModeActionForceCheck attribute value. 810 * 811 * @param cleanupModeActionForceCheck The cleanupModeActionForceCheck to set. 812 */ 813 public void setCleanupModeActionForceCheck(boolean cleanupModeActionForceCheck) { 814 this.cleanupModeActionForceCheck = cleanupModeActionForceCheck; 815 } 816 817 /** 818 * the budget construction document never appears in anyone's in-box budget construction controls access by a 819 * "pull-up/push-down" mechanism instead but, a budget construction document is routed so that the routing hierarchy can be used 820 * to trace who has modified the document we override the routine below from Document we record the processed document state. a 821 * budget construction document will never be "cancelled" or "disapproved" 822 * 823 * @see org.kuali.rice.kns.document.Document#doRouteStatusChange() 824 */ 825 @Override 826 public void doRouteStatusChange(DocumentRouteStatusChangeDTO statusChangeEvent) { 827 if (getDocumentHeader().getWorkflowDocument().stateIsEnroute()) { 828 getDocumentHeader().setFinancialDocumentStatusCode(KFSConstants.DocumentStatusCodes.ENROUTE); 829 } 830 /* the status below is comparable to "approved" status for other documents */ 831 if (getDocumentHeader().getWorkflowDocument().stateIsProcessed()) { 832 getDocumentHeader().setFinancialDocumentStatusCode(BCConstants.BUDGET_CONSTRUCTION_DOCUMENT_INITIAL_STATUS); 833 } 834 LOG.info("Status is: " + getDocumentHeader().getFinancialDocumentStatusCode()); 835 } 836 837 838 /** 839 * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper() 840 */ 841 protected LinkedHashMap toStringMapper() { 842 LinkedHashMap m = new LinkedHashMap(); 843 m.put(KFSPropertyConstants.DOCUMENT_NUMBER, this.documentNumber); 844 if (this.universityFiscalYear != null) { 845 m.put("universityFiscalYear", this.universityFiscalYear.toString()); 846 } 847 m.put("chartOfAccountsCode", this.chartOfAccountsCode); 848 m.put("accountNumber", this.accountNumber); 849 m.put("subAccountNumber", this.subAccountNumber); 850 return m; 851 } 852 853 }