/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.sys.businessobject; import java.io.Serializable; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.log4j.Logger; import org.kuali.kfs.coa.businessobject.Account; import org.kuali.kfs.coa.businessobject.BalanceType; import org.kuali.kfs.coa.businessobject.Chart; import org.kuali.kfs.coa.businessobject.ObjectCode; import org.kuali.kfs.coa.businessobject.ObjectType; import org.kuali.kfs.coa.businessobject.ProjectCode; import org.kuali.kfs.coa.businessobject.SubAccount; import org.kuali.kfs.coa.businessobject.SubObjectCode; import org.kuali.kfs.coa.service.AccountService; import org.kuali.kfs.fp.businessobject.SalesTax; import org.kuali.kfs.sys.KFSPropertyConstants; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.service.UniversityDateService; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.kew.api.doctype.DocumentTypeService; import org.kuali.rice.kew.doctype.bo.DocumentType; import org.kuali.rice.kew.doctype.bo.DocumentTypeEBO; import org.kuali.rice.krad.bo.PersistableBusinessObjectBase; import org.kuali.rice.krad.util.ObjectUtils; /** * This is the generic class which contains all the elements on a typical line of accounting elements. These are all the accounting * items necessary to create a pending entry to the G/L. All transaction documents will use this business object inherently. */ public abstract class AccountingLineBase extends PersistableBusinessObjectBase implements Serializable, AccountingLine, GeneralLedgerPendingEntrySourceDetail { private static final Logger LOG = Logger.getLogger(AccountingLineBase.class); protected String documentNumber; protected Integer sequenceNumber; // relative to the grouping of acctng lines protected Integer postingYear; protected KualiDecimal amount; protected String referenceOriginCode; protected String referenceNumber; protected String referenceTypeCode; protected String overrideCode = AccountingLineOverride.CODE.NONE; protected boolean accountExpiredOverride; // for the UI, persisted in overrideCode protected boolean accountExpiredOverrideNeeded; // for the UI, not persisted protected boolean nonFringeAccountOverride; // for the UI, persisted in overrideCode protected boolean nonFringeAccountOverrideNeeded; // for the UI, not persisted protected boolean objectBudgetOverride; protected boolean objectBudgetOverrideNeeded; protected String organizationReferenceId; protected String debitCreditCode; // should only be set by the Journal Voucher or Auxiliary Voucher document protected String encumbranceUpdateCode; // should only be set by the Journal Voucher document protected String financialDocumentLineTypeCode; protected String financialDocumentLineDescription; protected boolean salesTaxRequired; protected String chartOfAccountsCode; protected String accountNumber; protected String financialObjectCode; protected String subAccountNumber; protected String financialSubObjectCode; protected String projectCode; protected String balanceTypeCode; // bo references protected Chart chart; protected Account account; protected ObjectCode objectCode; protected SubAccount subAccount; protected SubObjectCode subObjectCode; protected ProjectCode project; protected BalanceType balanceTyp; protected OriginationCode referenceOrigin; protected DocumentTypeEBO referenceFinancialSystemDocumentTypeCode; protected SalesTax salesTax; /** * This constructor sets up empty instances for the dependent objects. */ public AccountingLineBase() { setAmount(KualiDecimal.ZERO); chart = new Chart(); account = new Account(); objectCode = new ObjectCode(); subAccount = new SubAccount(); subObjectCode = new SubObjectCode(); project = new ProjectCode(); balanceTyp = new BalanceType(); // salesTax = new SalesTax(); salesTaxRequired = false; } /** * @return Returns the account. */ @Override public Account getAccount() { return account; } /** * @param account The account to set. * @deprecated */ @Deprecated @Override public void setAccount(Account account) { this.account = account; } /** * @return Returns the chartOfAccountsCode. */ @Override public Chart getChart() { return chart; } /** * @param chart The chartOfAccountsCode to set. * @deprecated */ @Deprecated @Override public void setChart(Chart chart) { this.chart = chart; } /** * @return Returns the documentNumber. */ @Override public String getDocumentNumber() { return documentNumber; } /** * @return Returns the amount. */ @Override public KualiDecimal getAmount() { return amount; } /** * @param amount The amount to set. */ @Override public void setAmount(KualiDecimal amount) { this.amount = amount; } /** * @return Returns the balanceTyp. */ @Override public BalanceType getBalanceTyp() { return balanceTyp; } /** * @param balanceTyp The balanceTyp to set. * @deprecated */ @Deprecated @Override public void setBalanceTyp(BalanceType balanceTyp) { this.balanceTyp = balanceTyp; } /** * @return Returns the objectCode. */ @Override public ObjectCode getObjectCode() { return objectCode; } /** * @param objectCode The objectCode to set. * @deprecated */ @Deprecated @Override public void setObjectCode(ObjectCode objectCode) { this.objectCode = objectCode; } /** * @return Returns the referenceOriginCode. */ @Override public String getReferenceOriginCode() { return referenceOriginCode; } /** * @param originCode The referenceOriginCode to set. */ @Override public void setReferenceOriginCode(String originCode) { this.referenceOriginCode = originCode; } /** * This method returns the object related to referenceOriginCode * * @return referenceOrigin */ @Override public OriginationCode getReferenceOrigin() { return referenceOrigin; } /** * This method sets the referenceOrigin object, this is only to be used by OJB * * @param referenceOrigin * @deprecated */ @Deprecated @Override public void setReferenceOrigin(OriginationCode referenceOrigin) { this.referenceOrigin = referenceOrigin; } /** * Gets the referenceFinancialSystemDocumentTypeCode attribute. * @return Returns the referenceFinancialSystemDocumentTypeCode. */ @Override public DocumentTypeEBO getReferenceFinancialSystemDocumentTypeCode() { if ( StringUtils.isBlank( referenceTypeCode ) ) { referenceFinancialSystemDocumentTypeCode = null; } else { if ( referenceFinancialSystemDocumentTypeCode == null || !StringUtils.equals(referenceTypeCode, referenceFinancialSystemDocumentTypeCode.getName() ) ) { org.kuali.rice.kew.api.doctype.DocumentType temp = SpringContext.getBean(DocumentTypeService.class).getDocumentTypeByName(referenceTypeCode); if ( temp != null ) { referenceFinancialSystemDocumentTypeCode = DocumentType.from( temp ); } else { referenceFinancialSystemDocumentTypeCode = null; } } } return referenceFinancialSystemDocumentTypeCode; } /** * @return Returns the organizationReferenceId. */ @Override public String getOrganizationReferenceId() { return organizationReferenceId; } /** * @param organizationReferenceId The organizationReferenceId to set. */ @Override public void setOrganizationReferenceId(String organizationReferenceId) { this.organizationReferenceId = organizationReferenceId; } /** * @return Returns the overrideCode. */ @Override public String getOverrideCode() { return overrideCode; } /** * @param overrideCode The overrideCode to set. */ @Override public void setOverrideCode(String overrideCode) { this.overrideCode = overrideCode; } /** * @return Returns the postingYear. */ @Override public Integer getPostingYear() { if (postingYear == null) { postingYear = SpringContext.getBean(UniversityDateService.class).getCurrentFiscalYear(); } return postingYear; } /** * @param postingYear The postingYear to set. */ @Override public void setPostingYear(Integer postingYear) { this.postingYear = postingYear; } /** * @return Returns the projectCode. */ @Override public String getProjectCode() { return projectCode; } /** * @param projectCode The projectCode to set. */ @Override public void setProjectCode(String projectCode) { this.projectCode = projectCode; } /** * @return Returns the referenceNumber. */ @Override public String getReferenceNumber() { return referenceNumber; } /** * @param referenceNumber The referenceNumber to set. */ @Override public void setReferenceNumber(String referenceNumber) { this.referenceNumber = referenceNumber; } /** * @return Returns the referenceTypeCode. */ @Override public String getReferenceTypeCode() { return referenceTypeCode; } /** * @param referenceTypeCode The referenceTypeCode to set. */ @Override public void setReferenceTypeCode(String referenceTypeCode) { this.referenceTypeCode = referenceTypeCode; } /** * @return Returns the sequenceNumber. */ @Override public Integer getSequenceNumber() { return sequenceNumber; } /** * @param sequenceNumber The sequenceNumber to set. */ @Override public void setSequenceNumber(Integer sequenceNumber) { this.sequenceNumber = sequenceNumber; } /** * @return Returns the subAccount. */ @Override public SubAccount getSubAccount() { return subAccount; } /** * @param subAccount The subAccount to set. * @deprecated */ @Deprecated @Override public void setSubAccount(SubAccount subAccount) { this.subAccount = subAccount; } /** * @return Returns the subObjectCode. */ @Override public SubObjectCode getSubObjectCode() { return subObjectCode; } /** * @param subObjectCode The subObjectCode to set. * @deprecated */ @Deprecated @Override public void setSubObjectCode(SubObjectCode subObjectCode) { this.subObjectCode = subObjectCode; } /** * @see org.kuali.kfs.sys.businessobject.AccountingLine#getSalesTax() */ @Override public SalesTax getSalesTax() { return salesTax; } /** * @see org.kuali.kfs.sys.businessobject.AccountingLine#setSalesTax(org.kuali.kfs.fp.businessobject.SalesTax) * @deprecated */ @Deprecated @Override public void setSalesTax(SalesTax salesTax) { this.salesTax = salesTax; } /** * @see org.kuali.kfs.sys.businessobject.AccountingLine#isSalesTaxRequired() */ @Override public boolean isSalesTaxRequired() { return salesTaxRequired; } /** * @see org.kuali.kfs.sys.businessobject.AccountingLine#setSalesTaxRequired(boolean) */ @Override public void setSalesTaxRequired(boolean salesTaxRequired) { this.salesTaxRequired = salesTaxRequired; } /** * @param documentNumber The documentNumber to set. */ @Override public void setDocumentNumber(String documentNumber) { this.documentNumber = documentNumber; } /** * This method retrieves the debit/credit code for the accounting line. This method will only return a not null value for a * Journal Voucher document. * * @return A String code. */ @Override public String getDebitCreditCode() { return debitCreditCode; } /** * This method sets the debit/credit code for the accounting line. This method should only be used for a Journal Voucher * document. * * @param debitCreditCode */ @Override public void setDebitCreditCode(String debitCreditCode) { this.debitCreditCode = debitCreditCode; } /** * This method retrieves the encumbrance update code for the accounting line. This method will only return a not null value for * a Journal Voucher document. * * @return A String code. */ @Override public String getEncumbranceUpdateCode() { return encumbranceUpdateCode; } /** * This method sets the debit/credit code for the accounting line. This method should only be used for a Journal Voucher * document. * * @param encumbranceUpdateCode */ @Override public void setEncumbranceUpdateCode(String encumbranceUpdateCode) { this.encumbranceUpdateCode = encumbranceUpdateCode; } /** * This method retrieves the ObjectType for the accounting line. This method will only return a not null value for a Journal * Voucher document. * * @return An ObjectType instance. */ @Override public ObjectType getObjectType() { if ( getObjectTypeCode() != null ) { return objectCode.getFinancialObjectType(); } return null; } /** * @return Returns the accountNumber. */ @Override public String getAccountNumber() { return accountNumber; } /** * @param accountNumber The accountNumber to set. */ @Override public void setAccountNumber(String accountNumber) { this.accountNumber = accountNumber; // if accounts can't cross charts, set chart code whenever account number is set SpringContext.getBean(AccountService.class).populateAccountingLineChartIfNeeded(this); } /** * @return Returns the balanceTypeCode. */ @Override public String getBalanceTypeCode() { return balanceTypeCode; } /** * @param balanceTypeCode The balanceTypeCode to set. */ @Override public void setBalanceTypeCode(String balanceTypeCode) { this.balanceTypeCode = balanceTypeCode; } /** * @return Returns the chartOfAccountsCode. */ @Override public String getChartOfAccountsCode() { return chartOfAccountsCode; } /** * @param chartOfAccountsCode The chartOfAccountsCode to set. */ @Override public void setChartOfAccountsCode(String chartOfAccountsCode) { this.chartOfAccountsCode = chartOfAccountsCode; } /** * @return Returns the financialObjectCode. */ @Override public String getFinancialObjectCode() { return financialObjectCode; } /** * @param financialObjectCode The financialObjectCode to set. */ @Override public void setFinancialObjectCode(String financialObjectCode) { this.financialObjectCode = financialObjectCode; } /** * @return Returns the financialSubObjectCode. */ @Override public String getFinancialSubObjectCode() { return financialSubObjectCode; } /** * @param financialSubObjectCode The financialSubObjectCode to set. */ @Override public void setFinancialSubObjectCode(String financialSubObjectCode) { this.financialSubObjectCode = financialSubObjectCode; } /** * @return Returns the objectTypeCode. */ @Override public String getObjectTypeCode() { if ( ObjectUtils.isNull(objectCode) || !StringUtils.equals(getFinancialObjectCode(), objectCode.getFinancialObjectCode()) || !StringUtils.equals(getChartOfAccountsCode(), objectCode.getChartOfAccountsCode()) || !getPostingYear().equals(objectCode.getUniversityFiscalYear() ) ) { refreshReferenceObject("objectCode"); } if (!ObjectUtils.isNull(objectCode)) { return objectCode.getFinancialObjectTypeCode(); } return null; } /** * @return Returns the financialDocumentLineTypeCode. */ @Override public String getFinancialDocumentLineTypeCode() { return financialDocumentLineTypeCode; } /** * @param financialDocumentLineTypeCode The financialDocumentLineTypeCode to set. */ @Override public void setFinancialDocumentLineTypeCode(String financialDocumentLineTypeCode) { this.financialDocumentLineTypeCode = financialDocumentLineTypeCode; } /** * @return Returns the project. */ @Override public ProjectCode getProject() { return project; } /** * @param project The project to set. * @deprecated */ @Deprecated @Override public void setProject(ProjectCode project) { this.project = project; } /** * @return Returns the subAccountNumber. */ @Override public String getSubAccountNumber() { return subAccountNumber; } /** * @param subAccountNumber The subAccountNumber to set. */ @Override public void setSubAccountNumber(String subAccountNumber) { this.subAccountNumber = subAccountNumber; } /** * @return Returns the financialDocumentLineDescription. */ @Override public String getFinancialDocumentLineDescription() { return financialDocumentLineDescription; } /** * @param financialDocumentLineDescription The financialDocumentLineDescription to set. */ @Override public void setFinancialDocumentLineDescription(String financialDocumentLineDescription) { this.financialDocumentLineDescription = financialDocumentLineDescription; } /** * @see org.kuali.rice.krad.bo.BusinessObjectBase#toStringMapper() */ protected LinkedHashMap toStringMapper_RICE20_REFACTORME() { LinkedHashMap m = new LinkedHashMap(); m.put(KFSPropertyConstants.DOCUMENT_NUMBER, documentNumber); m.put("sequenceNumber", sequenceNumber); m.put("postingYear", postingYear); m.put("amount", amount); m.put("debitCreditCode", debitCreditCode); m.put("encumbranceUpdateCode", encumbranceUpdateCode); m.put("financialDocumentLineDescription", financialDocumentLineDescription); m.put("chart", getChartOfAccountsCode()); m.put("account", getAccountNumber()); m.put("objectCode", getFinancialObjectCode()); m.put("subAccount", getSubAccountNumber()); m.put("subObjectCode", getFinancialSubObjectCode()); m.put("projectCode", getProjectCode()); m.put("balanceTyp", getBalanceTypeCode()); m.put("orgRefId", getOrganizationReferenceId()); return m; } /** * @see org.kuali.rice.krad.bo.AccountingLine#isSourceAccountingLine() */ @Override public boolean isSourceAccountingLine() { return (this instanceof SourceAccountingLine); } /** * @see org.kuali.rice.krad.bo.AccountingLine#isTargetAccountingLine() */ @Override public boolean isTargetAccountingLine() { return (this instanceof TargetAccountingLine); } /** * @see org.kuali.rice.krad.bo.AccountingLine#getAccountKey() */ @Override public String getAccountKey() { String key = getChartOfAccountsCode() + ":" + getAccountNumber(); return key; } /** * @see org.kuali.rice.krad.bo.AccountingLine#copyFrom(org.kuali.rice.krad.bo.AccountingLine) */ @Override public void copyFrom(AccountingLine other) { if (other == null) { throw new IllegalArgumentException("invalid (null) other"); } if (this != other) { // primitive fields setSequenceNumber(other.getSequenceNumber()); setDocumentNumber(other.getDocumentNumber()); setPostingYear(other.getPostingYear()); setAmount(other.getAmount()); setReferenceOriginCode(other.getReferenceOriginCode()); setReferenceNumber(other.getReferenceNumber()); setReferenceTypeCode(other.getReferenceTypeCode()); setOverrideCode(other.getOverrideCode()); setOrganizationReferenceId(other.getOrganizationReferenceId()); setDebitCreditCode(other.getDebitCreditCode()); setEncumbranceUpdateCode(other.getEncumbranceUpdateCode()); setFinancialDocumentLineTypeCode(other.getFinancialDocumentLineTypeCode()); setFinancialDocumentLineDescription(other.getFinancialDocumentLineDescription()); setAccountExpiredOverride(other.getAccountExpiredOverride()); setAccountExpiredOverrideNeeded(other.getAccountExpiredOverrideNeeded()); setObjectBudgetOverride(other.isObjectBudgetOverride()); setObjectBudgetOverrideNeeded(other.isObjectBudgetOverrideNeeded()); // foreign keys setChartOfAccountsCode(other.getChartOfAccountsCode()); setAccountNumber(other.getAccountNumber()); setFinancialObjectCode(other.getFinancialObjectCode()); setSubAccountNumber(other.getSubAccountNumber()); setFinancialSubObjectCode(other.getFinancialSubObjectCode()); setProjectCode(other.getProjectCode()); setBalanceTypeCode(other.getBalanceTypeCode()); // sales tax if (ObjectUtils.isNotNull(other.getSalesTax())) { SalesTax salesTax = getSalesTax(); SalesTax origSalesTax = other.getSalesTax(); if (salesTax != null) { salesTax.setAccountNumber(origSalesTax.getAccountNumber()); salesTax.setChartOfAccountsCode(origSalesTax.getChartOfAccountsCode()); salesTax.setFinancialDocumentGrossSalesAmount(origSalesTax.getFinancialDocumentGrossSalesAmount()); salesTax.setFinancialDocumentTaxableSalesAmount(origSalesTax.getFinancialDocumentTaxableSalesAmount()); salesTax.setFinancialDocumentSaleDate(origSalesTax.getFinancialDocumentSaleDate()); // primary keys salesTax.setDocumentNumber(other.getDocumentNumber()); salesTax.setFinancialDocumentLineNumber(other.getSequenceNumber()); salesTax.setFinancialDocumentLineTypeCode(other.getFinancialDocumentLineTypeCode()); } else { salesTax = origSalesTax; } } // object references setChart(other.getChart()); setAccount(other.getAccount()); setObjectCode(other.getObjectCode()); setSubAccount(other.getSubAccount()); setSubObjectCode(other.getSubObjectCode()); setProject(other.getProject()); setBalanceTyp(other.getBalanceTyp()); } } /** * @see org.kuali.rice.krad.bo.AccountingLine#isLike(org.kuali.rice.krad.bo.AccountingLine) */ @Override public boolean isLike(AccountingLine other) { boolean isLike = false; if (other != null) { if (other == this) { isLike = true; } else { Map thisValues = this.getValuesMap(); Map otherValues = other.getValuesMap(); isLike = thisValues.equals(otherValues); if (!isLike && LOG.isDebugEnabled()) { StringBuffer inequalities = new StringBuffer(); boolean first = true; for (Iterator i = thisValues.keySet().iterator(); i.hasNext();) { String key = (String) i.next(); Object thisValue = thisValues.get(key); Object otherValue = otherValues.get(key); if (!org.apache.commons.lang.ObjectUtils.equals(thisValue, otherValue)) { inequalities.append(key + "(" + thisValue + " != " + otherValue + ")"); if (first) { first = false; } else { inequalities.append(","); } } } if (LOG.isDebugEnabled()) { LOG.debug("inequalities: " + inequalities); } } } } return isLike; } /** * @see AccountingLine#getAccountExpiredOverride() */ @Override public boolean getAccountExpiredOverride() { return accountExpiredOverride; } /** * @see AccountingLine#setAccountExpiredOverride(boolean) */ @Override public void setAccountExpiredOverride(boolean b) { accountExpiredOverride = b; } /** * @see AccountingLine#getAccountExpiredOverrideNeeded() */ @Override public boolean getAccountExpiredOverrideNeeded() { return accountExpiredOverrideNeeded; } /** * @see AccountingLine#setAccountExpiredOverrideNeeded(boolean) */ @Override public void setAccountExpiredOverrideNeeded(boolean b) { accountExpiredOverrideNeeded = b; } /** * @return Returns the objectBudgetOverride. */ @Override public boolean isObjectBudgetOverride() { return objectBudgetOverride; } /** * @param objectBudgetOverride The objectBudgetOverride to set. */ @Override public void setObjectBudgetOverride(boolean objectBudgetOverride) { this.objectBudgetOverride = objectBudgetOverride; } /** * @return Returns the objectBudgetOverrideNeeded. */ @Override public boolean isObjectBudgetOverrideNeeded() { return objectBudgetOverrideNeeded; } /** * @param objectBudgetOverrideNeeded The objectBudgetOverrideNeeded to set. */ @Override public void setObjectBudgetOverrideNeeded(boolean objectBudgetOverrideNeeded) { this.objectBudgetOverrideNeeded = objectBudgetOverrideNeeded; } /** * @see org.kuali.kfs.sys.businessobject.AccountingLine#isNonFringeAccountOverride() */ @Override public boolean getNonFringeAccountOverride() { return nonFringeAccountOverride; } /** * @see org.kuali.kfs.sys.businessobject.AccountingLine#setNonFringeAccountOverride(boolean) */ @Override public void setNonFringeAccountOverride(boolean nonFringeAccountOverride) { this.nonFringeAccountOverride = nonFringeAccountOverride; } /** * @see org.kuali.kfs.sys.businessobject.AccountingLine#isNonFringeAccountOverrideNeeded() */ @Override public boolean getNonFringeAccountOverrideNeeded() { return nonFringeAccountOverrideNeeded; } /** * @see org.kuali.kfs.sys.businessobject.AccountingLine#setNonFringeAccountOverrideNeeded(boolean) */ @Override public void setNonFringeAccountOverrideNeeded(boolean nonFringeAccountOverrideNeeded) { this.nonFringeAccountOverrideNeeded = nonFringeAccountOverrideNeeded; } /** * Returns a map with the primitive field names as the key and the primitive values as the map value. * * @return Map */ @Override public Map getValuesMap() { Map simpleValues = new HashMap(); simpleValues.put("sequenceNumber", getSequenceNumber()); simpleValues.put(KFSPropertyConstants.DOCUMENT_NUMBER, getDocumentNumber()); simpleValues.put("postingYear", getPostingYear()); simpleValues.put("amount", getAmount()); simpleValues.put("referenceOriginCode", getReferenceOriginCode()); simpleValues.put("referenceNumber", getReferenceNumber()); simpleValues.put("referenceTypeCode", getReferenceTypeCode()); // The override booleans are not in the map because they should not cause isLike() to fail and generate update events. simpleValues.put("organizationReferenceId", getOrganizationReferenceId()); simpleValues.put("debitCreditCode", getDebitCreditCode()); simpleValues.put("encumbranceUpdateCode", getEncumbranceUpdateCode()); simpleValues.put("financialDocumentLineTypeCode", getFinancialDocumentLineTypeCode()); simpleValues.put("financialDocumentLineDescription", getFinancialDocumentLineDescription()); simpleValues.put("chartOfAccountsCode", getChartOfAccountsCode()); simpleValues.put("accountNumber", getAccountNumber()); simpleValues.put("financialObjectCode", getFinancialObjectCode()); simpleValues.put("subAccountNumber", getSubAccountNumber()); simpleValues.put("financialSubObjectCode", getFinancialSubObjectCode()); simpleValues.put("projectCode", getProjectCode()); simpleValues.put("balanceTypeCode", getBalanceTypeCode()); simpleValues.put("objectTypeCode", getObjectTypeCode()); return simpleValues; } /** * Override needed for PURAP GL entry creation (hjs) - please do not add "amount" to this method * * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (!(obj instanceof AccountingLine)) { return false; } AccountingLine accountingLine = (AccountingLine) obj; 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(); } /** * Override needed for PURAP GL entry creation (hjs) - please do not add "amount" to this method * * @see java.lang.Object#hashCode() */ @Override public int hashCode() { 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(); } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("AccountingLineBase ["); if (documentNumber != null) builder.append("documentNumber=").append(documentNumber).append(", "); if (sequenceNumber != null) builder.append("sequenceNumber=").append(sequenceNumber).append(", "); if (postingYear != null) builder.append("postingYear=").append(postingYear).append(", "); if (amount != null) builder.append("amount=").append(amount).append(", "); if (debitCreditCode != null) builder.append("debitCreditCode=").append(debitCreditCode).append(", "); if (chartOfAccountsCode != null) builder.append("chartOfAccountsCode=").append(chartOfAccountsCode).append(", "); if (accountNumber != null) builder.append("accountNumber=").append(accountNumber).append(", "); if (subAccountNumber != null) builder.append("subAccountNumber=").append(subAccountNumber).append(", "); if (financialObjectCode != null) builder.append("financialObjectCode=").append(financialObjectCode).append(", "); if (financialSubObjectCode != null) builder.append("financialSubObjectCode=").append(financialSubObjectCode).append(", "); if (projectCode != null) builder.append("projectCode=").append(projectCode).append(", "); if (balanceTypeCode != null) builder.append("balanceTypeCode=").append(balanceTypeCode); builder.append("]"); return builder.toString(); } }