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 }