/*
* 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.bc.businessobject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
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.SubAccount;
import org.kuali.kfs.coa.businessobject.SubObjectCode;
import org.kuali.kfs.integration.ld.LaborLedgerObject;
import org.kuali.kfs.integration.ld.LaborLedgerPositionObjectBenefit;
import org.kuali.kfs.module.bc.util.SalarySettingCalculator;
import org.kuali.kfs.sys.KFSPropertyConstants;
import org.kuali.kfs.sys.ObjectUtil;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.rice.core.api.util.type.KualiDecimal;
import org.kuali.rice.core.api.util.type.KualiInteger;
import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
import org.kuali.rice.krad.service.BusinessObjectService;
import org.kuali.rice.krad.service.KualiModuleService;
public class PendingBudgetConstructionGeneralLedger extends PersistableBusinessObjectBase {
private String documentNumber;
private Integer universityFiscalYear;
private String chartOfAccountsCode;
private String accountNumber;
private String subAccountNumber;
private String financialObjectCode;
private String financialSubObjectCode;
private String financialBalanceTypeCode;
private String financialObjectTypeCode;
private KualiInteger accountLineAnnualBalanceAmount;
private KualiInteger financialBeginningBalanceLineAmount;
private BudgetConstructionHeader budgetConstructionHeader;
private ObjectCode financialObject;
private Chart chartOfAccounts;
private Account account;
private SubAccount subAccount;
private SubObjectCode financialSubObject;
private BalanceType balanceType;
private ObjectType objectType;
private List<BudgetConstructionMonthly> budgetConstructionMonthly;
// These are not defined under ojb since not all expenditure line objects have these
private LaborLedgerObject laborObject;
private List<LaborLedgerPositionObjectBenefit> positionObjectBenefit;
private KualiDecimal adjustmentAmount;
private KualiDecimal percentChange;
private KualiInteger persistedAccountLineAnnualBalanceAmount;
private boolean pendingBudgetConstructionAppointmentFundingExists;
/**
* Default constructor.
*/
public PendingBudgetConstructionGeneralLedger() {
super();
budgetConstructionMonthly = new ArrayList<BudgetConstructionMonthly>();
}
/**
* Gets the adjustmentAmount attribute.
* @return Returns the adjustmentAmount.
*/
public KualiDecimal getAdjustmentAmount() {
return adjustmentAmount;
}
/**
* Sets the adjustmentAmount attribute value.
* @param adjustmentAmount The adjustmentAmount to set.
*/
public void setAdjustmentAmount(KualiDecimal adjustmentAmount) {
this.adjustmentAmount = adjustmentAmount;
}
/**
* Gets(sets) the percentChange based on the current values of base and request amounts
*
* @return Returns percentChange
*/
public KualiDecimal getPercentChange() {
KualiInteger baseAmount = this.getFinancialBeginningBalanceLineAmount();
KualiInteger requestedAmount = this.getAccountLineAnnualBalanceAmount();
return SalarySettingCalculator.getPercentChange(baseAmount, requestedAmount);
}
/**
* Sets the percentChange attribute value.
*
* @param percentChange The percentChange to set.
*/
public void setPercentChange(KualiDecimal percentChange) {
this.percentChange = percentChange;
}
/**
* Gets the documentNumber attribute.
*
* @return Returns the documentNumber
*/
public String getDocumentNumber() {
return documentNumber;
}
/**
* Sets the documentNumber attribute.
*
* @param documentNumber The documentNumber to set.
*/
public void setDocumentNumber(String documentNumber) {
this.documentNumber = documentNumber;
}
/**
* 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 subAccountNumber attribute.
*
* @return Returns the subAccountNumber
*/
public String getSubAccountNumber() {
return subAccountNumber;
}
/**
* Sets the subAccountNumber attribute.
*
* @param subAccountNumber The subAccountNumber to set.
*/
public void setSubAccountNumber(String subAccountNumber) {
this.subAccountNumber = subAccountNumber;
}
/**
* 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 financialSubObjectCode attribute.
*
* @return Returns the financialSubObjectCode
*/
public String getFinancialSubObjectCode() {
return financialSubObjectCode;
}
/**
* Sets the financialSubObjectCode attribute.
*
* @param financialSubObjectCode The financialSubObjectCode to set.
*/
public void setFinancialSubObjectCode(String financialSubObjectCode) {
this.financialSubObjectCode = financialSubObjectCode;
}
/**
* Gets the financialBalanceTypeCode attribute.
*
* @return Returns the financialBalanceTypeCode
*/
public String getFinancialBalanceTypeCode() {
return financialBalanceTypeCode;
}
/**
* Sets the financialBalanceTypeCode attribute.
*
* @param financialBalanceTypeCode The financialBalanceTypeCode to set.
*/
public void setFinancialBalanceTypeCode(String financialBalanceTypeCode) {
this.financialBalanceTypeCode = financialBalanceTypeCode;
}
/**
* Gets the financialObjectTypeCode attribute.
*
* @return Returns the financialObjectTypeCode
*/
public String getFinancialObjectTypeCode() {
return financialObjectTypeCode;
}
/**
* Sets the financialObjectTypeCode attribute.
*
* @param financialObjectTypeCode The financialObjectTypeCode to set.
*/
public void setFinancialObjectTypeCode(String financialObjectTypeCode) {
this.financialObjectTypeCode = financialObjectTypeCode;
}
/**
* Gets the accountLineAnnualBalanceAmount attribute.
*
* @return Returns the accountLineAnnualBalanceAmount.
*/
public KualiInteger getAccountLineAnnualBalanceAmount() {
if (accountLineAnnualBalanceAmount == null) {
accountLineAnnualBalanceAmount = KualiInteger.ZERO;
}
return accountLineAnnualBalanceAmount;
}
/**
* Sets the accountLineAnnualBalanceAmount attribute value.
*
* @param accountLineAnnualBalanceAmount The accountLineAnnualBalanceAmount to set.
*/
public void setAccountLineAnnualBalanceAmount(KualiInteger accountLineAnnualBalanceAmount) {
this.accountLineAnnualBalanceAmount = accountLineAnnualBalanceAmount;
}
/**
* Gets the persistedAccountLineAnnualBalanceAmount attribute.
*
* @return Returns the persistedAccountLineAnnualBalanceAmount.
*/
public KualiInteger getPersistedAccountLineAnnualBalanceAmount() {
return persistedAccountLineAnnualBalanceAmount;
}
/**
* Sets the persistedAccountLineAnnualBalanceAmount attribute value.
*
* @param persistedAccountLineAnnualBalanceAmount The persistedAccountLineAnnualBalanceAmount to set.
*/
public void setPersistedAccountLineAnnualBalanceAmount(KualiInteger persistedAccountLineAnnualBalanceAmount) {
this.persistedAccountLineAnnualBalanceAmount = persistedAccountLineAnnualBalanceAmount;
}
/**
* Gets the financialBeginningBalanceLineAmount attribute.
*
* @return Returns the financialBeginningBalanceLineAmount.
*/
public KualiInteger getFinancialBeginningBalanceLineAmount() {
return financialBeginningBalanceLineAmount;
}
/**
* Sets the financialBeginningBalanceLineAmount attribute value.
*
* @param financialBeginningBalanceLineAmount The financialBeginningBalanceLineAmount to set.
*/
public void setFinancialBeginningBalanceLineAmount(KualiInteger financialBeginningBalanceLineAmount) {
this.financialBeginningBalanceLineAmount = financialBeginningBalanceLineAmount;
}
/**
* Gets the budgetConstructionMonthly attribute.
*
* @return Returns the budgetConstructionMonthly
*/
public List<BudgetConstructionMonthly> getBudgetConstructionMonthly() {
return budgetConstructionMonthly;
}
/**
* Sets the budgetConstructionMonthly attribute.
*
* @param budgetConstructionMonthly The budgetConstructionMonthly to set.
* @deprecated
*/
public void setBudgetConstructionMonthly(List<BudgetConstructionMonthly> budgetConstructionMonthly) {
this.budgetConstructionMonthly = budgetConstructionMonthly;
}
/**
* Gets the financialObject attribute.
*
* @return Returns the financialObject
*/
public ObjectCode getFinancialObject() {
return financialObject;
}
/**
* Sets the financialObject attribute.
*
* @param financialObject The financialObject to set.
* @deprecated
*/
public void setFinancialObject(ObjectCode financialObject) {
this.financialObject = financialObject;
}
/**
* Gets the chartOfAccounts attribute.
*
* @return Returns the chartOfAccounts
*/
public Chart getChartOfAccounts() {
return chartOfAccounts;
}
/**
* Sets the chartOfAccounts attribute.
*
* @param chartOfAccounts The chartOfAccounts to set.
* @deprecated
*/
public void setChartOfAccounts(Chart chartOfAccounts) {
this.chartOfAccounts = chartOfAccounts;
}
/**
* 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;
}
/**
* Gets the financialSubObject attribute.
*
* @return Returns the financialSubObject.
*/
public SubObjectCode getFinancialSubObject() {
return financialSubObject;
}
/**
* Sets the financialSubObject attribute value.
*
* @param financialSubObject The financialSubObject to set.
* @deprecated
*/
public void setFinancialSubObject(SubObjectCode financialSubObject) {
this.financialSubObject = financialSubObject;
}
/**
* Gets the subAccount attribute.
*
* @return Returns the subAccount.
*/
public SubAccount getSubAccount() {
return subAccount;
}
/**
* Sets the subAccount attribute value.
*
* @param subAccount The subAccount to set.
* @deprecated
*/
public void setSubAccount(SubAccount subAccount) {
this.subAccount = subAccount;
}
/**
* Gets the balanceType attribute.
*
* @return Returns the balanceType.
*/
public BalanceType getBalanceType() {
return balanceType;
}
/**
* Sets the balanceType attribute value.
*
* @param balanceType The balanceType to set.
* @deprecated
*/
public void setBalanceType(BalanceType balanceType) {
this.balanceType = balanceType;
}
/**
* Gets the objectType attribute.
*
* @return Returns the objectType.
*/
public ObjectType getObjectType() {
return objectType;
}
/**
* Sets the objectType attribute value.
*
* @param objectType The objectType to set.
* @deprecated
*/
public void setObjectType(ObjectType objectType) {
this.objectType = objectType;
}
/**
* Gets the budgetConstructionHeader attribute.
*
* @return Returns the budgetConstructionHeader.
*/
public BudgetConstructionHeader getBudgetConstructionHeader() {
return budgetConstructionHeader;
}
/**
* Sets the budgetConstructionHeader attribute value.
*
* @param budgetConstructionHeader The budgetConstructionHeader to set.
* @deprecated
*/
public void setBudgetConstructionHeader(BudgetConstructionHeader budgetConstructionHeader) {
this.budgetConstructionHeader = budgetConstructionHeader;
}
/**
* Gets the laborObject attribute.
*
* @return Returns the laborObject.
*/
public LaborLedgerObject getLaborObject() {
laborObject = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(LaborLedgerObject.class).retrieveExternalizableBusinessObjectIfNecessary(this, laborObject, "laborObject");
return laborObject;
}
/**
* Sets the laborObject attribute value.
*
* @param laborObject The laborObject to set.
*/
public void setLaborObject(LaborLedgerObject laborObject) {
this.laborObject = laborObject;
}
/**
* Gets the positionObjectBenefit attribute.
*
* @return Returns the positionObjectBenefit.
*/
public List<LaborLedgerPositionObjectBenefit> getPositionObjectBenefit() {
positionObjectBenefit = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(LaborLedgerPositionObjectBenefit.class).retrieveExternalizableBusinessObjectsList(this, "positionObjectBenefit", LaborLedgerPositionObjectBenefit.class);
return positionObjectBenefit;
}
/**
* Sets the positionObjectBenefit attribute value.
*
* @param positionObjectBenefit The positionObjectBenefit to set.
*/
public void setPositionObjectBenefit(List<LaborLedgerPositionObjectBenefit> positionObjectBenefit) {
this.positionObjectBenefit = positionObjectBenefit;
}
/**
* Gets the pendingBudgetConstructionAppointmentFundingExists attribute.
*
* @return Returns the pendingBudgetConstructionAppointmentFundingExists.
*/
public boolean isPendingBudgetConstructionAppointmentFundingExists() {
pendingBudgetConstructionAppointmentFundingExists = false;
if (this.getLaborObject() != null && this.getLaborObject().isDetailPositionRequiredIndicator()) {
Map<String, Object> fieldValues = new HashMap<String, Object>();
fieldValues.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, getUniversityFiscalYear());
fieldValues.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, getChartOfAccountsCode());
fieldValues.put(KFSPropertyConstants.ACCOUNT_NUMBER, getAccountNumber());
fieldValues.put(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, getSubAccountNumber());
fieldValues.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, getFinancialObjectCode());
fieldValues.put(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE, getFinancialSubObjectCode());
int recCount = SpringContext.getBean(BusinessObjectService.class).countMatching(PendingBudgetConstructionAppointmentFunding.class, fieldValues);
pendingBudgetConstructionAppointmentFundingExists = (recCount > 0) ? true : false;
}
return pendingBudgetConstructionAppointmentFundingExists;
}
/**
* @see org.kuali.rice.krad.bo.BusinessObjectBase#toStringMapper()
*/
protected LinkedHashMap toStringMapper_RICE20_REFACTORME() {
LinkedHashMap m = new LinkedHashMap();
if (this.universityFiscalYear != null) {
m.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, this.universityFiscalYear.toString());
}
m.put(KFSPropertyConstants.DOCUMENT_NUMBER, this.getDocumentNumber());
m.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, this.getChartOfAccountsCode());
m.put(KFSPropertyConstants.ACCOUNT_NUMBER, this.getAccountNumber());
m.put(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, this.getSubAccountNumber());
m.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, this.getFinancialObjectCode());
m.put(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE, this.getFinancialSubObjectCode());
m.put(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE, this.getFinancialBalanceTypeCode());
m.put(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE, this.getFinancialObjectTypeCode());
return m;
}
/**
* Returns a map with the primitive field names as the key and the primitive values as the map value.
*
* @return Map
*/
public Map<String, Object> getValuesMap() {
Map<String, Object> simpleValues = this.buildPrimaryKeyMap();
return simpleValues;
}
/**
* build the primary key map with the field names as the map keys and the field values as the map values
*
* @return the primary key map with the field names as the map keys and the field values as the map values
*/
public Map<String, Object> buildPrimaryKeyMap() {
return ObjectUtil.buildPropertyMap(this, getPrimaryKeyFields());
}
/**
* get the list of primary keys
* @return the list of primary keys
*/
public static List<String> getPrimaryKeyFields(){
List<String> primaryKeyFields = new ArrayList<String>();
primaryKeyFields.add(KFSPropertyConstants.DOCUMENT_NUMBER);
primaryKeyFields.add(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR);
primaryKeyFields.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
primaryKeyFields.add(KFSPropertyConstants.ACCOUNT_NUMBER);
primaryKeyFields.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER);
primaryKeyFields.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE);
primaryKeyFields.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE);
primaryKeyFields.add(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE);
primaryKeyFields.add(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE);
return primaryKeyFields;
}
}