/* * 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.coa.businessobject; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.kuali.kfs.sys.KFSPropertyConstants; import org.kuali.kfs.sys.businessobject.SystemOptions; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.rice.core.api.mo.common.active.MutableInactivatable; import org.kuali.rice.krad.bo.DocumentHeader; import org.kuali.rice.krad.bo.GlobalBusinessObject; import org.kuali.rice.krad.bo.GlobalBusinessObjectDetail; import org.kuali.rice.krad.bo.PersistableBusinessObject; import org.kuali.rice.krad.bo.PersistableBusinessObjectBase; import org.kuali.rice.krad.service.BusinessObjectService; /** * */ public class SubObjectCodeGlobal extends PersistableBusinessObjectBase implements GlobalBusinessObject, MutableInactivatable { private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(SubObjectCodeGlobal.class); protected String documentNumber; protected Integer universityFiscalYear; protected String chartOfAccountsCode; protected String financialSubObjectCode; protected String financialSubObjectCodeName; protected String financialSubObjectCodeShortName; protected boolean active; protected DocumentHeader financialDocument; protected SystemOptions universityFiscal; protected Chart chartOfAccounts; protected List<SubObjectCodeGlobalDetail> subObjCdGlobalDetails; protected List<AccountGlobalDetail> accountGlobalDetails; /** * Default constructor. */ public SubObjectCodeGlobal() { subObjCdGlobalDetails = new ArrayList<SubObjectCodeGlobalDetail>(); accountGlobalDetails = new ArrayList<AccountGlobalDetail>(); } /** * 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 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 financialSubObjectCodeName attribute. * * @return Returns the financialSubObjectCodeName */ public String getFinancialSubObjectCodeName() { return financialSubObjectCodeName; } /** * Sets the financialSubObjectCodeName attribute. * * @param financialSubObjectCodeName The financialSubObjectCodeName to set. */ public void setFinancialSubObjectCodeName(String financialSubObjectCodeName) { this.financialSubObjectCodeName = financialSubObjectCodeName; } /** * Gets the financialSubObjectCodeShortName attribute. * * @return Returns the financialSubObjectCodeShortName */ public String getFinancialSubObjectCodeShortName() { return financialSubObjectCodeShortName; } /** * Sets the financialSubObjectCodeShortName attribute. * * @param financialSubObjectCodeShortName The financialSubObjectCodeShortName to set. */ public void setFinancialSubObjectCodeShortName(String financialSubObjectCdshortNm) { this.financialSubObjectCodeShortName = financialSubObjectCdshortNm; } /** * Gets the active attribute. * * @return Returns the active */ public boolean isActive() { return active; } /** * Sets the active attribute. * * @param active The active to set. */ public void setActive(boolean active) { this.active = active; } /** * Gets the financialDocument attribute. * * @return Returns the financialDocument */ public DocumentHeader getFinancialDocument() { return financialDocument; } /** * Sets the financialDocument attribute. * * @param financialDocument The financialDocument to set. * @deprecated */ public void setFinancialDocument(DocumentHeader financialDocument) { this.financialDocument = financialDocument; } /** * Gets the universityFiscal attribute. * * @return Returns the universityFiscal */ public SystemOptions getUniversityFiscal() { return universityFiscal; } /** * Sets the universityFiscal attribute. * * @param universityFiscal The universityFiscal to set. * @deprecated */ public void setUniversityFiscal(SystemOptions universityFiscal) { this.universityFiscal = universityFiscal; } /** * 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; } /** * @see org.kuali.rice.krad.bo.BusinessObjectBase#toStringMapper() */ protected LinkedHashMap toStringMapper_RICE20_REFACTORME() { LinkedHashMap m = new LinkedHashMap(); m.put(KFSPropertyConstants.DOCUMENT_NUMBER, this.documentNumber); return m; } public List<SubObjectCodeGlobalDetail> getSubObjCdGlobalDetails() { return subObjCdGlobalDetails; } public void setSubObjCdGlobalDetails(List<SubObjectCodeGlobalDetail> subObjCdGlobalDetails) { this.subObjCdGlobalDetails = subObjCdGlobalDetails; } public List<AccountGlobalDetail> getAccountGlobalDetails() { return accountGlobalDetails; } public void setAccountGlobalDetails(List<AccountGlobalDetail> accountGlobalDetails) { this.accountGlobalDetails = accountGlobalDetails; } /** * @see org.kuali.rice.krad.document.GlobalBusinessObject#getGlobalChangesToDelete() */ public List<PersistableBusinessObject> generateDeactivationsToPersist() { return null; } /** * This returns a list of Sub Object Codes to Update and/or Add * * @see org.kuali.rice.krad.document.GlobalBusinessObject#applyGlobalChanges() */ public List<PersistableBusinessObject> generateGlobalChangesToPersist() { LOG.debug("applyGlobalChanges"); List result = new ArrayList(); // Iterate through Account/Object Code combinations; create new or update as necessary for (SubObjectCodeGlobalDetail subObjCdGlobalDetail : subObjCdGlobalDetails) { String financialObjectCode = subObjCdGlobalDetail.getFinancialObjectCode(); if (financialObjectCode != null && financialObjectCode.length() > 0) { for (AccountGlobalDetail accountGlobalDetail : accountGlobalDetails) { Map pk = new HashMap(); String accountNumber = accountGlobalDetail.getAccountNumber(); if (accountNumber != null && accountNumber.length() > 0) { pk.put("UNIV_FISCAL_YR", this.universityFiscalYear); pk.put("FIN_COA_CD", this.chartOfAccountsCode); pk.put("ACCOUNT_NBR", accountNumber); pk.put("FIN_OBJECT_CD", financialObjectCode); pk.put("FIN_SUB_OBJ_CD", this.financialSubObjectCode); SubObjectCode subObjCd = (SubObjectCode) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(SubObjectCode.class, pk); if (subObjCd == null) { subObjCd = new SubObjectCode(this.universityFiscalYear, this.chartOfAccountsCode, accountNumber, financialObjectCode, this.financialSubObjectCode); } populate(subObjCd, accountGlobalDetail, subObjCdGlobalDetail); result.add(subObjCd); } } } } return result; } public void populate(SubObjectCode old, AccountGlobalDetail accountGlobalDetail, SubObjectCodeGlobalDetail subObjCdGlobalDetail) { old.setFinancialSubObjectCodeName(update(old.getFinancialSubObjectCodeName(), financialSubObjectCodeName)); old.setFinancialSubObjectCdshortNm(update(old.getFinancialSubObjectCdshortNm(), financialSubObjectCodeShortName)); old.setActive(update(old.isActive(), active)); } /** * This method returns newvalue iff it is not empty * * @param oldValue * @param newValue * @return */ protected String update(String oldValue, String newValue) { if (newValue == null || newValue.length() == 0) { return oldValue; } return newValue; } protected boolean update(boolean oldValue, boolean newValue) { return newValue; } public boolean isPersistable() { return true; } public List<? extends GlobalBusinessObjectDetail> getAllDetailObjects() { ArrayList<GlobalBusinessObjectDetail> details = new ArrayList<GlobalBusinessObjectDetail>(accountGlobalDetails.size() + subObjCdGlobalDetails.size()); details.addAll(accountGlobalDetails); details.addAll(subObjCdGlobalDetails); return details; } /** * @see org.kuali.rice.krad.bo.PersistableBusinessObjectBase#buildListOfDeletionAwareLists() */ @Override public List buildListOfDeletionAwareLists() { List<Collection<PersistableBusinessObject>> managedLists = super.buildListOfDeletionAwareLists(); managedLists.add( new ArrayList<PersistableBusinessObject>( getAccountGlobalDetails() ) ); managedLists.add( new ArrayList<PersistableBusinessObject>( getSubObjCdGlobalDetails() ) ); return managedLists; } }