001 /* 002 * Copyright 2011 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 */ 016 package org.kuali.kfs.module.endow.document; 017 018 import java.util.ArrayList; 019 import java.util.List; 020 021 import org.kuali.kfs.module.endow.EndowConstants; 022 import org.kuali.kfs.module.endow.businessobject.EndowmentSourceTransactionLine; 023 import org.kuali.kfs.module.endow.businessobject.EndowmentTargetTransactionLine; 024 import org.kuali.kfs.module.endow.businessobject.EndowmentTransactionLine; 025 import org.kuali.kfs.module.endow.businessobject.EndowmentTransactionLineParser; 026 import org.kuali.kfs.module.endow.util.LineParser; 027 import org.kuali.kfs.module.endow.util.LineParserBase; 028 import org.kuali.kfs.sys.KFSConstants; 029 import org.kuali.rice.kew.exception.WorkflowException; 030 import org.kuali.rice.kns.util.KualiDecimal; 031 import org.kuali.rice.kns.util.TypedArrayList; 032 033 public abstract class EndowmentTransactionLinesDocumentBase extends EndowmentTransactionalDocumentBase implements EndowmentTransactionLinesDocument { 034 035 protected Integer nextSourceLineNumber; 036 protected Integer nextTargetLineNumber; 037 protected List<EndowmentTransactionLine> sourceTransactionLines; 038 protected List<EndowmentTransactionLine> targetTransactionLines; 039 040 /** 041 * Constructs a EndowmentTransactionLinesDocumentBase.java. 042 */ 043 public EndowmentTransactionLinesDocumentBase() { 044 super(); 045 this.nextSourceLineNumber = new Integer(1); 046 this.nextTargetLineNumber = new Integer(1); 047 sourceTransactionLines = new TypedArrayList(EndowmentSourceTransactionLine.class); 048 targetTransactionLines = new TypedArrayList(EndowmentTargetTransactionLine.class); 049 } 050 051 /** 052 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getSourceTransactionLines() 053 */ 054 public List<EndowmentTransactionLine> getSourceTransactionLines() { 055 return sourceTransactionLines; 056 } 057 058 /** 059 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#setSourceTransactionLines(java.util.List) 060 */ 061 public void setSourceTransactionLines(List<EndowmentTransactionLine> sourceTransactionLines) { 062 this.sourceTransactionLines = sourceTransactionLines; 063 } 064 065 /** 066 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getTargetTransactionLines() 067 */ 068 public List<EndowmentTransactionLine> getTargetTransactionLines() { 069 return targetTransactionLines; 070 } 071 072 /** 073 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#setTargetTransactionLines(java.util.List) 074 */ 075 public void setTargetTransactionLines(List<EndowmentTransactionLine> targetTransactionLines) { 076 this.targetTransactionLines = targetTransactionLines; 077 } 078 079 /** 080 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getSourceTransactionLinesSectionTitle() 081 */ 082 public String getSourceTransactionLinesSectionTitle() { 083 return KFSConstants.SOURCE; 084 085 } 086 087 /** 088 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getTargetTransactionLinesSectionTitle() 089 */ 090 public String getTargetTransactionLinesSectionTitle() { 091 return KFSConstants.TARGET; 092 } 093 094 /** 095 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getNextSourceLineNumber() 096 */ 097 public Integer getNextSourceLineNumber() { 098 return nextSourceLineNumber; 099 } 100 101 /** 102 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#setNextSourceLineNumber(java.lang.Integer) 103 */ 104 public void setNextSourceLineNumber(Integer nextSourceLineNumber) { 105 this.nextSourceLineNumber = nextSourceLineNumber; 106 } 107 108 /** 109 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getNextTargetLineNumber() 110 */ 111 public Integer getNextTargetLineNumber() { 112 return nextTargetLineNumber; 113 } 114 115 /** 116 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#setNextTargetLineNumber(java.lang.Integer) 117 */ 118 public void setNextTargetLineNumber(Integer nextTargetLineNumber) { 119 this.nextTargetLineNumber = nextTargetLineNumber; 120 } 121 122 123 /** 124 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#addSourceTransactionLine(org.kuali.kfs.module.endow.businessobject.EndowmentSourceTransactionLine) 125 */ 126 public void addSourceTransactionLine(EndowmentSourceTransactionLine line) { 127 line.setTransactionLineNumber(this.getNextSourceLineNumber()); 128 this.sourceTransactionLines.add(line); 129 this.nextSourceLineNumber = new Integer(this.getNextSourceLineNumber().intValue() + 1); 130 131 } 132 133 134 /** 135 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#addTargetTransactionLine(org.kuali.kfs.module.endow.businessobject.EndowmentTargetTransactionLine) 136 */ 137 public void addTargetTransactionLine(EndowmentTargetTransactionLine line) { 138 line.setTransactionLineNumber(this.getNextTargetLineNumber()); 139 this.targetTransactionLines.add(line); 140 this.nextTargetLineNumber = new Integer(this.getNextTargetLineNumber().intValue() + 1); 141 } 142 143 /** 144 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getSourceIncomeTotal() 145 */ 146 public KualiDecimal getSourceIncomeTotal() { 147 KualiDecimal total = KualiDecimal.ZERO; 148 149 for (EndowmentTransactionLine tl : getSourceTransactionLines()) { 150 if (tl.getTransactionAmount() != null && EndowConstants.IncomePrincipalIndicator.INCOME.equalsIgnoreCase(tl.getTransactionIPIndicatorCode())) { 151 total = total.add(tl.getTransactionAmount()); 152 } 153 } 154 155 return total; 156 } 157 158 159 /** 160 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getSourcePrincipalTotal() 161 */ 162 public KualiDecimal getSourcePrincipalTotal() { 163 KualiDecimal total = KualiDecimal.ZERO; 164 165 for (EndowmentTransactionLine tl : getSourceTransactionLines()) { 166 if (tl.getTransactionAmount() != null && EndowConstants.IncomePrincipalIndicator.PRINCIPAL.equalsIgnoreCase(tl.getTransactionIPIndicatorCode())) { 167 total = total.add(tl.getTransactionAmount()); 168 } 169 } 170 171 return total; 172 } 173 174 175 /** 176 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getTargetIncomeTotal() 177 */ 178 public KualiDecimal getTargetIncomeTotal() { 179 KualiDecimal total = KualiDecimal.ZERO; 180 181 for (EndowmentTransactionLine tl : getTargetTransactionLines()) { 182 if (tl.getTransactionAmount() != null && EndowConstants.IncomePrincipalIndicator.INCOME.equalsIgnoreCase(tl.getTransactionIPIndicatorCode())) { 183 total = total.add(tl.getTransactionAmount()); 184 } 185 } 186 187 return total; 188 } 189 190 191 /** 192 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getTargetPrincipalTotal() 193 */ 194 public KualiDecimal getTargetPrincipalTotal() { 195 KualiDecimal total = KualiDecimal.ZERO; 196 197 for (EndowmentTransactionLine tl : getTargetTransactionLines()) { 198 if (tl.getTransactionAmount() != null && EndowConstants.IncomePrincipalIndicator.PRINCIPAL.equalsIgnoreCase(tl.getTransactionIPIndicatorCode())) { 199 total = total.add(tl.getTransactionAmount()); 200 } 201 } 202 203 return total; 204 } 205 206 /** 207 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getSourceIncomeTotalUnits() 208 */ 209 public KualiDecimal getSourceIncomeTotalUnits() { 210 KualiDecimal total = KualiDecimal.ZERO; 211 212 for (EndowmentTransactionLine tl : getSourceTransactionLines()) { 213 if (tl.getTransactionUnits() != null && EndowConstants.IncomePrincipalIndicator.INCOME.equalsIgnoreCase(tl.getTransactionIPIndicatorCode())) { 214 total = total.add(tl.getTransactionUnits()); 215 } 216 } 217 218 return total; 219 } 220 221 222 /** 223 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getSourcePrincipalTotalUnits() 224 */ 225 public KualiDecimal getSourcePrincipalTotalUnits() { 226 KualiDecimal total = KualiDecimal.ZERO; 227 228 for (EndowmentTransactionLine tl : getSourceTransactionLines()) { 229 if (tl.getTransactionUnits() != null && EndowConstants.IncomePrincipalIndicator.PRINCIPAL.equalsIgnoreCase(tl.getTransactionIPIndicatorCode())) { 230 total = total.add(tl.getTransactionUnits()); 231 } 232 } 233 234 return total; 235 } 236 237 238 /** 239 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getTargetIncomeTotalUnits() 240 */ 241 public KualiDecimal getTargetIncomeTotalUnits() { 242 KualiDecimal total = KualiDecimal.ZERO; 243 244 for (EndowmentTransactionLine tl : getTargetTransactionLines()) { 245 if (tl.getTransactionUnits() != null && EndowConstants.IncomePrincipalIndicator.INCOME.equalsIgnoreCase(tl.getTransactionIPIndicatorCode())) { 246 total = total.add(tl.getTransactionUnits()); 247 } 248 } 249 250 return total; 251 } 252 253 254 /** 255 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getTargetPrincipalTotalUnits() 256 */ 257 public KualiDecimal getTargetPrincipalTotalUnits() { 258 KualiDecimal total = KualiDecimal.ZERO; 259 260 for (EndowmentTransactionLine tl : getTargetTransactionLines()) { 261 if (tl.getTransactionUnits() != null && EndowConstants.IncomePrincipalIndicator.PRINCIPAL.equalsIgnoreCase(tl.getTransactionIPIndicatorCode())) { 262 total = total.add(tl.getTransactionUnits()); 263 } 264 } 265 266 return total; 267 } 268 269 /** 270 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getTransactionLineParser() 271 */ 272 public EndowmentTransactionLineParser getTransactionLineParser() { 273 // TODO Auto-generated method stub 274 return null; 275 } 276 277 278 /** 279 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getSourceTransactionLine(int) 280 */ 281 public EndowmentSourceTransactionLine getSourceTransactionLine(int index) { 282 if (sourceTransactionLines != null && !sourceTransactionLines.isEmpty()) { 283 if (index < sourceTransactionLines.size()) { 284 return (EndowmentSourceTransactionLine) getSourceTransactionLines().get(index); 285 } 286 } 287 288 return null; 289 } 290 291 /** 292 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getTargetTransactionLine(int) 293 */ 294 public EndowmentTargetTransactionLine getTargetTransactionLine(int index) { 295 if (targetTransactionLines != null && !targetTransactionLines.isEmpty()) { 296 if (index < targetTransactionLines.size()) { 297 return (EndowmentTargetTransactionLine) getTargetTransactionLines().get(index); 298 } 299 } 300 301 return null; 302 } 303 304 305 /** 306 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getTargetTotalAmount() 307 */ 308 public KualiDecimal getTargetTotalAmount() { 309 KualiDecimal totalAmount = KualiDecimal.ZERO; 310 311 // totalAmount = TotalIncomeAmount + TotalPrincipalAmount 312 if (getTargetIncomeTotal() != null) { 313 totalAmount = totalAmount.add(getTargetIncomeTotal()); 314 } 315 if (getTargetPrincipalTotal() != null) { 316 totalAmount = totalAmount.add(getTargetPrincipalTotal()); 317 } 318 319 return totalAmount; 320 } 321 322 323 /** 324 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getSourceTotalAmount() 325 */ 326 public KualiDecimal getSourceTotalAmount() { 327 KualiDecimal totalAmount = KualiDecimal.ZERO; 328 329 // totalAmount = TotalIncomeAmount + TotalPrincipalAmount 330 if (getSourceIncomeTotal() != null) { 331 totalAmount = totalAmount.add(getSourceIncomeTotal()); 332 } 333 if (getSourcePrincipalTotal() != null) { 334 totalAmount = totalAmount.add(getSourcePrincipalTotal()); 335 } 336 337 return totalAmount; 338 } 339 340 341 /** 342 * Base implementation to compute the document total amount. Documents that display the total amount will implement the 343 * AmountTotaling interface and can override this method if needed. 344 * 345 * @return the total units for the document 346 */ 347 public KualiDecimal getTotalDollarAmount() { 348 349 KualiDecimal totalAmount = KualiDecimal.ZERO; 350 if (getTargetTotalAmount() != null && getTargetTotalAmount().compareTo(KualiDecimal.ZERO) == 0) { 351 totalAmount = getSourceTotalAmount(); 352 } 353 else if (getTargetTotalAmount() != null) { 354 totalAmount = getTargetTotalAmount(); 355 } 356 357 return totalAmount; 358 359 } 360 361 362 /** 363 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getSourceTotalUnits() 364 */ 365 public KualiDecimal getSourceTotalUnits() { 366 KualiDecimal totalUnits = KualiDecimal.ZERO; 367 // totalUnits = TotalIncomeUnits + TotalPrincipalUnits 368 369 if (getSourceIncomeTotalUnits() != null) { 370 totalUnits = totalUnits.add(getSourceIncomeTotalUnits()); 371 } 372 373 if (getSourcePrincipalTotalUnits() != null) { 374 totalUnits = totalUnits.add(getSourcePrincipalTotalUnits()); 375 } 376 377 return totalUnits; 378 } 379 380 /** 381 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getTargetTotalUnits() 382 */ 383 public KualiDecimal getTargetTotalUnits() { 384 KualiDecimal totalUnits = KualiDecimal.ZERO; 385 // totalUnits = TotalIncomeUnits + TotalPrincipalUnits 386 if (getTargetIncomeTotalUnits() != null) { 387 totalUnits = totalUnits.add(getTargetIncomeTotalUnits()); 388 } 389 390 if (getTargetPrincipalTotalUnits() != null) { 391 totalUnits = totalUnits.add(getTargetPrincipalTotalUnits()); 392 } 393 394 return totalUnits; 395 } 396 397 398 /** 399 * @see org.kuali.kfs.module.endow.document.EndowmentTransactionLinesDocument#getTotalUnits() 400 */ 401 public KualiDecimal getTotalUnits() { 402 KualiDecimal totalUnits = KualiDecimal.ZERO; 403 if (getTargetTotalUnits() != null && getTargetTotalUnits().compareTo(KualiDecimal.ZERO) == 0) { 404 totalUnits = getSourceTotalUnits(); 405 } 406 else if (getTargetTotalUnits() != null) { 407 totalUnits = getTargetTotalUnits(); 408 } 409 410 return totalUnits; 411 } 412 413 /** 414 * @see org.kuali.rice.kns.bo.PersistableBusinessObjectBase#buildListOfDeletionAwareLists() 415 */ 416 @Override 417 public List buildListOfDeletionAwareLists() { 418 List managedList = super.buildListOfDeletionAwareLists(); 419 420 managedList.add(getTargetTransactionLines()); 421 managedList.add(getSourceTransactionLines()); 422 423 return managedList; 424 } 425 426 /** 427 * 428 * @see org.kuali.rice.kns.document.DocumentBase#toCopy() 429 */ 430 @Override 431 public void toCopy() throws WorkflowException { 432 super.toCopy(); 433 434 this.setTransactionPosted(false); 435 436 List<EndowmentTransactionLine> lines = new ArrayList<EndowmentTransactionLine>(); 437 if (sourceTransactionLines != null) lines.addAll(sourceTransactionLines); 438 if (targetTransactionLines != null) lines.addAll(targetTransactionLines); 439 440 for (EndowmentTransactionLine line : lines) { 441 line.setLinePosted(false); 442 } 443 } 444 445 /** 446 * @see org.kuali.kfs.sys.document.Correctable#toErrorCorrection() 447 */ 448 @Override 449 public void toErrorCorrection() throws WorkflowException, IllegalStateException { 450 super.toErrorCorrection(); 451 452 this.setTransactionPosted(false); 453 454 // Negate the Tx lines 455 List<EndowmentTransactionLine> lines = new ArrayList<EndowmentTransactionLine>(); 456 lines.addAll(sourceTransactionLines); 457 lines.addAll(targetTransactionLines); 458 459 for (EndowmentTransactionLine line : lines) { 460 line.setLinePosted(false); 461 line.setTransactionAmount(line.getTransactionAmount().negated()); 462 if (null != line.getTransactionUnits() && !line.getTransactionUnits().isZero()) 463 line.setTransactionUnits(line.getTransactionUnits().negated()); 464 } 465 } 466 467 public Class getTranLineClass(boolean isSource) { 468 if (isSource) 469 return EndowmentSourceTransactionLine.class; 470 else 471 return EndowmentTargetTransactionLine.class; 472 } 473 474 public LineParser getLineParser() { 475 return new LineParserBase(); 476 } 477 }