/*
* 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.gl.businessobject;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.LinkedHashMap;
import org.apache.commons.lang.StringUtils;
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.SubAccount;
import org.kuali.kfs.coa.businessobject.SubObjectCode;
import org.kuali.kfs.sys.KFSPropertyConstants;
import org.kuali.kfs.sys.businessobject.OriginationCode;
import org.kuali.kfs.sys.businessobject.SystemOptions;
import org.kuali.kfs.sys.context.SpringContext;
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;
/**
* Represents the encumbrance amount for a specific university fiscal year,
* chart of accounts code, account number, sub account number, object code,
* sub object code, balance type code, document type code, origin code, and document number.
* This encumbrance object contains amounts for actual enumbrance amount, closed amount,
* outstanding amount
*
*/
public class Encumbrance extends PersistableBusinessObjectBase {
static final long serialVersionUID = -7494473472438516396L;
private Integer universityFiscalYear;
private String chartOfAccountsCode;
private String accountNumber;
private String subAccountNumber;
private String objectCode;
private String subObjectCode;
private String balanceTypeCode;
private String documentTypeCode;
private String originCode;
private String documentNumber;
private String transactionEncumbranceDescription;
private Date transactionEncumbranceDate;
private KualiDecimal accountLineEncumbranceAmount;
private KualiDecimal accountLineEncumbranceClosedAmount;
private KualiDecimal accountLineEncumbranceOutstandingAmount;
private String accountLineEncumbrancePurgeCode;
private Timestamp timestamp;
private SubAccount subAccount;
private Chart chart;
private Account account;
private SubObjectCode financialSubObject;
private DocumentTypeEBO financialSystemDocumentTypeCode;
private ObjectCode financialObject;
private BalanceType balanceType;
private OriginationCode originationCode;
private SystemOptions option;
private TransientBalanceInquiryAttributes dummyBusinessObject;
public Encumbrance() {
}
public Encumbrance(Transaction t) {
universityFiscalYear = t.getUniversityFiscalYear();
chartOfAccountsCode = t.getChartOfAccountsCode();
accountNumber = t.getAccountNumber();
subAccountNumber = t.getSubAccountNumber();
objectCode = t.getFinancialObjectCode();
subObjectCode = t.getFinancialSubObjectCode();
balanceTypeCode = t.getFinancialBalanceTypeCode();
documentTypeCode = t.getFinancialDocumentTypeCode();
originCode = t.getFinancialSystemOriginationCode();
documentNumber = t.getDocumentNumber();
transactionEncumbranceDescription = t.getTransactionLedgerEntryDescription();
transactionEncumbranceDate = t.getTransactionDate();
accountLineEncumbranceAmount = KualiDecimal.ZERO;
accountLineEncumbranceClosedAmount = KualiDecimal.ZERO;
accountLineEncumbrancePurgeCode = " ";
this.dummyBusinessObject = new TransientBalanceInquiryAttributes();
}
/**
* Constructs a AccountBalance.java per the primary keys only of the passed in accountBalanceHistory
* @param accountBalanceHistory
*/
public Encumbrance(EncumbranceHistory encumbranceHistory) {
universityFiscalYear = encumbranceHistory.getUniversityFiscalYear();
chartOfAccountsCode = encumbranceHistory.getChartOfAccountsCode();
accountNumber = encumbranceHistory.getAccountNumber();
subAccountNumber = encumbranceHistory.getSubAccountNumber();
objectCode = encumbranceHistory.getObjectCode();
subObjectCode = encumbranceHistory.getSubObjectCode();
balanceTypeCode = encumbranceHistory.getBalanceTypeCode();
documentTypeCode = encumbranceHistory.getDocumentTypeCode();
originCode = encumbranceHistory.getOriginCode();
documentNumber = encumbranceHistory.getDocumentNumber();
}
protected LinkedHashMap toStringMapper_RICE20_REFACTORME() {
LinkedHashMap map = new LinkedHashMap();
map.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, getUniversityFiscalYear());
map.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, getChartOfAccountsCode());
map.put(KFSPropertyConstants.ACCOUNT_NUMBER, getAccountNumber());
map.put(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, getSubAccountNumber());
map.put(KFSPropertyConstants.OBJECT_CODE, getObjectCode());
map.put(KFSPropertyConstants.SUB_OBJECT_CODE, getSubObjectCode());
map.put(KFSPropertyConstants.BALANCE_TYPE_CODE, getBalanceTypeCode());
map.put(KFSPropertyConstants.ENCUMBRANCE_DOCUMENT_TYPE_CODE, getDocumentTypeCode());
map.put(KFSPropertyConstants.ORIGIN_CODE, getOriginCode());
map.put(KFSPropertyConstants.DOCUMENT_NUMBER, getDocumentNumber());
map.put(KFSPropertyConstants.ACCOUNT_LINE_ENCUMBRANCE_AMOUNT, getAccountLineEncumbranceAmount());
map.put(KFSPropertyConstants.ACCOUNT_LINE_ENCUMBRANCE_CLOSED_AMOUNT, getAccountLineEncumbranceClosedAmount());
return map;
}
public OriginationCode getOriginationCode() {
return originationCode;
}
public void setOriginationCode(OriginationCode originationCode) {
this.originationCode = originationCode;
}
/**
* @return Returns the accountLineEncumbranceAmount.
*/
public KualiDecimal getAccountLineEncumbranceAmount() {
return accountLineEncumbranceAmount;
}
/**
* @param accountLineEncumbranceAmount The accountLineEncumbranceAmount to set.
*/
public void setAccountLineEncumbranceAmount(KualiDecimal accountLineEncumbranceAmount) {
this.accountLineEncumbranceAmount = accountLineEncumbranceAmount;
}
/**
* @return Returns the accountLineEncumbranceClearedAmount.
*/
public KualiDecimal getAccountLineEncumbranceClosedAmount() {
return accountLineEncumbranceClosedAmount;
}
public void setAccountLineEncumbranceOutstandingAmount() {
}
public KualiDecimal getAccountLineEncumbranceOutstandingAmount() {
return accountLineEncumbranceAmount.subtract(accountLineEncumbranceClosedAmount);
}
/**
* @param accountLineEncumbranceClearedAmount The accountLineEncumbranceClearedAmount to set.
*/
public void setAccountLineEncumbranceClosedAmount(KualiDecimal accountLineEncumbranceClosedAmount) {
this.accountLineEncumbranceClosedAmount = accountLineEncumbranceClosedAmount;
}
/**
* @return Returns the accountLineEncumbrancePrg.
*/
public String getAccountLineEncumbrancePurgeCode() {
return accountLineEncumbrancePurgeCode;
}
/**
* @param accountLineEncumbrancePrg The accountLineEncumbrancePrg to set.
*/
public void setAccountLineEncumbrancePurgeCode(String accountLineEncumbrancePurgeCode) {
this.accountLineEncumbrancePurgeCode = accountLineEncumbrancePurgeCode;
}
/**
* @return Returns the accountNumber.
*/
public String getAccountNumber() {
return accountNumber;
}
/**
* @param accountNumber The accountNumber to set.
*/
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
/**
* @return Returns the balanceTypeCode.
*/
public String getBalanceTypeCode() {
return balanceTypeCode;
}
/**
* @param balanceTypeCode The balanceTypeCode to set.
*/
public void setBalanceTypeCode(String balanceTypeCode) {
this.balanceTypeCode = balanceTypeCode;
}
/**
* @return Returns the chartOfAccountsCode.
*/
public String getChartOfAccountsCode() {
return chartOfAccountsCode;
}
/**
* @param chartOfAccountsCode The chartOfAccountsCode to set.
*/
public void setChartOfAccountsCode(String chartOfAccountsCode) {
this.chartOfAccountsCode = chartOfAccountsCode;
}
/**
* @return Returns the documentNumber.
*/
public String getDocumentNumber() {
return documentNumber;
}
/**
* @param documentNumber The documentNumber to set.
*/
public void setDocumentNumber(String documentNumber) {
this.documentNumber = documentNumber;
}
/**
* @return Returns the documentTypeCode.
*/
public String getDocumentTypeCode() {
return documentTypeCode;
}
/**
* @param documentTypeCode The documentTypeCode to set.
*/
public void setDocumentTypeCode(String documentTypeCode) {
this.documentTypeCode = documentTypeCode;
}
/**
* @return Returns the objectCode.
*/
public String getObjectCode() {
return objectCode;
}
/**
* @param objectCode The objectCode to set.
*/
public void setObjectCode(String objectCode) {
this.objectCode = objectCode;
}
/**
* @return Returns the originCode.
*/
public String getOriginCode() {
return originCode;
}
/**
* @param originCode The originCode to set.
*/
public void setOriginCode(String originCode) {
this.originCode = originCode;
}
/**
* @return Returns the subAccountNumber.
*/
public String getSubAccountNumber() {
return subAccountNumber;
}
/**
* @param subAccountNumber The subAccountNumber to set.
*/
public void setSubAccountNumber(String subAccountNumber) {
this.subAccountNumber = subAccountNumber;
}
/**
* @return Returns the subObjectCode.
*/
public String getSubObjectCode() {
return subObjectCode;
}
/**
* @param subObjectCode The subObjectCode to set.
*/
public void setSubObjectCode(String subObjectCode) {
this.subObjectCode = subObjectCode;
}
/**
* @return Returns the timestamp.
*/
public Timestamp getTimestamp() {
return timestamp;
}
/**
* @param timestamp The timestamp to set.
*/
public void setTimestamp(Timestamp timestamp) {
this.timestamp = timestamp;
}
/**
* @return Returns the transactionEncumbranceDate.
*/
public Date getTransactionEncumbranceDate() {
return transactionEncumbranceDate;
}
/**
* @param transactionEncumbranceDate The transactionEncumbranceDate to set.
*/
public void setTransactionEncumbranceDate(Date transactionEncumbranceDate) {
this.transactionEncumbranceDate = transactionEncumbranceDate;
}
/**
* @return Returns the transactionEncumbranceDescription.
*/
public String getTransactionEncumbranceDescription() {
return transactionEncumbranceDescription;
}
/**
* @param transactionEncumbranceDescription The transactionEncumbranceDescription to set.
*/
public void setTransactionEncumbranceDescription(String transactionEncumbranceDescription) {
this.transactionEncumbranceDescription = transactionEncumbranceDescription;
}
/**
* @return Returns the universityFiscalYear.
*/
public Integer getUniversityFiscalYear() {
return universityFiscalYear;
}
/**
* @param universityFiscalYear The universityFiscalYear to set.
*/
public void setUniversityFiscalYear(Integer universityFiscalYear) {
this.universityFiscalYear = universityFiscalYear;
}
/**
* Gets the account attribute.
*
* @return Returns the account.
*/
public Account getAccount() {
return account;
}
/**
* Sets the account attribute value.
*
* @param account The account to set.
*/
public void setAccount(Account account) {
this.account = account;
}
/**
* Gets the chart attribute.
*
* @return Returns the chart.
*/
public Chart getChart() {
return chart;
}
/**
* Sets the chart attribute value.
*
* @param chart The chart to set.
*/
public void setChart(Chart chart) {
this.chart = chart;
}
/**
* Gets the financialObject attribute.
*
* @return Returns the financialObject.
*/
public ObjectCode getFinancialObject() {
return financialObject;
}
/**
* Sets the financialObject attribute value.
*
* @param financialObject The financialObject to set.
*/
public void setFinancialObject(ObjectCode financialObject) {
this.financialObject = financialObject;
}
/**
* Gets the balanceType attribute.
*
* @return Returns the balanceType.
*/
public BalanceType getBalanceType() {
return balanceType;
}
/**
* Sets the balanceType attribute value.
*
* @param balanceType The balanceType to set.
*/
public void setBalanceType(BalanceType balanceType) {
this.balanceType = balanceType;
}
/**
* Gets the dummyBusinessObject attribute.
*
* @return Returns the dummyBusinessObject.
*/
public TransientBalanceInquiryAttributes getDummyBusinessObject() {
return dummyBusinessObject;
}
/**
* Sets the dummyBusinessObject attribute value.
*
* @param dummyBusinessObject The dummyBusinessObject to set.
*/
public void setDummyBusinessObject(TransientBalanceInquiryAttributes dummyBusinessObject) {
this.dummyBusinessObject = dummyBusinessObject;
}
/**
* Gets the option attribute.
*
* @return Returns the option.
*/
public SystemOptions getOption() {
return option;
}
/**
* Sets the option attribute value.
*
* @param option The option to set.
*/
public void setOption(SystemOptions option) {
this.option = option;
}
/**
* Gets the subAccount attribute.
*
* @return Returns the subAccount.
*/
public SubAccount getSubAccount() {
return subAccount;
}
/**
* Sets the subAccount attribute value.
*
* @param subAccount The subAccount to set.
*/
public void setSubAccount(SubAccount subAccount) {
this.subAccount = subAccount;
}
/**
* Gets the financialSystemDocumentTypeCode attribute.
* @return Returns the financialSystemDocumentTypeCode.
*/
public DocumentTypeEBO getFinancialSystemDocumentTypeCode() {
if ( StringUtils.isBlank( documentTypeCode ) ) {
financialSystemDocumentTypeCode = null;
} else {
if ( financialSystemDocumentTypeCode == null || !StringUtils.equals(documentTypeCode, financialSystemDocumentTypeCode.getName() ) ) {
org.kuali.rice.kew.api.doctype.DocumentType temp = SpringContext.getBean(DocumentTypeService.class).getDocumentTypeByName(documentTypeCode);
if ( temp != null ) {
financialSystemDocumentTypeCode = DocumentType.from( temp );
} else {
financialSystemDocumentTypeCode = null;
}
}
}
return financialSystemDocumentTypeCode;
}
/**
* Gets the financialSubObject attribute.
*
* @return Returns the financialSubObject.
*/
public SubObjectCode getFinancialSubObject() {
return financialSubObject;
}
/**
* Sets the financialSubObject attribute value.
*
* @param financialSubObject The financialSubObject to set.
*/
public void setFinancialSubObject(SubObjectCode financialSubObject) {
this.financialSubObject = financialSubObject;
}
}