/* * 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.module.ld.businessobject; import java.sql.Timestamp; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import org.apache.commons.lang.StringUtils; import org.kuali.kfs.coa.businessobject.Chart; import org.kuali.kfs.coa.businessobject.ObjectType; import org.kuali.kfs.gl.businessobject.Balance; import org.kuali.kfs.integration.ld.LaborLedgerBalance; import org.kuali.kfs.integration.ld.LaborLedgerObject; import org.kuali.kfs.sys.KFSConstants; import org.kuali.kfs.sys.KFSPropertyConstants; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.kim.api.identity.Person; import org.kuali.rice.kim.api.identity.PersonService; /** * Labor business object for LedgerBalance. */ public class LedgerBalance extends Balance implements LaborLedgerBalance{ private String financialObjectCode; private String financialSubObjectCode; private String financialBalanceTypeCode; private String financialObjectTypeCode; private String positionNumber; private String emplid; private KualiDecimal financialBeginningBalanceLineAmount; private Timestamp transactionDateTimeStamp; private String financialObjectFringeOrSalaryCode; private Chart chartOfAccounts; private ObjectType financialObjectType; private Person ledgerPerson; private LaborObject laborObject; /** * Default constructor. */ public LedgerBalance() { super(); this.setAccountLineAnnualBalanceAmount(KualiDecimal.ZERO); this.setFinancialBeginningBalanceLineAmount(KualiDecimal.ZERO); super.setBeginningBalanceLineAmount(KualiDecimal.ZERO); this.setContractsGrantsBeginningBalanceAmount(KualiDecimal.ZERO); } /** * Constructs a LedgerBalance.java. * * @param transaction */ public LedgerBalance(LaborTransaction transaction) { this(); this.setChartOfAccountsCode(transaction.getChartOfAccountsCode()); this.setAccountNumber(transaction.getAccountNumber()); this.setFinancialBalanceTypeCode(transaction.getFinancialBalanceTypeCode()); this.setEmplid(transaction.getEmplid()); this.setFinancialObjectCode(transaction.getFinancialObjectCode()); this.setFinancialObjectTypeCode(transaction.getFinancialObjectTypeCode()); this.setFinancialSubObjectCode(transaction.getFinancialSubObjectCode()); this.setPositionNumber(transaction.getPositionNumber()); this.setUniversityFiscalYear(transaction.getUniversityFiscalYear()); this.setSubAccountNumber(transaction.getSubAccountNumber()); } /** * Constructs a LedgerBalance.java. * * @param transaction */ public LedgerBalance(LaborBalanceHistory ledgerBalanceHistory) { this(); this.setChartOfAccountsCode(ledgerBalanceHistory.getChartOfAccountsCode()); this.setAccountNumber(ledgerBalanceHistory.getAccountNumber()); this.setFinancialBalanceTypeCode(ledgerBalanceHistory.getFinancialBalanceTypeCode()); this.setEmplid(ledgerBalanceHistory.getEmplid()); this.setFinancialObjectCode(ledgerBalanceHistory.getFinancialObjectCode()); this.setFinancialObjectTypeCode(ledgerBalanceHistory.getFinancialObjectTypeCode()); this.setFinancialSubObjectCode(ledgerBalanceHistory.getFinancialSubObjectCode()); this.setPositionNumber(ledgerBalanceHistory.getPositionNumber()); this.setUniversityFiscalYear(ledgerBalanceHistory.getUniversityFiscalYear()); this.setSubAccountNumber(ledgerBalanceHistory.getSubAccountNumber()); } /** * Gets the emplid * * @return Returns the emplid. */ @Override public String getEmplid() { return emplid; } /** * Sets the emplid * * @param emplid The emplid to set. */ @Override public void setEmplid(String emplid) { this.emplid = emplid; } /** * Gets the financialBalanceTypeCode * * @return Returns the financialBalanceTypeCode. */ @Override public String getFinancialBalanceTypeCode() { return financialBalanceTypeCode; } /** * Sets the financialBalanceTypeCode * * @param financialBalanceTypeCode The financialBalanceTypeCode to set. */ @Override public void setFinancialBalanceTypeCode(String financialBalanceTypeCode) { this.financialBalanceTypeCode = financialBalanceTypeCode; } /** * Gets the financialBeginningBalanceLineAmount * * @return Returns the financialBeginningBalanceLineAmount. */ @Override public KualiDecimal getFinancialBeginningBalanceLineAmount() { return financialBeginningBalanceLineAmount; } /** * Sets the financialBeginningBalanceLineAmount * * @param financialBeginningBalanceLineAmount The financialBeginningBalanceLineAmount to set. */ @Override public void setFinancialBeginningBalanceLineAmount(KualiDecimal financialBeginningBalanceLineAmount) { this.financialBeginningBalanceLineAmount = financialBeginningBalanceLineAmount; super.setBeginningBalanceLineAmount(financialBeginningBalanceLineAmount); } /** * Gets the financialObjectCode * * @return Returns the financialObjectCode. */ @Override public String getFinancialObjectCode() { return financialObjectCode; } /** * Sets the financialObjectCode * * @param financialObjectCode The financialObjectCode to set. */ @Override public void setFinancialObjectCode(String financialObjectCode) { this.financialObjectCode = financialObjectCode; } /** * Gets the financialObjectTypeCode * * @return Returns the financialObjectTypeCode. */ @Override public String getFinancialObjectTypeCode() { return financialObjectTypeCode; } /** * Sets the financialObjectTypeCode * * @param financialObjectTypeCode The financialObjectTypeCode to set. */ @Override public void setFinancialObjectTypeCode(String financialObjectTypeCode) { this.financialObjectTypeCode = financialObjectTypeCode; } /** * Gets the financialSubObjectCode * * @return Returns the financialSubObjectCode. */ @Override public String getFinancialSubObjectCode() { return financialSubObjectCode; } /** * Sets the financialSubObjectCode * * @param financialSubObjectCode The financialSubObjectCode to set. */ @Override public void setFinancialSubObjectCode(String financialSubObjectCode) { this.financialSubObjectCode = financialSubObjectCode; } /** * Gets the positionNumber * * @return Returns the positionNumber. */ @Override public String getPositionNumber() { return positionNumber; } /** * Sets the positionNumber * * @param positionNumber The positionNumber to set. */ @Override public void setPositionNumber(String positionNumber) { this.positionNumber = positionNumber; } /** * Gets the transactionDateTimeStamp * * @return Returns the transactionDateTimeStamp. */ @Override public Timestamp getTransactionDateTimeStamp() { return transactionDateTimeStamp; } /** * Sets the transactionDateTimeStamp * * @param transactionDateTimeStamp The transactionDateTimeStamp to set. */ @Override public void setTransactionDateTimeStamp(Timestamp transactionDateTimeStamp) { this.transactionDateTimeStamp = transactionDateTimeStamp; } /** * Gets the getFinancialBalanceTypeCode * * @return getFinancialBalanceTypeCode * @see org.kuali.kfs.gl.businessobject.Balance#getBalanceTypeCode() */ @Override public String getBalanceTypeCode() { return this.getFinancialBalanceTypeCode(); } /** * Sets the setFinancialBalanceTypeCode * * @param balanceTypeCode * @see org.kuali.kfs.gl.businessobject.Balance#setBalanceTypeCode(java.lang.String) */ @Override public void setBalanceTypeCode(String balanceTypeCode) { this.setFinancialBalanceTypeCode(balanceTypeCode); } /** * Gets the getChartOfAccounts * * @return getChartOfAccounts * @see org.kuali.kfs.gl.businessobject.Balance#getChart() */ @Override public Chart getChart() { return this.getChartOfAccounts(); } /** * Sets the setChartOfAccounts * * @param chart * @see org.kuali.kfs.gl.businessobject.Balance#setChart(org.kuali.kfs.coa.businessobject.Chart) */ @Override public void setChart(Chart chart) { this.setChartOfAccounts(chart); } /** * Gets the chartOfAccounts * * @return Returns the chartOfAccounts. */ @Override public Chart getChartOfAccounts() { return chartOfAccounts; } /** * Sets the chartOfAccounts * * @param chartOfAccounts The chartOfAccounts to set. */ @Override public void setChartOfAccounts(Chart chartOfAccounts) { this.chartOfAccounts = chartOfAccounts; } /** * Gets the financialObjectType * * @return Returns the financialObjectType. */ @Override public ObjectType getFinancialObjectType() { return financialObjectType; } /** * Sets the financialObjectType * * @param financialObjectType The financialObjectType to set. */ @Override public void setFinancialObjectType(ObjectType financialObjectType) { this.financialObjectType = financialObjectType; } /** * Adds amounts in a period. * * @param period, amount * @see org.kuali.kfs.gl.businessobject.Balance#addAmount(java.lang.String, org.kuali.rice.core.api.util.type.KualiDecimal) */ @Override public void addAmount(String period, KualiDecimal amount) { if (KFSConstants.PERIOD_CODE_ANNUAL_BALANCE.equals(period)) { this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } else if (KFSConstants.PERIOD_CODE_BEGINNING_BALANCE.equals(period)) { this.setFinancialBeginningBalanceLineAmount(this.getFinancialBeginningBalanceLineAmount().add(amount)); super.getBeginningBalanceLineAmount().add(amount); } else if (KFSConstants.PERIOD_CODE_CG_BEGINNING_BALANCE.equals(period)) { this.setContractsGrantsBeginningBalanceAmount(this.getContractsGrantsBeginningBalanceAmount().add(amount)); } else if (KFSConstants.MONTH1.equals(period)) { setMonth1Amount(getMonth1Amount().add(amount)); this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } else if (KFSConstants.MONTH2.equals(period)) { setMonth2Amount(getMonth2Amount().add(amount)); this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } else if (KFSConstants.MONTH3.equals(period)) { setMonth3Amount(getMonth3Amount().add(amount)); this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } else if (KFSConstants.MONTH4.equals(period)) { setMonth4Amount(getMonth4Amount().add(amount)); this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } else if (KFSConstants.MONTH5.equals(period)) { setMonth5Amount(getMonth5Amount().add(amount)); this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } else if (KFSConstants.MONTH6.equals(period)) { setMonth6Amount(getMonth6Amount().add(amount)); this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } else if (KFSConstants.MONTH7.equals(period)) { setMonth7Amount(getMonth7Amount().add(amount)); this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } else if (KFSConstants.MONTH8.equals(period)) { setMonth8Amount(getMonth8Amount().add(amount)); this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } else if (KFSConstants.MONTH9.equals(period)) { setMonth9Amount(getMonth9Amount().add(amount)); this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } else if (KFSConstants.MONTH10.equals(period)) { setMonth10Amount(getMonth10Amount().add(amount)); this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } else if (KFSConstants.MONTH11.equals(period)) { setMonth11Amount(getMonth11Amount().add(amount)); this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } else if (KFSConstants.MONTH12.equals(period)) { setMonth12Amount(getMonth12Amount().add(amount)); this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } else if (KFSConstants.MONTH13.equals(period)) { setMonth13Amount(getMonth13Amount().add(amount)); this.setAccountLineAnnualBalanceAmount(this.getAccountLineAnnualBalanceAmount().add(amount)); } } /** * get the amount in the given period. * * @param periodCode the given period code */ @Override public KualiDecimal getAmountByPeriod(String periodCode) { if (KFSConstants.PERIOD_CODE_ANNUAL_BALANCE.equals(periodCode)) { return this.getAccountLineAnnualBalanceAmount(); } else if (KFSConstants.PERIOD_CODE_BEGINNING_BALANCE.equals(periodCode)) { return this.getFinancialBeginningBalanceLineAmount(); } else if (KFSConstants.PERIOD_CODE_CG_BEGINNING_BALANCE.equals(periodCode)) { return this.getContractsGrantsBeginningBalanceAmount(); } else if (KFSConstants.MONTH1.equals(periodCode)) { return this.getMonth1Amount(); } else if (KFSConstants.MONTH2.equals(periodCode)) { return this.getMonth2Amount(); } else if (KFSConstants.MONTH3.equals(periodCode)) { return this.getMonth3Amount(); } else if (KFSConstants.MONTH4.equals(periodCode)) { return this.getMonth4Amount(); } else if (KFSConstants.MONTH5.equals(periodCode)) { return this.getMonth5Amount(); } else if (KFSConstants.MONTH6.equals(periodCode)) { return this.getMonth6Amount(); } else if (KFSConstants.MONTH7.equals(periodCode)) { return this.getMonth7Amount(); } else if (KFSConstants.MONTH8.equals(periodCode)) { return this.getMonth8Amount(); } else if (KFSConstants.MONTH9.equals(periodCode)) { return this.getMonth9Amount(); } else if (KFSConstants.MONTH10.equals(periodCode)) { return this.getMonth10Amount(); } else if (KFSConstants.MONTH11.equals(periodCode)) { return this.getMonth11Amount(); } else if (KFSConstants.MONTH12.equals(periodCode)) { return this.getMonth12Amount(); } else if (KFSConstants.MONTH13.equals(periodCode)) { return this.getMonth13Amount(); } else { throw new IllegalArgumentException("Unsupport Period Code: " + periodCode); } } /** * @see org.kuali.module.effort.bo.LaborLedgerEntry#getLaborLedgerObject() */ @Override public LaborLedgerObject getLaborLedgerObject() { return this.laborObject; } /** * @see org.kuali.module.effort.bo.LaborLedgerEntry#setLaborLedgerObject(org.kuali.kfs.bo.LaborLedgerObject) */ @Override @Deprecated public void setLaborLedgerObject(LaborLedgerObject laborLedgerObject) { this.laborObject = (LaborObject) laborLedgerObject; } /** * Gets the laborObject attribute. * * @return Returns the laborObject. */ public LaborObject getLaborObject() { return laborObject; } /** * Sets the laborObject attribute value. * * @param laborObject The laborObject to set. */ @Deprecated public void setLaborObject(LaborObject laborObject) { this.laborObject = laborObject; } /** * Gets the Person * * @return Returns the Person */ @Override public Person getLedgerPerson() { if( (ledgerPerson == null || !StringUtils.equals(ledgerPerson.getEmployeeId(), emplid)) && StringUtils.isNotBlank(emplid) ) { ledgerPerson = SpringContext.getBean(PersonService.class).getPersonByEmployeeId(emplid); } return ledgerPerson; } /** * Sets the ledgerPerson * * @param ledgerPerson The ledgerPerson to set. */ @Override public void setLedgerPerson(Person ledgerPerson) { this.ledgerPerson = ledgerPerson; } /** * construct the primary key list of the business object * * @return the primary key list of the business object */ public static List<String> getPrimaryKeyList() { List<String> primaryKeyList = new ArrayList<String>(); primaryKeyList.add(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR); primaryKeyList.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE); primaryKeyList.add(KFSPropertyConstants.ACCOUNT_NUMBER); primaryKeyList.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER); primaryKeyList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE); primaryKeyList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE); primaryKeyList.add(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE); primaryKeyList.add(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE); primaryKeyList.add(KFSPropertyConstants.POSITION_NUMBER); primaryKeyList.add(KFSPropertyConstants.EMPLID); return primaryKeyList; } /** * Returns true if all amounts except C/G beginning balance are zero; false otherwise. */ public boolean isCGBeginningBalanceOnly() { return getAccountLineAnnualBalanceAmount().isZero() && getBeginningBalanceLineAmount().isZero() && getFinancialBeginningBalanceLineAmount().isZero() && getMonth1Amount().isZero() && getMonth2Amount().isZero() && getMonth3Amount().isZero() && getMonth4Amount().isZero() && getMonth5Amount().isZero() && getMonth6Amount().isZero() && getMonth7Amount().isZero() && getMonth8Amount().isZero() && getMonth9Amount().isZero() && getMonth10Amount().isZero() && getMonth11Amount().isZero() && getMonth12Amount().isZero() && getMonth13Amount().isZero(); } /** * @see org.kuali.kfs.gl.businessobject.Balance#toStringMapper() */ @Override 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.FINANCIAL_OBJECT_CODE, getFinancialObjectCode()); map.put(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE, getFinancialSubObjectCode()); map.put(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE, getFinancialBalanceTypeCode()); map.put(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE, getFinancialObjectTypeCode()); map.put(KFSPropertyConstants.POSITION_NUMBER, this.getPositionNumber()); map.put(KFSPropertyConstants.EMPLID, this.getEmplid()); return map; } }