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.sys.businessobject; 017 018 import java.io.Serializable; 019 import java.util.HashMap; 020 import java.util.Iterator; 021 import java.util.LinkedHashMap; 022 import java.util.Map; 023 024 import org.apache.commons.lang.StringUtils; 025 import org.apache.commons.lang.builder.EqualsBuilder; 026 import org.apache.commons.lang.builder.HashCodeBuilder; 027 import org.apache.log4j.Logger; 028 import org.kuali.kfs.coa.businessobject.Account; 029 import org.kuali.kfs.coa.businessobject.BalanceType; 030 import org.kuali.kfs.coa.businessobject.Chart; 031 import org.kuali.kfs.coa.businessobject.ObjectCode; 032 import org.kuali.kfs.coa.businessobject.ObjectType; 033 import org.kuali.kfs.coa.businessobject.ProjectCode; 034 import org.kuali.kfs.coa.businessobject.SubAccount; 035 import org.kuali.kfs.coa.businessobject.SubObjectCode; 036 import org.kuali.kfs.coa.service.AccountService; 037 import org.kuali.kfs.fp.businessobject.SalesTax; 038 import org.kuali.kfs.sys.KFSPropertyConstants; 039 import org.kuali.kfs.sys.context.SpringContext; 040 import org.kuali.kfs.sys.service.UniversityDateService; 041 import org.kuali.rice.kew.doctype.bo.DocumentTypeEBO; 042 import org.kuali.rice.kew.service.impl.KEWModuleService; 043 import org.kuali.rice.kns.bo.PersistableBusinessObjectBase; 044 import org.kuali.rice.kns.util.KualiDecimal; 045 import org.kuali.rice.kns.util.ObjectUtils; 046 047 /** 048 * This is the generic class which contains all the elements on a typical line of accounting elements. These are all the accounting 049 * items necessary to create a pending entry to the G/L. All transaction documents will use this business object inherently. 050 */ 051 public abstract class AccountingLineBase extends PersistableBusinessObjectBase implements Serializable, AccountingLine, GeneralLedgerPendingEntrySourceDetail { 052 private static Logger LOG = Logger.getLogger(AccountingLineBase.class); 053 054 private String documentNumber; 055 private Integer sequenceNumber; // relative to the grouping of acctng lines 056 private Integer postingYear; 057 private KualiDecimal amount; 058 private String referenceOriginCode; 059 private String referenceNumber; 060 private String referenceTypeCode; 061 private String overrideCode = AccountingLineOverride.CODE.NONE; 062 private boolean accountExpiredOverride; // for the UI, persisted in overrideCode 063 private boolean accountExpiredOverrideNeeded; // for the UI, not persisted 064 private boolean nonFringeAccountOverride; // for the UI, persisted in overrideCode 065 private boolean nonFringeAccountOverrideNeeded; // for the UI, not persisted 066 private boolean objectBudgetOverride; 067 private boolean objectBudgetOverrideNeeded; 068 private String organizationReferenceId; 069 private String debitCreditCode; // should only be set by the Journal Voucher or Auxiliary Voucher document 070 private String encumbranceUpdateCode; // should only be set by the Journal Voucher document 071 protected String financialDocumentLineTypeCode; 072 protected String financialDocumentLineDescription; 073 protected boolean salesTaxRequired; 074 075 private String chartOfAccountsCode; 076 private String accountNumber; 077 private String financialObjectCode; 078 private String subAccountNumber; 079 private String financialSubObjectCode; 080 private String projectCode; 081 private String balanceTypeCode; 082 083 // bo references 084 private Chart chart; 085 private Account account; 086 private ObjectCode objectCode; 087 private SubAccount subAccount; 088 private SubObjectCode subObjectCode; 089 private ProjectCode project; 090 private BalanceType balanceTyp; 091 private OriginationCode referenceOrigin; 092 private DocumentTypeEBO referenceFinancialSystemDocumentTypeCode; 093 private SalesTax salesTax; 094 095 /** 096 * This constructor sets up empty instances for the dependent objects. 097 */ 098 public AccountingLineBase() { 099 setAmount(KualiDecimal.ZERO); 100 chart = new Chart(); 101 account = new Account(); 102 objectCode = new ObjectCode(); 103 subAccount = new SubAccount(); 104 subObjectCode = new SubObjectCode(); 105 project = new ProjectCode(); 106 107 balanceTyp = new BalanceType(); 108 // salesTax = new SalesTax(); 109 salesTaxRequired = false; 110 } 111 112 113 /** 114 * @return Returns the account. 115 */ 116 public Account getAccount() { 117 return account; 118 } 119 120 /** 121 * @param account The account to set. 122 * @deprecated 123 */ 124 public void setAccount(Account account) { 125 this.account = account; 126 } 127 128 /** 129 * @return Returns the chartOfAccountsCode. 130 */ 131 public Chart getChart() { 132 return chart; 133 } 134 135 /** 136 * @param chart The chartOfAccountsCode to set. 137 * @deprecated 138 */ 139 public void setChart(Chart chart) { 140 this.chart = chart; 141 } 142 143 /** 144 * @return Returns the documentNumber. 145 */ 146 public String getDocumentNumber() { 147 return documentNumber; 148 } 149 150 /** 151 * @return Returns the amount. 152 */ 153 public KualiDecimal getAmount() { 154 return amount; 155 } 156 157 /** 158 * @param amount The amount to set. 159 */ 160 public void setAmount(KualiDecimal amount) { 161 this.amount = amount; 162 } 163 164 /** 165 * @return Returns the balanceTyp. 166 */ 167 public BalanceType getBalanceTyp() { 168 return balanceTyp; 169 } 170 171 /** 172 * @param balanceTyp The balanceTyp to set. 173 * @deprecated 174 */ 175 public void setBalanceTyp(BalanceType balanceTyp) { 176 this.balanceTyp = balanceTyp; 177 } 178 179 /** 180 * @return Returns the objectCode. 181 */ 182 public ObjectCode getObjectCode() { 183 return objectCode; 184 } 185 186 /** 187 * @param objectCode The objectCode to set. 188 * @deprecated 189 */ 190 public void setObjectCode(ObjectCode objectCode) { 191 this.objectCode = objectCode; 192 } 193 194 /** 195 * @return Returns the referenceOriginCode. 196 */ 197 public String getReferenceOriginCode() { 198 return referenceOriginCode; 199 } 200 201 /** 202 * @param originCode The referenceOriginCode to set. 203 */ 204 public void setReferenceOriginCode(String originCode) { 205 this.referenceOriginCode = originCode; 206 } 207 208 /** 209 * This method returns the object related to referenceOriginCode 210 * 211 * @return referenceOrigin 212 */ 213 public OriginationCode getReferenceOrigin() { 214 return referenceOrigin; 215 } 216 217 /** 218 * This method sets the referenceOrigin object, this is only to be used by OJB 219 * 220 * @param referenceOrigin 221 * @deprecated 222 */ 223 public void setReferenceOrigin(OriginationCode referenceOrigin) { 224 this.referenceOrigin = referenceOrigin; 225 } 226 227 /** 228 * Gets the referenceFinancialSystemDocumentTypeCode attribute. 229 * @return Returns the referenceFinancialSystemDocumentTypeCode. 230 */ 231 public DocumentTypeEBO getReferenceFinancialSystemDocumentTypeCode() { 232 return referenceFinancialSystemDocumentTypeCode = SpringContext.getBean(KEWModuleService.class).retrieveExternalizableBusinessObjectIfNecessary(this, referenceFinancialSystemDocumentTypeCode, "referenceFinancialSystemDocumentTypeCode"); 233 } 234 235 /** 236 * @return Returns the organizationReferenceId. 237 */ 238 public String getOrganizationReferenceId() { 239 return organizationReferenceId; 240 } 241 242 /** 243 * @param organizationReferenceId The organizationReferenceId to set. 244 */ 245 public void setOrganizationReferenceId(String organizationReferenceId) { 246 this.organizationReferenceId = organizationReferenceId; 247 } 248 249 /** 250 * @return Returns the overrideCode. 251 */ 252 public String getOverrideCode() { 253 return overrideCode; 254 } 255 256 /** 257 * @param overrideCode The overrideCode to set. 258 */ 259 public void setOverrideCode(String overrideCode) { 260 this.overrideCode = overrideCode; 261 } 262 263 /** 264 * @return Returns the postingYear. 265 */ 266 public Integer getPostingYear() { 267 if (postingYear == null) { 268 postingYear = SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear(); 269 } 270 return postingYear; 271 } 272 273 /** 274 * @param postingYear The postingYear to set. 275 */ 276 public void setPostingYear(Integer postingYear) { 277 this.postingYear = postingYear; 278 } 279 280 /** 281 * @return Returns the projectCode. 282 */ 283 public String getProjectCode() { 284 return projectCode; 285 } 286 287 /** 288 * @param projectCode The projectCode to set. 289 */ 290 public void setProjectCode(String projectCode) { 291 this.projectCode = projectCode; 292 } 293 294 /** 295 * @return Returns the referenceNumber. 296 */ 297 public String getReferenceNumber() { 298 return referenceNumber; 299 } 300 301 /** 302 * @param referenceNumber The referenceNumber to set. 303 */ 304 public void setReferenceNumber(String referenceNumber) { 305 this.referenceNumber = referenceNumber; 306 } 307 308 /** 309 * @return Returns the referenceTypeCode. 310 */ 311 public String getReferenceTypeCode() { 312 return referenceTypeCode; 313 } 314 315 /** 316 * @param referenceTypeCode The referenceTypeCode to set. 317 */ 318 public void setReferenceTypeCode(String referenceTypeCode) { 319 this.referenceTypeCode = referenceTypeCode; 320 } 321 322 /** 323 * @return Returns the sequenceNumber. 324 */ 325 public Integer getSequenceNumber() { 326 return sequenceNumber; 327 } 328 329 /** 330 * @param sequenceNumber The sequenceNumber to set. 331 */ 332 public void setSequenceNumber(Integer sequenceNumber) { 333 this.sequenceNumber = sequenceNumber; 334 } 335 336 /** 337 * @return Returns the subAccount. 338 */ 339 public SubAccount getSubAccount() { 340 return subAccount; 341 } 342 343 /** 344 * @param subAccount The subAccount to set. 345 * @deprecated 346 */ 347 public void setSubAccount(SubAccount subAccount) { 348 this.subAccount = subAccount; 349 } 350 351 /** 352 * @return Returns the subObjectCode. 353 */ 354 public SubObjectCode getSubObjectCode() { 355 return subObjectCode; 356 } 357 358 /** 359 * @param subObjectCode The subObjectCode to set. 360 * @deprecated 361 */ 362 public void setSubObjectCode(SubObjectCode subObjectCode) { 363 this.subObjectCode = subObjectCode; 364 } 365 366 367 /** 368 * @see org.kuali.kfs.sys.businessobject.AccountingLine#getSalesTax() 369 */ 370 public SalesTax getSalesTax() { 371 return salesTax; 372 } 373 374 /** 375 * @see org.kuali.kfs.sys.businessobject.AccountingLine#setSalesTax(org.kuali.kfs.fp.businessobject.SalesTax) 376 * @deprecated 377 */ 378 public void setSalesTax(SalesTax salesTax) { 379 this.salesTax = salesTax; 380 } 381 382 /** 383 * @see org.kuali.kfs.sys.businessobject.AccountingLine#isSalesTaxRequired() 384 */ 385 public boolean isSalesTaxRequired() { 386 return salesTaxRequired; 387 } 388 389 /** 390 * @see org.kuali.kfs.sys.businessobject.AccountingLine#setSalesTaxRequired(boolean) 391 */ 392 public void setSalesTaxRequired(boolean salesTaxRequired) { 393 this.salesTaxRequired = salesTaxRequired; 394 } 395 396 397 /** 398 * @param documentNumber The documentNumber to set. 399 */ 400 public void setDocumentNumber(String documentNumber) { 401 this.documentNumber = documentNumber; 402 } 403 404 /** 405 * This method retrieves the debit/credit code for the accounting line. This method will only return a not null value for a 406 * Journal Voucher document. 407 * 408 * @return A String code. 409 */ 410 public String getDebitCreditCode() { 411 return debitCreditCode; 412 } 413 414 /** 415 * This method sets the debit/credit code for the accounting line. This method should only be used for a Journal Voucher 416 * document. 417 * 418 * @param debitCreditCode 419 */ 420 public void setDebitCreditCode(String debitCreditCode) { 421 this.debitCreditCode = debitCreditCode; 422 } 423 424 /** 425 * This method retrieves the encumbrance update code for the accounting line. This method will only return a not null value for 426 * a Journal Voucher document. 427 * 428 * @return A String code. 429 */ 430 public String getEncumbranceUpdateCode() { 431 return encumbranceUpdateCode; 432 } 433 434 /** 435 * This method sets the debit/credit code for the accounting line. This method should only be used for a Journal Voucher 436 * document. 437 * 438 * @param encumbranceUpdateCode 439 */ 440 public void setEncumbranceUpdateCode(String encumbranceUpdateCode) { 441 this.encumbranceUpdateCode = encumbranceUpdateCode; 442 } 443 444 /** 445 * This method retrieves the ObjectType for the accounting line. This method will only return a not null value for a Journal 446 * Voucher document. 447 * 448 * @return An ObjectType instance. 449 */ 450 public ObjectType getObjectType() { 451 if ( getObjectTypeCode() != null ) { 452 return objectCode.getFinancialObjectType(); 453 } 454 return null; 455 } 456 457 /** 458 * @return Returns the accountNumber. 459 */ 460 public String getAccountNumber() { 461 return accountNumber; 462 } 463 464 /** 465 * @param accountNumber The accountNumber to set. 466 */ 467 public void setAccountNumber(String accountNumber) { 468 this.accountNumber = accountNumber; 469 // if accounts can't cross charts, set chart code whenever account number is set 470 SpringContext.getBean(AccountService.class).populateAccountingLineChartIfNeeded(this); 471 } 472 473 /** 474 * @return Returns the balanceTypeCode. 475 */ 476 public String getBalanceTypeCode() { 477 return balanceTypeCode; 478 } 479 480 /** 481 * @param balanceTypeCode The balanceTypeCode to set. 482 */ 483 public void setBalanceTypeCode(String balanceTypeCode) { 484 this.balanceTypeCode = balanceTypeCode; 485 } 486 487 /** 488 * @return Returns the chartOfAccountsCode. 489 */ 490 public String getChartOfAccountsCode() { 491 return chartOfAccountsCode; 492 } 493 494 /** 495 * @param chartOfAccountsCode The chartOfAccountsCode to set. 496 */ 497 public void setChartOfAccountsCode(String chartOfAccountsCode) { 498 this.chartOfAccountsCode = chartOfAccountsCode; 499 } 500 501 /** 502 * @return Returns the financialObjectCode. 503 */ 504 public String getFinancialObjectCode() { 505 return financialObjectCode; 506 } 507 508 /** 509 * @param financialObjectCode The financialObjectCode to set. 510 */ 511 public void setFinancialObjectCode(String financialObjectCode) { 512 this.financialObjectCode = financialObjectCode; 513 } 514 515 /** 516 * @return Returns the financialSubObjectCode. 517 */ 518 public String getFinancialSubObjectCode() { 519 return financialSubObjectCode; 520 } 521 522 /** 523 * @param financialSubObjectCode The financialSubObjectCode to set. 524 */ 525 public void setFinancialSubObjectCode(String financialSubObjectCode) { 526 this.financialSubObjectCode = financialSubObjectCode; 527 } 528 529 /** 530 * @return Returns the objectTypeCode. 531 */ 532 public String getObjectTypeCode() { 533 if ( ObjectUtils.isNull(objectCode) 534 || !StringUtils.equals(getFinancialObjectCode(), objectCode.getFinancialObjectCode()) 535 || !StringUtils.equals(getChartOfAccountsCode(), objectCode.getChartOfAccountsCode()) 536 || !getPostingYear().equals(objectCode.getUniversityFiscalYear() ) 537 ) { 538 refreshReferenceObject("objectCode"); 539 } 540 541 if (!ObjectUtils.isNull(objectCode)) { 542 return objectCode.getFinancialObjectTypeCode(); 543 } 544 return null; 545 } 546 547 /** 548 * @return Returns the financialDocumentLineTypeCode. 549 */ 550 public String getFinancialDocumentLineTypeCode() { 551 return financialDocumentLineTypeCode; 552 } 553 554 /** 555 * @param financialDocumentLineTypeCode The financialDocumentLineTypeCode to set. 556 */ 557 public void setFinancialDocumentLineTypeCode(String financialDocumentLineTypeCode) { 558 this.financialDocumentLineTypeCode = financialDocumentLineTypeCode; 559 } 560 561 /** 562 * @return Returns the project. 563 */ 564 public ProjectCode getProject() { 565 return project; 566 } 567 568 /** 569 * @param project The project to set. 570 * @deprecated 571 */ 572 public void setProject(ProjectCode project) { 573 this.project = project; 574 } 575 576 /** 577 * @return Returns the subAccountNumber. 578 */ 579 public String getSubAccountNumber() { 580 return subAccountNumber; 581 } 582 583 /** 584 * @param subAccountNumber The subAccountNumber to set. 585 */ 586 public void setSubAccountNumber(String subAccountNumber) { 587 this.subAccountNumber = subAccountNumber; 588 } 589 590 /** 591 * @return Returns the financialDocumentLineDescription. 592 */ 593 public String getFinancialDocumentLineDescription() { 594 return financialDocumentLineDescription; 595 } 596 597 /** 598 * @param financialDocumentLineDescription The financialDocumentLineDescription to set. 599 */ 600 public void setFinancialDocumentLineDescription(String financialDocumentLineDescription) { 601 this.financialDocumentLineDescription = financialDocumentLineDescription; 602 } 603 604 /** 605 * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper() 606 */ 607 protected LinkedHashMap toStringMapper() { 608 LinkedHashMap m = new LinkedHashMap(); 609 610 m.put(KFSPropertyConstants.DOCUMENT_NUMBER, documentNumber); 611 612 m.put("sequenceNumber", sequenceNumber); 613 m.put("postingYear", postingYear); 614 m.put("amount", amount); 615 m.put("debitCreditCode", debitCreditCode); 616 m.put("encumbranceUpdateCode", encumbranceUpdateCode); 617 m.put("financialDocumentLineDescription", financialDocumentLineDescription); 618 619 m.put("chart", getChartOfAccountsCode()); 620 m.put("account", getAccountNumber()); 621 m.put("objectCode", getFinancialObjectCode()); 622 m.put("subAccount", getSubAccountNumber()); 623 m.put("subObjectCode", getFinancialSubObjectCode()); 624 m.put("projectCode", getProjectCode()); 625 m.put("balanceTyp", getBalanceTypeCode()); 626 627 m.put("orgRefId", getOrganizationReferenceId()); 628 629 return m; 630 } 631 632 /** 633 * @see org.kuali.rice.kns.bo.AccountingLine#isSourceAccountingLine() 634 */ 635 public boolean isSourceAccountingLine() { 636 return (this instanceof SourceAccountingLine); 637 } 638 639 /** 640 * @see org.kuali.rice.kns.bo.AccountingLine#isTargetAccountingLine() 641 */ 642 public boolean isTargetAccountingLine() { 643 return (this instanceof TargetAccountingLine); 644 } 645 646 647 /** 648 * @see org.kuali.rice.kns.bo.AccountingLine#getAccountKey() 649 */ 650 public String getAccountKey() { 651 String key = getChartOfAccountsCode() + ":" + getAccountNumber(); 652 return key; 653 } 654 655 656 /** 657 * @see org.kuali.rice.kns.bo.AccountingLine#copyFrom(org.kuali.rice.kns.bo.AccountingLine) 658 */ 659 public void copyFrom(AccountingLine other) { 660 if (other == null) { 661 throw new IllegalArgumentException("invalid (null) other"); 662 } 663 664 if (this != other) { 665 // primitive fields 666 setSequenceNumber(other.getSequenceNumber()); 667 setDocumentNumber(other.getDocumentNumber()); 668 setPostingYear(other.getPostingYear()); 669 setAmount(other.getAmount()); 670 setReferenceOriginCode(other.getReferenceOriginCode()); 671 setReferenceNumber(other.getReferenceNumber()); 672 setReferenceTypeCode(other.getReferenceTypeCode()); 673 setOverrideCode(other.getOverrideCode()); 674 setOrganizationReferenceId(other.getOrganizationReferenceId()); 675 setDebitCreditCode(other.getDebitCreditCode()); 676 setEncumbranceUpdateCode(other.getEncumbranceUpdateCode()); 677 setFinancialDocumentLineTypeCode(other.getFinancialDocumentLineTypeCode()); 678 setFinancialDocumentLineDescription(other.getFinancialDocumentLineDescription()); 679 setAccountExpiredOverride(other.getAccountExpiredOverride()); 680 setAccountExpiredOverrideNeeded(other.getAccountExpiredOverrideNeeded()); 681 setObjectBudgetOverride(other.isObjectBudgetOverride()); 682 setObjectBudgetOverrideNeeded(other.isObjectBudgetOverrideNeeded()); 683 684 // foreign keys 685 setChartOfAccountsCode(other.getChartOfAccountsCode()); 686 setAccountNumber(other.getAccountNumber()); 687 setFinancialObjectCode(other.getFinancialObjectCode()); 688 setSubAccountNumber(other.getSubAccountNumber()); 689 setFinancialSubObjectCode(other.getFinancialSubObjectCode()); 690 setProjectCode(other.getProjectCode()); 691 setBalanceTypeCode(other.getBalanceTypeCode()); 692 693 // sales tax 694 if (ObjectUtils.isNotNull(other.getSalesTax())) { 695 SalesTax salesTax = getSalesTax(); 696 SalesTax origSalesTax = other.getSalesTax(); 697 if (salesTax != null) { 698 salesTax.setAccountNumber(origSalesTax.getAccountNumber()); 699 salesTax.setChartOfAccountsCode(origSalesTax.getChartOfAccountsCode()); 700 salesTax.setFinancialDocumentGrossSalesAmount(origSalesTax.getFinancialDocumentGrossSalesAmount()); 701 salesTax.setFinancialDocumentTaxableSalesAmount(origSalesTax.getFinancialDocumentTaxableSalesAmount()); 702 salesTax.setFinancialDocumentSaleDate(origSalesTax.getFinancialDocumentSaleDate()); 703 704 // primary keys 705 salesTax.setDocumentNumber(other.getDocumentNumber()); 706 salesTax.setFinancialDocumentLineNumber(other.getSequenceNumber()); 707 salesTax.setFinancialDocumentLineTypeCode(other.getFinancialDocumentLineTypeCode()); 708 } 709 else { 710 salesTax = origSalesTax; 711 } 712 } 713 714 // object references 715 setChart(other.getChart()); 716 setAccount(other.getAccount()); 717 setObjectCode(other.getObjectCode()); 718 setSubAccount(other.getSubAccount()); 719 setSubObjectCode(other.getSubObjectCode()); 720 setProject(other.getProject()); 721 setBalanceTyp(other.getBalanceTyp()); 722 } 723 } 724 725 726 /** 727 * @see org.kuali.rice.kns.bo.AccountingLine#isLike(org.kuali.rice.kns.bo.AccountingLine) 728 */ 729 public boolean isLike(AccountingLine other) { 730 boolean isLike = false; 731 732 if (other != null) { 733 if (other == this) { 734 isLike = true; 735 } 736 else { 737 Map thisValues = this.getValuesMap(); 738 Map otherValues = other.getValuesMap(); 739 740 isLike = thisValues.equals(otherValues); 741 742 if (!isLike && LOG.isDebugEnabled()) { 743 StringBuffer inequalities = new StringBuffer(); 744 boolean first = true; 745 746 for (Iterator i = thisValues.keySet().iterator(); i.hasNext();) { 747 String key = (String) i.next(); 748 749 Object thisValue = thisValues.get(key); 750 Object otherValue = otherValues.get(key); 751 if (!org.apache.commons.lang.ObjectUtils.equals(thisValue, otherValue)) { 752 inequalities.append(key + "(" + thisValue + " != " + otherValue + ")"); 753 754 if (first) { 755 first = false; 756 } 757 else { 758 inequalities.append(","); 759 } 760 } 761 } 762 763 LOG.debug("inequalities: " + inequalities); 764 } 765 } 766 } 767 768 return isLike; 769 } 770 771 /** 772 * @see AccountingLine#getAccountExpiredOverride() 773 */ 774 public boolean getAccountExpiredOverride() { 775 return accountExpiredOverride; 776 } 777 778 /** 779 * @see AccountingLine#setAccountExpiredOverride(boolean) 780 */ 781 public void setAccountExpiredOverride(boolean b) { 782 accountExpiredOverride = b; 783 } 784 785 /** 786 * @see AccountingLine#getAccountExpiredOverrideNeeded() 787 */ 788 public boolean getAccountExpiredOverrideNeeded() { 789 return accountExpiredOverrideNeeded; 790 } 791 792 /** 793 * @see AccountingLine#setAccountExpiredOverrideNeeded(boolean) 794 */ 795 public void setAccountExpiredOverrideNeeded(boolean b) { 796 accountExpiredOverrideNeeded = b; 797 } 798 799 /** 800 * @return Returns the objectBudgetOverride. 801 */ 802 public boolean isObjectBudgetOverride() { 803 return objectBudgetOverride; 804 } 805 806 /** 807 * @param objectBudgetOverride The objectBudgetOverride to set. 808 */ 809 public void setObjectBudgetOverride(boolean objectBudgetOverride) { 810 this.objectBudgetOverride = objectBudgetOverride; 811 } 812 813 /** 814 * @return Returns the objectBudgetOverrideNeeded. 815 */ 816 public boolean isObjectBudgetOverrideNeeded() { 817 return objectBudgetOverrideNeeded; 818 } 819 820 /** 821 * @param objectBudgetOverrideNeeded The objectBudgetOverrideNeeded to set. 822 */ 823 public void setObjectBudgetOverrideNeeded(boolean objectBudgetOverrideNeeded) { 824 this.objectBudgetOverrideNeeded = objectBudgetOverrideNeeded; 825 } 826 827 /** 828 * @see org.kuali.kfs.sys.businessobject.AccountingLine#isNonFringeAccountOverride() 829 */ 830 public boolean getNonFringeAccountOverride() { 831 return nonFringeAccountOverride; 832 } 833 834 /** 835 * @see org.kuali.kfs.sys.businessobject.AccountingLine#setNonFringeAccountOverride(boolean) 836 */ 837 public void setNonFringeAccountOverride(boolean nonFringeAccountOverride) { 838 this.nonFringeAccountOverride = nonFringeAccountOverride; 839 } 840 841 /** 842 * @see org.kuali.kfs.sys.businessobject.AccountingLine#isNonFringeAccountOverrideNeeded() 843 */ 844 public boolean getNonFringeAccountOverrideNeeded() { 845 return nonFringeAccountOverrideNeeded; 846 } 847 848 /** 849 * @see org.kuali.kfs.sys.businessobject.AccountingLine#setNonFringeAccountOverrideNeeded(boolean) 850 */ 851 public void setNonFringeAccountOverrideNeeded(boolean nonFringeAccountOverrideNeeded) { 852 this.nonFringeAccountOverrideNeeded = nonFringeAccountOverrideNeeded; 853 } 854 855 /** 856 * Returns a map with the primitive field names as the key and the primitive values as the map value. 857 * 858 * @return Map 859 */ 860 public Map getValuesMap() { 861 Map simpleValues = new HashMap(); 862 863 simpleValues.put("sequenceNumber", getSequenceNumber()); 864 simpleValues.put(KFSPropertyConstants.DOCUMENT_NUMBER, getDocumentNumber()); 865 simpleValues.put("postingYear", getPostingYear()); 866 simpleValues.put("amount", getAmount()); 867 simpleValues.put("referenceOriginCode", getReferenceOriginCode()); 868 simpleValues.put("referenceNumber", getReferenceNumber()); 869 simpleValues.put("referenceTypeCode", getReferenceTypeCode()); 870 simpleValues.put("overrideCode", getOverrideCode()); 871 // The override booleans are not in the map because they should not cause isLike() to fail and generate update events. 872 simpleValues.put("organizationReferenceId", getOrganizationReferenceId()); 873 simpleValues.put("debitCreditCode", getDebitCreditCode()); 874 simpleValues.put("encumbranceUpdateCode", getEncumbranceUpdateCode()); 875 simpleValues.put("financialDocumentLineTypeCode", getFinancialDocumentLineTypeCode()); 876 simpleValues.put("financialDocumentLineDescription", getFinancialDocumentLineDescription()); 877 878 simpleValues.put("chartOfAccountsCode", getChartOfAccountsCode()); 879 simpleValues.put("accountNumber", getAccountNumber()); 880 simpleValues.put("financialObjectCode", getFinancialObjectCode()); 881 simpleValues.put("subAccountNumber", getSubAccountNumber()); 882 simpleValues.put("financialSubObjectCode", getFinancialSubObjectCode()); 883 simpleValues.put("projectCode", getProjectCode()); 884 simpleValues.put("balanceTypeCode", getBalanceTypeCode()); 885 simpleValues.put("objectTypeCode", getObjectTypeCode()); 886 887 return simpleValues; 888 } 889 890 /** 891 * Override needed for PURAP GL entry creation (hjs) - please do not add "amount" to this method 892 * 893 * @see java.lang.Object#equals(java.lang.Object) 894 */ 895 public boolean equals(Object obj) { 896 if (!(obj instanceof AccountingLine)) { 897 return false; 898 } 899 AccountingLine accountingLine = (AccountingLine) obj; 900 return new EqualsBuilder().append(this.chartOfAccountsCode, accountingLine.getChartOfAccountsCode()).append(this.accountNumber, accountingLine.getAccountNumber()).append(this.subAccountNumber, accountingLine.getSubAccountNumber()).append(this.financialObjectCode, accountingLine.getFinancialObjectCode()).append(this.financialSubObjectCode, accountingLine.getFinancialSubObjectCode()).append(this.projectCode, accountingLine.getProjectCode()).append(this.organizationReferenceId, accountingLine.getOrganizationReferenceId()).isEquals(); 901 } 902 903 /** 904 * Override needed for PURAP GL entry creation (hjs) - please do not add "amount" to this method 905 * 906 * @see java.lang.Object#hashCode() 907 */ 908 public int hashCode() { 909 return new HashCodeBuilder(37, 41).append(this.chartOfAccountsCode).append(this.accountNumber).append(this.subAccountNumber).append(this.financialObjectCode).append(this.financialSubObjectCode).append(this.projectCode).append(this.organizationReferenceId).toHashCode(); 910 } 911 912 }