001/* 002 * Copyright 2007 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.kuali.ole.gl.businessobject; 017 018import java.util.HashMap; 019import java.util.Iterator; 020import java.util.LinkedHashMap; 021import java.util.List; 022import java.util.Map; 023 024import org.apache.commons.lang.StringUtils; 025import org.kuali.ole.coa.businessobject.OrganizationReversionCategory; 026import org.kuali.rice.core.api.util.type.KualiDecimal; 027import org.kuali.rice.krad.bo.PersistableBusinessObjectBase; 028 029/** 030 * This class represents a unit of work for the organization reversion 031 */ 032public class OrgReversionUnitOfWork extends PersistableBusinessObjectBase { 033 public String chartOfAccountsCode = ""; 034 public String accountNumber = ""; 035 public String subAccountNumber = ""; 036 public Map<String, OrgReversionUnitOfWorkCategoryAmount> amounts; 037 private KualiDecimal totalReversion; 038 private KualiDecimal totalCarryForward; 039 private KualiDecimal totalAvailable; 040 private KualiDecimal totalCash; 041 042 public OrgReversionUnitOfWork() { 043 amounts = new HashMap<String, OrgReversionUnitOfWorkCategoryAmount>(); 044 } 045 046 public OrgReversionUnitOfWork(String chart, String acct, String subAcct) { 047 this(); 048 chartOfAccountsCode = chart; 049 accountNumber = acct; 050 subAccountNumber = subAcct; 051 } 052 053 /** 054 * Returns true if COA code and account number are not blank. 055 * 056 * @return true if COA code and account number are not blank. 057 */ 058 public boolean isInitialized() { 059 return !StringUtils.isBlank(chartOfAccountsCode) && !StringUtils.isBlank(accountNumber); 060 } 061 062 public void setFields(String chart, String acct, String subAcct) { 063 chartOfAccountsCode = chart; 064 accountNumber = acct; 065 subAccountNumber = subAcct; 066 cascadeCategoryAmountKeys(); 067 clearAmounts(); 068 } 069 070 /** 071 * Set category amounts 072 * @param cats list of organization reversion categories 073 */ 074 public void setCategories(List<OrganizationReversionCategory> cats) { 075 for (OrganizationReversionCategory element : cats) { 076 OrgReversionUnitOfWorkCategoryAmount ca = new OrgReversionUnitOfWorkCategoryAmount(element.getOrganizationReversionCategoryCode()); 077 amounts.put(element.getOrganizationReversionCategoryCode(), ca); 078 } 079 } 080 081 /** 082 * This method adds to the actual amount for a specific category code 083 * @param categoryCode category code 084 * @param amount amount 085 */ 086 public void addActualAmount(String categoryCode, KualiDecimal amount) { 087 OrgReversionUnitOfWorkCategoryAmount ca = amounts.get(categoryCode); 088 ca.setActual(ca.getActual().add(amount)); 089 } 090 091 /** 092 * This method adds to the budget amount for a specific category code 093 * @param categoryCode category code 094 * @param amount amount 095 */ 096 public void addBudgetAmount(String categoryCode, KualiDecimal amount) { 097 OrgReversionUnitOfWorkCategoryAmount ca = amounts.get(categoryCode); 098 ca.setBudget(ca.getBudget().add(amount)); 099 } 100 101 /** 102 * This method adds to the encumbrance amount for a specific category code 103 * @param categoryCode category code 104 * @param amount amount 105 */ 106 public void addEncumbranceAmount(String categoryCode, KualiDecimal amount) { 107 OrgReversionUnitOfWorkCategoryAmount ca = amounts.get(categoryCode); 108 ca.setEncumbrance(ca.getEncumbrance().add(amount)); 109 } 110 111 /** 112 * This method adds to the carry forward amount for a specific category code 113 * @param categoryCode category code 114 * @param amount amount 115 */ 116 public void addCarryForwardAmount(String categoryCode, KualiDecimal amount) { 117 OrgReversionUnitOfWorkCategoryAmount ca = amounts.get(categoryCode); 118 ca.setCarryForward(ca.getCarryForward().add(amount)); 119 } 120 121 /** 122 * This method clears all amounts for this unit of work 123 */ 124 public void clearAmounts() { 125 totalAvailable = KualiDecimal.ZERO; 126 totalCarryForward = KualiDecimal.ZERO; 127 totalCash = KualiDecimal.ZERO; 128 totalReversion = KualiDecimal.ZERO; 129 130 for (Iterator<OrgReversionUnitOfWorkCategoryAmount> iter = amounts.values().iterator(); iter.hasNext();) { 131 OrgReversionUnitOfWorkCategoryAmount element = iter.next(); 132 element.setActual(KualiDecimal.ZERO); 133 element.setBudget(KualiDecimal.ZERO); 134 element.setEncumbrance(KualiDecimal.ZERO); 135 } 136 } 137 138 /** 139 * This method updates the category amount keys for the current unit of work 140 */ 141 public void cascadeCategoryAmountKeys() { 142 for (String category : amounts.keySet()) { 143 OrgReversionUnitOfWorkCategoryAmount catAmt = amounts.get(category); 144 catAmt.setChartOfAccountsCode(this.chartOfAccountsCode); 145 catAmt.setAccountNumber(this.accountNumber); 146 catAmt.setSubAccountNumber(this.subAccountNumber); 147 } 148 } 149 150 /** 151 * This method returns true if this unit of work's chart of accounts code, account number, and sub account number match the passed in parameter values 152 * @param chart 153 * @param acct 154 * @param subAcct 155 * @return true if this unit of work's chart of accounts code, account number, and sub account number match the passed in parameter values 156 */ 157 public boolean isSame(String chart, String acct, String subAcct) { 158 return (chartOfAccountsCode.equals(chart) && accountNumber.equals(acct) && subAccountNumber.equals(subAcct)); 159 } 160 161 /** 162 * Return true of this unit of work has the same chart of accounts code, account number, and sub account number as the passed in balance 163 * @param balance 164 * @return 165 */ 166 public boolean wouldHold(Balance balance) { 167 return StringUtils.equals(chartOfAccountsCode, balance.getChartOfAccountsCode()) && StringUtils.equals(accountNumber, balance.getAccountNumber()) && StringUtils.equals(subAccountNumber, balance.getSubAccountNumber()); 168 } 169 170 public KualiDecimal getTotalAccountAvailable() { 171 KualiDecimal amount = KualiDecimal.ZERO; 172 for (Iterator<OrgReversionUnitOfWorkCategoryAmount> iter = amounts.values().iterator(); iter.hasNext();) { 173 OrgReversionUnitOfWorkCategoryAmount element = iter.next(); 174 amount = amount.add(element.getAvailable()); 175 } 176 return amount; 177 } 178 179 public KualiDecimal getTotalCarryForward() { 180 return totalCarryForward; 181 } 182 183 public void setTotalCarryForward(KualiDecimal totalCarryForward) { 184 this.totalCarryForward = totalCarryForward; 185 } 186 187 public KualiDecimal getTotalReversion() { 188 return totalReversion; 189 } 190 191 public void addTotalCarryForward(KualiDecimal amount) { 192 totalCarryForward = totalCarryForward.add(amount); 193 } 194 195 public void setTotalReversion(KualiDecimal totalReversion) { 196 this.totalReversion = totalReversion; 197 } 198 199 public void addTotalReversion(KualiDecimal amount) { 200 totalReversion = totalReversion.add(amount); 201 } 202 203 public KualiDecimal getTotalAvailable() { 204 return totalAvailable; 205 } 206 207 public void addTotalAvailable(KualiDecimal amount) { 208 totalAvailable = totalAvailable.add(amount); 209 } 210 211 public void setTotalAvailable(KualiDecimal totalAvailable) { 212 this.totalAvailable = totalAvailable; 213 } 214 215 public void addTotalCash(KualiDecimal amount) { 216 totalCash = totalCash.add(amount); 217 } 218 219 public KualiDecimal getTotalCash() { 220 return totalCash; 221 } 222 223 public void setTotalCash(KualiDecimal totalCash) { 224 this.totalCash = totalCash; 225 } 226 227 public Map<String, OrgReversionUnitOfWorkCategoryAmount> getCategoryAmounts() { 228 return amounts; 229 } 230 231 /** 232 * @see org.kuali.rice.krad.bo.BusinessObjectBase#toStringMapper() 233 */ 234 235 public LinkedHashMap toStringMapper_RICE20_REFACTORME() { 236 LinkedHashMap pkMap = new LinkedHashMap(); 237 pkMap.put("chartOfAccountsCode", this.chartOfAccountsCode); 238 pkMap.put("accountNbr", this.accountNumber); 239 pkMap.put("subAccountNbr", this.subAccountNumber); 240 return pkMap; 241 } 242 243 /** 244 * Gets the accountNumber attribute. 245 * 246 * @return Returns the accountNumber. 247 */ 248 public String getAccountNumber() { 249 return accountNumber; 250 } 251 252 /** 253 * Sets the accountNumber attribute value. 254 * 255 * @param accountNumber The accountNumber to set. 256 */ 257 public void setAccountNumber(String accountNumber) { 258 this.accountNumber = accountNumber; 259 } 260 261 /** 262 * Gets the chartOfAccountsCode attribute. 263 * 264 * @return Returns the chartOfAccountsCode. 265 */ 266 public String getChartOfAccountsCode() { 267 return chartOfAccountsCode; 268 } 269 270 /** 271 * Sets the chartOfAccountsCode attribute value. 272 * 273 * @param chartOfAccountsCode The chartOfAccountsCode to set. 274 */ 275 public void setChartOfAccountsCode(String chartOfAccountsCode) { 276 this.chartOfAccountsCode = chartOfAccountsCode; 277 } 278 279 /** 280 * Gets the subAccountNumber attribute. 281 * 282 * @return Returns the subAccountNumber. 283 */ 284 public String getSubAccountNumber() { 285 return subAccountNumber; 286 } 287 288 /** 289 * Sets the subAccountNumber attribute value. 290 * 291 * @param subAccountNumber The subAccountNumber to set. 292 */ 293 public void setSubAccountNumber(String subAccountNumber) { 294 this.subAccountNumber = subAccountNumber; 295 } 296 297}