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.businessobject;
017
018 import java.math.BigDecimal;
019 import java.util.LinkedHashMap;
020
021 import org.kuali.kfs.module.endow.EndowConstants;
022 import org.kuali.rice.kns.bo.TransientBusinessObjectBase;
023
024 public class GLCombinedTransactionArchive extends TransientBusinessObjectBase {
025
026 private long combinedEntryCount = 0;
027
028 private BigDecimal incomeAmount;
029 private BigDecimal principalAmount;
030 private BigDecimal holdingAmount;
031 private BigDecimal longTermAmount;
032 private BigDecimal shortTermAmount;
033 private String documentNumber;
034 private int lineNumber;
035 private String lineTypeCode;
036 private String typeCode;
037 private String subTypeCode;
038 private String kemid;
039 private String incomePrincipalIndicatorCode;
040
041 //KEMIDGeneralLinkTable...
042 private String chartCode;
043 private String accountNumber;
044 private String objectCode;
045 private String nonCashOffsetObjectCode;
046
047 public GLCombinedTransactionArchive() {
048 chartCode = null;
049 accountNumber = null;
050 objectCode = null;
051 nonCashOffsetObjectCode = null;
052
053 lineTypeCode = null;
054 subTypeCode = null;
055 typeCode = null;
056 incomePrincipalIndicatorCode = null;
057 kemid = null;
058 documentNumber = null;
059
060 this.initializeAmounts();
061 }
062
063 /**
064 * gets documentNumber
065 * @return documentNumber
066 */
067 public String getDocumentNumber() {
068 return documentNumber;
069 }
070
071 /**
072 * sets documentNumber attribute
073 * @param documentNumber
074 */
075 public void setDocumentNumber(String documentNumber) {
076 this.documentNumber = documentNumber;
077 }
078
079 /**
080 * gets lineNumber
081 * @return lineNumber
082 */
083 public int getLineNumber() {
084 return lineNumber;
085 }
086
087 /**
088 * sets lineNumber attribute
089 * @param lineNumber
090 */
091 public void setLineNumber(int lineNumber) {
092 this.lineNumber = lineNumber;
093 }
094
095 /**
096 * gets lineTypeCode
097 * @return lineTypeCode
098 */
099 public String getLineTypeCode() {
100 return lineTypeCode;
101 }
102
103 /**
104 * sets lineTypeCode attribute
105 * @param lineTypeCode
106 */
107 public void setLineTypeCode(String lineTypeCode) {
108 this.lineTypeCode = lineTypeCode;
109 }
110
111 /**
112 * gets typeCode
113 * @return typeCode
114 */
115 public String getTypeCode() {
116 return typeCode;
117 }
118
119 /**
120 * sets typeCode attribute
121 * @param typeCode
122 */
123 public void setTypeCode(String typeCode) {
124 this.typeCode = typeCode;
125 }
126
127 /**
128 * gets subTypeCode
129 * @return subTypeCode
130 */
131 public String getSubTypeCode() {
132 return subTypeCode;
133 }
134
135 /**
136 * sets subTypeCode attribute
137 * @param subTypeCode
138 */
139 public void setSubTypeCode(String subTypeCode) {
140 this.subTypeCode = subTypeCode;
141 }
142
143 /**
144 * gets incomePrincipalIndicatorCode
145 * @return incomePrincipalIndicatorCode
146 */
147 public String getIncomePrincipalIndicatorCode() {
148 return incomePrincipalIndicatorCode;
149 }
150
151 /**
152 * sets incomePrincipalIndicatorCode attribute
153 * @param incomePrincipalIndicatorCode
154 */
155 public void setIncomePrincipalIndicatorCode(String incomePrincipalIndicatorCode) {
156 this.incomePrincipalIndicatorCode = incomePrincipalIndicatorCode;
157 }
158
159 /**
160 * gets holdingAmount
161 * @return holdingAmount
162 */
163 public BigDecimal getHoldingAmount() {
164 return holdingAmount;
165 }
166
167 /**
168 * sets holdingAmount attribute
169 * @param holdingAmount
170 */
171 public void setHoldingAmount(BigDecimal holdingAmount) {
172 this.holdingAmount = holdingAmount;
173 }
174
175 /**
176 * Gets the longTermAmount attribute.
177 * @return Returns the longTermAmount.
178 */
179 public BigDecimal getLongTermAmount() {
180 return longTermAmount;
181 }
182
183 /**
184 * Sets the longTermAmount attribute value.
185 * @param longTermAmount The longTermAmount to set.
186 */
187 public void setLongTermAmount(BigDecimal longTermAmount) {
188 this.longTermAmount = longTermAmount;
189 }
190
191 /**
192 * Gets the shortTermAmount attribute.
193 * @return Returns the shortTermAmount.
194 */
195 public BigDecimal getShortTermAmount() {
196 return shortTermAmount;
197 }
198
199 /**
200 * Sets the shortTermAmount attribute value.
201 * @param shortTermAmount The shortTermGainLoss to set.
202 */
203 public void setShortTermAmount(BigDecimal shortTermAmount) {
204 this.shortTermAmount = shortTermAmount;
205 }
206
207 /**
208 * gets chartCode
209 * @return chartCode
210 */
211 public String getChartCode() {
212 return chartCode;
213 }
214
215 /**
216 * sets chartCode attribute
217 * @param chartCode
218 */
219 public void setChartCode(String chartCode) {
220 this.chartCode = chartCode;
221 }
222
223 /**
224 * gets accountNumber
225 * @return accountNumber
226 */
227 public String getAccountNumber() {
228 return accountNumber;
229 }
230
231 /**
232 * sets documentNumber attribute
233 * @param documentNumber
234 */
235 public void setAccountNumber(String accountNumber) {
236 this.accountNumber = accountNumber;
237 }
238
239 /**
240 * gets objectCode
241 * @return objectCode
242 */
243 public String getObjectCode() {
244 return objectCode;
245 }
246
247 /**
248 * sets objectCode attribute
249 * @param objectCode
250 */
251 public void setObjectCode(String objectCode) {
252 this.objectCode = objectCode;
253 }
254
255 /**
256 * gets kemid attribute
257 * @return kemid;
258 */
259 public String getKemid() {
260 return kemid;
261 }
262
263 /**
264 * set kemid attribute
265 * @param kemid
266 */
267 public void setKemid(String kemid) {
268 this.kemid = kemid;
269 }
270
271 /**
272 * method to initialize the amount fields...
273 */
274 public void initializeAmounts() {
275 combinedEntryCount = 0;
276
277 incomeAmount = BigDecimal.ZERO;
278 principalAmount = BigDecimal.ZERO;
279 holdingAmount = BigDecimal.ZERO;
280 longTermAmount = BigDecimal.ZERO;
281 shortTermAmount = BigDecimal.ZERO;
282 }
283
284 /**
285 * gets attribute combinedEntryCount
286 * @return combinedEntryCount
287 */
288 public long getCombinedEntryCount() {
289 return combinedEntryCount;
290 }
291
292 /**
293 * sets attribute combinedEntryCount
294 */
295 public void setCombinedEntryCount(long combinedEntryCount) {
296 this.combinedEntryCount = combinedEntryCount;
297 }
298
299 /**
300 * gets attribute incomeAmount
301 * @return incomeAmount
302 */
303 public BigDecimal getIncomeAmount() {
304 return incomeAmount;
305 }
306
307 /**
308 * sets attribute incomeAmount
309 */
310 public void setIncomeAmount(BigDecimal incomeAmount) {
311 this.incomeAmount = incomeAmount;
312 }
313
314 /**
315 * gets attribute principalAmount
316 * @return principalAmount
317 */
318 public BigDecimal getPrincipalAmount() {
319 return principalAmount;
320 }
321
322 /**
323 * sets attribute principalAmount
324 */
325 public void setPrincipalAmount(BigDecimal principalAmount) {
326 this.principalAmount = principalAmount;
327 }
328
329 /**
330 * method to increment combinedEntryCount
331 */
332 public void incrementCombinedEntryCount() {
333 this.combinedEntryCount++;
334 }
335
336 /**
337 * method to copy values from archive transaction to properties in the transient
338 * business object so they can be copied to the combined transaction archive line later
339 * The amounts from single transaction archive are added to the property variables and
340 * will be copied to the combined archive record.
341 *
342 * @param kemArchiveTransaction
343 * @param cashType
344 */
345 public void copyKemArchiveTransactionValues(GlInterfaceBatchProcessKemLine kemArchiveTransaction, boolean cashType) {
346
347 lineNumber = kemArchiveTransaction.getLineNumber();
348 lineTypeCode = kemArchiveTransaction.getLineTypeCode();
349 subTypeCode = kemArchiveTransaction.getSubTypeCode();
350 typeCode = kemArchiveTransaction.getTypeCode();
351 incomePrincipalIndicatorCode = kemArchiveTransaction.getIncomePrincipalIndicatorCode();
352 kemid = kemArchiveTransaction.getKemid();
353 documentNumber = kemArchiveTransaction.getDocumentNumber();
354 nonCashOffsetObjectCode = kemArchiveTransaction.getNonCashOffsetObjectCode();
355
356 if (cashType) {
357 incomeAmount = incomeAmount.add(kemArchiveTransaction.getTransactionArchiveIncomeAmount());
358 principalAmount = principalAmount.add(kemArchiveTransaction.getTransactionArchivePrincipalAmount());
359 if (EndowConstants.DocumentTypeNames.ENDOWMENT_ASSET_DECREASE.equalsIgnoreCase(kemArchiveTransaction.getTypeCode())) {
360 holdingAmount = holdingAmount.add(kemArchiveTransaction.getHoldingCost());
361 shortTermAmount = shortTermAmount.add(kemArchiveTransaction.getShortTermGainLoss());
362 longTermAmount = longTermAmount.add(kemArchiveTransaction.getLongTermGainLoss());
363 }
364 }
365 else {
366 holdingAmount = holdingAmount.add(kemArchiveTransaction.getHoldingCost());
367 shortTermAmount = shortTermAmount.add(kemArchiveTransaction.getShortTermGainLoss());
368 longTermAmount = longTermAmount.add(kemArchiveTransaction.getLongTermGainLoss());
369 }
370 }
371
372 /**
373 * method to copy values from transaction archive into chart, account number, and object code
374 * @param kemArchiveTransaction
375 */
376 public void copyChartAndAccountNumberAndObjectCodeValues(GlInterfaceBatchProcessKemLine kemArchiveTransaction) {
377 this.setChartCode(kemArchiveTransaction.getChartCode());
378 this.setAccountNumber(kemArchiveTransaction.getAccountNumber());
379 this.setObjectCode(kemArchiveTransaction.getObjectCode());
380 }
381
382 /**
383 * method to copy the values stored in the bo to the combined transaction archive record
384 * @param cashType
385 */
386 public GlInterfaceBatchProcessKemLine copyValuesToCombinedTransactionArchive(boolean cashType) {
387 GlInterfaceBatchProcessKemLine glKemLine = new GlInterfaceBatchProcessKemLine();
388
389 if (combinedEntryCount > 1) {
390 glKemLine.setDocumentNumber("Summary");
391 glKemLine.setKemid("Summary");
392 }
393 else {
394 glKemLine.setDocumentNumber(documentNumber);
395 glKemLine.setKemid(kemid);
396 }
397 glKemLine.setLineNumber(lineNumber);
398 glKemLine.setLineTypeCode(lineTypeCode);
399 glKemLine.setSubTypeCode(subTypeCode);
400 glKemLine.setTypeCode(typeCode);
401 glKemLine.setIncomePrincipalIndicatorCode(incomePrincipalIndicatorCode);
402 glKemLine.setObjectCode(objectCode);
403 glKemLine.setNonCashOffsetObjectCode(nonCashOffsetObjectCode);
404
405 //get transaction amount....
406 if (cashType) {
407 glKemLine.setTransactionArchiveIncomeAmount(incomeAmount);
408 glKemLine.setTransactionArchivePrincipalAmount(principalAmount);
409 glKemLine.setHoldingCost(BigDecimal.ZERO);
410 glKemLine.setLongTermGainLoss(BigDecimal.ZERO);
411 glKemLine.setShortTermGainLoss(BigDecimal.ZERO);
412 if (glKemLine.getTypeCode().equalsIgnoreCase(EndowConstants.DocumentTypeNames.ENDOWMENT_ASSET_DECREASE)) {
413 glKemLine.setHoldingCost(holdingAmount);
414 glKemLine.setShortTermGainLoss(shortTermAmount);
415 glKemLine.setLongTermGainLoss(longTermAmount);
416 }
417 }
418 else {
419 glKemLine.setTransactionArchiveIncomeAmount(BigDecimal.ZERO);
420 glKemLine.setTransactionArchivePrincipalAmount(BigDecimal.ZERO);
421 glKemLine.setHoldingCost(holdingAmount);
422 glKemLine.setShortTermGainLoss(shortTermAmount);
423 glKemLine.setLongTermGainLoss(longTermAmount);
424 }
425
426 glKemLine.setChartCode(chartCode);
427 glKemLine.setAccountNumber(accountNumber);
428
429 return glKemLine;
430 }
431
432 /**
433 * gets attribute nonCashOffsetObjectCode
434 * @return nonCashOffsetObjectCode
435 */
436 public String getNonCashOffsetObjectCode() {
437 return nonCashOffsetObjectCode;
438 }
439
440 /**
441 * sets attribute nonCashOffsetObjectCode
442 */
443 public void setNonCashOffsetObjectCode(String nonCashOffsetObjectCode) {
444 this.nonCashOffsetObjectCode = nonCashOffsetObjectCode;
445 }
446
447 /**
448 * A map of the "keys" of this transient business object
449 * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
450 */
451 @Override
452 protected LinkedHashMap toStringMapper() {
453 LinkedHashMap pks = new LinkedHashMap<String, Object>();
454
455 pks.put("documentNumber", this.getDocumentNumber());
456 pks.put("lineNumber", this.getLineNumber());
457 pks.put("lineTypeCode", this.getLineTypeCode());
458 pks.put("typeCode", this.getTypeCode());
459 pks.put("kemid", this.getKemid());
460 pks.put("subTypeCode", this.getSubTypeCode());
461 pks.put("incomePrincipalIndicatorCode", this.getIncomePrincipalIndicatorCode());
462 pks.put("holdingAmount", this.getHoldingAmount());
463 pks.put(longTermAmount, this.getLongTermAmount());
464 pks.put("shortTermAmount", this.getShortTermAmount());
465 pks.put("chartCode", this.getChartCode());
466 pks.put("objectCode", this.getObjectCode());
467 pks.put("accountNumber", this.getAccountNumber());
468 pks.put("nonCashOffsetObjectCode", this.getNonCashOffsetObjectCode());
469
470 return pks;
471 }
472 }