org.kuali.kfs.sys.businessobject.AccountingLineBase.java Source code

Java tutorial

Introduction

Here is the source code for org.kuali.kfs.sys.businessobject.AccountingLineBase.java

Source

/*
 * 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();
    }

}