/* * 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 org.kuali.kfs.coa.businessobject.Account; import org.kuali.kfs.coa.businessobject.BalanceType; import org.kuali.kfs.coa.businessobject.ObjectCode; import org.kuali.kfs.coa.businessobject.ObjectType; import org.kuali.kfs.gl.businessobject.Transaction; import org.kuali.kfs.sys.KFSConstants; import org.kuali.rice.core.api.util.type.KualiDecimal; /** * Represents a sufficient fund item which is used to show if a document has sufficient funds */ public class SufficientFundsItem implements Serializable, Comparable { private SystemOptions year; private Account account; private ObjectCode financialObject; private ObjectType financialObjectType; private String sufficientFundsObjectCode; private KualiDecimal amount; private String documentTypeCode; private BalanceType balanceTyp; public BalanceType getBalanceTyp() { return balanceTyp; } public void setBalanceTyp(BalanceType balanceTyp) { this.balanceTyp = balanceTyp; } public SufficientFundsItem() { amount = KualiDecimal.ZERO; } /** * Constructs a SufficientFundsItem.java. * @param universityFiscalYear * @param tran * @param sufficientFundsObjectCode */ public SufficientFundsItem(SystemOptions universityFiscalYear, Transaction tran, String sufficientFundsObjectCode) { amount = KualiDecimal.ZERO; year = universityFiscalYear; account = tran.getAccount(); financialObject = tran.getFinancialObject(); financialObjectType = tran.getObjectType(); this.sufficientFundsObjectCode = sufficientFundsObjectCode; this.balanceTyp = tran.getBalanceType(); add(tran); } /** * Constructs a SufficientFundsItem.java. * @param universityFiscalYear * @param accountLine * @param sufficientFundsObjectCode */ public SufficientFundsItem(SystemOptions universityFiscalYear, AccountingLine accountLine, String sufficientFundsObjectCode) { amount = KualiDecimal.ZERO; year = universityFiscalYear; account = accountLine.getAccount(); financialObject = accountLine.getObjectCode(); financialObjectType = accountLine.getObjectType(); this.sufficientFundsObjectCode = sufficientFundsObjectCode; this.balanceTyp = accountLine.getBalanceTyp(); add(accountLine); } /** * Adds an accounting line's amount to this sufficient funds item * @param a accounting line */ public void add(AccountingLine a) { if (a.getObjectType().getFinObjectTypeDebitcreditCd().equals(a.getDebitCreditCode()) || KFSConstants.EMPTY_STRING.equals(a.getDebitCreditCode())) { amount = amount.add(a.getAmount()); } else { amount = amount.subtract(a.getAmount()); } } /** * Adds a transactions amount to this sufficient funds item * @param t transactions */ public void add(Transaction t) { if (t.getObjectType().getFinObjectTypeDebitcreditCd().equals(t.getTransactionDebitCreditCode()) || KFSConstants.EMPTY_STRING.equals(t.getTransactionDebitCreditCode())) { amount = amount.add(t.getTransactionLedgerEntryAmount()); } else { amount = amount.subtract(t.getTransactionLedgerEntryAmount()); } } /** * Compare to other sufficient funds item based on key * * @see java.lang.Comparable#compareTo(java.lang.Object) */ public int compareTo(Object arg0) { SufficientFundsItem item = (SufficientFundsItem) arg0; return getKey().compareTo(item.getKey()); } /** * Returns string to uniquely represent this sufficient funds item * * @return string with the following concatenated: fiscal year, chart of accounts code, account number, financial object type code, sufficient funds object code and balance type code */ public String getKey() { return year.getUniversityFiscalYear() + account.getChartOfAccountsCode() + account.getAccountNumber() + financialObjectType.getCode() + sufficientFundsObjectCode + balanceTyp.getCode(); } public String getDocumentTypeCode() { return documentTypeCode; } public void setDocumentTypeCode(String documentTypeCode) { this.documentTypeCode = documentTypeCode; } public String getAccountSufficientFundsCode() { return account.getAccountSufficientFundsCode(); } public ObjectType getFinancialObjectType() { return financialObjectType; } public void setFinancialObjectType(ObjectType financialObjectType) { this.financialObjectType = financialObjectType; } @Override public String toString() { return year.getUniversityFiscalYear() + "-" + account.getChartOfAccountsCode() + "-" + account.getAccountNumber() + "-" + financialObject.getFinancialObjectCode() + "-" + account.getAccountSufficientFundsCode() + "-" + sufficientFundsObjectCode + "-" + amount.toString(); } public Account getAccount() { return account; } public void setAccount(Account account) { this.account = account; } public KualiDecimal getAmount() { return amount; } public void setAmount(KualiDecimal amount) { this.amount = amount; } public ObjectCode getFinancialObject() { return financialObject; } public void setFinancialObject(ObjectCode financialObject) { this.financialObject = financialObject; } public String getSufficientFundsObjectCode() { return sufficientFundsObjectCode; } public void setSufficientFundsObjectCode(String sufficientFundsObjectCode) { this.sufficientFundsObjectCode = sufficientFundsObjectCode; } public SystemOptions getYear() { return year; } public void setYear(SystemOptions year) { this.year = year; } }