/*
* 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.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.LinkedHashMap;
import org.kuali.kfs.coa.businessobject.Account;
import org.kuali.kfs.coa.businessobject.Chart;
import org.kuali.kfs.coa.businessobject.ObjectCode;
import org.kuali.kfs.gl.GeneralLedgerConstants;
import org.kuali.kfs.sys.KFSPropertyConstants;
import org.kuali.rice.core.api.util.type.KualiDecimal;
import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
/**
* This class represents sufficient fund balances
*/
public class SufficientFundBalances extends PersistableBusinessObjectBase {
private Integer universityFiscalYear;
private String chartOfAccountsCode;
private String accountNumber;
private String financialObjectCode;
private String accountSufficientFundsCode;
private KualiDecimal currentBudgetBalanceAmount;
private KualiDecimal accountActualExpenditureAmt;
private KualiDecimal accountEncumbranceAmount;
private Date transactionDateTimeStamp;
private ObjectCode objectCode;
private Chart chart;
private Account account;
public static final String BLANKS = " ";
public static final String DATE_FORMAT_STRING = "yyyy-MM-dd";
/**
* Default constructor.
*/
public SufficientFundBalances() {
}
/**
* Constructs a SufficientFundBalances.java.
* @param line
*/
public SufficientFundBalances(String line) {
setFromTextFile(line);
}
/**
* This method sets this object's attributes from the passed in line
*
* @param line with sufficient fund balance related attributes
*/
public void setFromTextFile(String line) {
// Just in case
line = line + " ";
if (!GeneralLedgerConstants.getSpaceUniversityFiscalYear().equals(line.substring(0, 4))) {
setUniversityFiscalYear(new Integer(line.substring(0, 4)));
}
else {
setUniversityFiscalYear(null);
}
setChartOfAccountsCode(line.substring(4, 6).trim());
setAccountNumber(line.substring(6, 13).trim());
setFinancialObjectCode(line.substring(13, 17).trim());
setAccountSufficientFundsCode(line.substring(17, 24).trim());
setCurrentBudgetBalanceAmount(new KualiDecimal(line.substring(24, 41).trim()));
setAccountActualExpenditureAmt(new KualiDecimal(line.substring(41, 58).trim()));
setAccountEncumbranceAmount(new KualiDecimal(line.substring(58, 75).trim()));
setTransactionDateTimeStamp(parseDate(line.substring(75, 85), true));
}
/**
* This method returns a string representing this sufficient fund balance object and its attributes
*
* @return String representing this sufficient fund balance object and its attributes
*/
public String getLine() {
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
nf.setMinimumFractionDigits(0);
nf.setMinimumIntegerDigits(1);
nf.setGroupingUsed(false);
StringBuffer sb = new StringBuffer();
if (universityFiscalYear == null) {
sb.append(GeneralLedgerConstants.getSpaceUniversityFiscalYear());
}
else {
sb.append(universityFiscalYear);
}
sb.append(getField(2, chartOfAccountsCode));
sb.append(getField(7, accountNumber));
sb.append(getField(4, financialObjectCode));
sb.append(getField(1, accountSufficientFundsCode));
if (currentBudgetBalanceAmount == null) {
sb.append(BLANKS);
}
else {
String a = nf.format(currentBudgetBalanceAmount.doubleValue());
sb.append(BLANKS.substring(0, 17 - a.length()));
sb.append(a);
}
if (accountActualExpenditureAmt == null) {
sb.append(BLANKS);
}
else {
String a = nf.format(accountActualExpenditureAmt.doubleValue());
sb.append(BLANKS.substring(0, 17 - a.length()));
sb.append(a);
}
if (accountEncumbranceAmount == null) {
sb.append(BLANKS);
}
else {
String a = nf.format(accountEncumbranceAmount.doubleValue());
sb.append(BLANKS.substring(0, 17 - a.length()));
sb.append(a);
}
return sb.toString();
}
private static String SPACES = " ";
/**
* Returns value passed in with additional spaces if need be
*
* @param size
* @param value
* @return
*/
private String getField(int size, String value) {
if (value == null) {
return SPACES.substring(0, size);
}
else {
if (value.length() < size) {
return value + SPACES.substring(0, size - value.length());
}
else {
return value;
}
}
}
/**
* This method parses a date as yyyy-MM-dd
*
* @param sdate
* @param beLenientWithDates
* @return
*/
private java.sql.Date parseDate(String sdate, boolean beLenientWithDates) {
if ((sdate == null) || (sdate.trim().length() == 0)) {
return null;
}
else {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_STRING);
sdf.setLenient(beLenientWithDates);
try {
java.util.Date d = sdf.parse(sdate);
return new Date(d.getTime());
}
catch (ParseException e) {
return null;
}
}
}
/**
* This method returns a string representation of date as yyyy-MM-dd
*
* @param date
* @return
*/
private String formatDate(Date date) {
if (date == null) {
return " ";
}
else {
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_STRING);
return sdf.format(date);
}
}
/**
* Gets the universityFiscalYear attribute.
*
* @return Returns the universityFiscalYear
*/
public Integer getUniversityFiscalYear() {
return universityFiscalYear;
}
/**
* Sets the universityFiscalYear attribute.
*
* @param universityFiscalYear The universityFiscalYear to set.
*/
public void setUniversityFiscalYear(Integer universityFiscalYear) {
this.universityFiscalYear = universityFiscalYear;
}
/**
* Gets the chartOfAccountsCode attribute.
*
* @return Returns the chartOfAccountsCode
*/
public String getChartOfAccountsCode() {
return chartOfAccountsCode;
}
/**
* Sets the chartOfAccountsCode attribute.
*
* @param chartOfAccountsCode The chartOfAccountsCode to set.
*/
public void setChartOfAccountsCode(String chartOfAccountsCode) {
this.chartOfAccountsCode = chartOfAccountsCode;
}
/**
* Gets the accountNumber attribute.
*
* @return Returns the accountNumber
*/
public String getAccountNumber() {
return accountNumber;
}
/**
* Sets the accountNumber attribute.
*
* @param accountNumber The accountNumber to set.
*/
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber;
}
/**
* Gets the financialObjectCode attribute.
*
* @return Returns the financialObjectCode
*/
public String getFinancialObjectCode() {
return financialObjectCode;
}
/**
* Sets the financialObjectCode attribute.
*
* @param financialObjectCode The financialObjectCode to set.
*/
public void setFinancialObjectCode(String financialObjectCode) {
this.financialObjectCode = financialObjectCode;
}
/**
* Gets the accountSufficientFundsCode attribute.
*
* @return Returns the accountSufficientFundsCode
*/
public String getAccountSufficientFundsCode() {
return accountSufficientFundsCode;
}
/**
* Sets the accountSufficientFundsCode attribute.
*
* @param accountSufficientFundsCode The accountSufficientFundsCode to set.
*/
public void setAccountSufficientFundsCode(String accountSufficientFundsCode) {
this.accountSufficientFundsCode = accountSufficientFundsCode;
}
/**
* Gets the currentBudgetBalanceAmount attribute.
*
* @return Returns the currentBudgetBalanceAmount
*/
public KualiDecimal getCurrentBudgetBalanceAmount() {
return currentBudgetBalanceAmount;
}
/**
* Sets the currentBudgetBalanceAmount attribute.
*
* @param currentBudgetBalanceAmount The currentBudgetBalanceAmount to set.
*/
public void setCurrentBudgetBalanceAmount(KualiDecimal currentBudgetBalanceAmount) {
this.currentBudgetBalanceAmount = currentBudgetBalanceAmount;
}
/**
* Gets the accountActualExpenditureAmt attribute.
*
* @return Returns the accountActualExpenditureAmt
*/
public KualiDecimal getAccountActualExpenditureAmt() {
return accountActualExpenditureAmt;
}
/**
* Sets the accountActualExpenditureAmt attribute.
*
* @param accountActualExpenditureAmt The accountActualExpenditureAmt to set.
*/
public void setAccountActualExpenditureAmt(KualiDecimal accountActualExpenditureAmt) {
this.accountActualExpenditureAmt = accountActualExpenditureAmt;
}
/**
* Gets the accountEncumbranceAmount attribute.
*
* @return Returns the accountEncumbranceAmount
*/
public KualiDecimal getAccountEncumbranceAmount() {
return accountEncumbranceAmount;
}
/**
* Sets the accountEncumbranceAmount attribute.
*
* @param accountEncumbranceAmount The accountEncumbranceAmount to set.
*/
public void setAccountEncumbranceAmount(KualiDecimal accountEncumbranceAmount) {
this.accountEncumbranceAmount = accountEncumbranceAmount;
}
/**
* Gets the transactionDateTimeStamp attribute.
*
* @return Returns the transactionDateTimeStamp
*/
public Date getTransactionDateTimeStamp() {
return transactionDateTimeStamp;
}
/**
* Sets the transactionDateTimeStamp attribute.
*
* @param transactionDateTimeStamp The transactionDateTimeStamp to set.
*/
public void setTransactionDateTimeStamp(Date transactionDateTimeStamp) {
this.transactionDateTimeStamp = transactionDateTimeStamp;
}
/**
* Gets the objectCode attribute.
*
* @return Returns the objectCode
*/
public ObjectCode getObjectCode() {
return objectCode;
}
/**
* Sets the objectCode attribute.
*
* @param objectCode The objectCode to set.
* @deprecated
*/
public void setObjectCode(ObjectCode objectCode) {
this.objectCode = objectCode;
}
/**
* Gets the chart attribute.
*
* @return Returns the chart
*/
public Chart getChart() {
return chart;
}
/**
* Sets the chart attribute.
*
* @param chart The chart to set.
* @deprecated
*/
public void setChart(Chart chart) {
this.chart = chart;
}
/**
* Gets the account attribute.
*
* @return Returns the account
*/
public Account getAccount() {
return account;
}
/**
* Sets the account attribute.
*
* @param account The account to set.
* @deprecated
*/
public void setAccount(Account account) {
this.account = account;
}
/**
* @see org.kuali.rice.krad.bo.BusinessObjectBase#toStringMapper()
*/
protected LinkedHashMap toStringMapper_RICE20_REFACTORME() {
LinkedHashMap m = new LinkedHashMap();
m.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, this.universityFiscalYear.toString());
m.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, this.chartOfAccountsCode);
m.put(KFSPropertyConstants.ACCOUNT_NUMBER, this.accountNumber);
m.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, this.financialObjectCode);
return m;
}
}