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.math.BigInteger;
020    import java.sql.Date;
021    import java.util.LinkedHashMap;
022    import java.util.List;
023    
024    import org.apache.commons.lang.StringUtils;
025    import org.kuali.kfs.module.endow.EndowPropertyConstants;
026    import org.kuali.kfs.sys.KFSConstants;
027    import org.kuali.kfs.sys.context.SpringContext;
028    import org.kuali.rice.kew.doctype.bo.DocumentType;
029    import org.kuali.rice.kew.doctype.service.DocumentTypeService;
030    import org.kuali.rice.kns.bo.DocumentHeader;
031    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
032    import org.kuali.rice.kns.util.ObjectUtils;
033    import org.kuali.rice.kns.util.TypedArrayList;
034    
035    /**
036     * Business Object for Holding Tax Lot table
037     */
038    public class TransactionArchive extends PersistableBusinessObjectBase {
039        
040        // Composite keys:
041        private String  documentNumber;
042        private Integer lineNumber;
043        private String  lineTypeCode;
044        
045        // Other fields:
046        private String description;
047        private String typeCode;
048        private String subTypeCode;
049        private String srcTypeCode;
050        private String kemid;
051        private String etranCode;
052        private String lineDescription;
053        private String incomePrincipalIndicatorCode;
054        private BigDecimal principalCashAmount;
055        private BigDecimal incomeCashAmount;
056        private boolean corpusIndicator;
057        private BigDecimal corpusAmount;
058        private Date postedDate;
059        
060        // Reference objects:
061        protected List<TransactionArchiveSecurity> archiveSecurities;
062        protected EndowmentTransactionCode etranObj;
063        protected DocumentHeader documentHeader;
064        protected KEMID kemidObj;
065        
066        // Transient members:
067        private transient BigDecimal greaterAmount;
068        private transient BigDecimal lessAmount;
069        
070        public TransactionArchive()
071        {
072            archiveSecurities   = new TypedArrayList(TransactionArchiveSecurity.class);
073            principalCashAmount = new BigDecimal(BigInteger.ZERO, 2);
074            incomeCashAmount    = new BigDecimal(BigInteger.ZERO, 2);
075            corpusAmount        = new BigDecimal(BigInteger.ZERO, 2);
076        }
077        
078        /**
079         * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
080         */
081        @Override
082        protected LinkedHashMap<String, Object> toStringMapper() {
083            LinkedHashMap<String, Object> m = new LinkedHashMap<String, Object>();
084            m.put(EndowPropertyConstants.TRANSACTION_ARCHIVE_DOCUMENT_NUMBER, this.documentNumber);
085            m.put(EndowPropertyConstants.TRANSACTION_ARCHIVE_LINE_NUMBER, this.lineNumber);
086            m.put(EndowPropertyConstants.TRANSACTION_ARCHIVE_LINE_TYPE_CODE, this.lineTypeCode);
087            
088            return m;
089        }
090    
091        /**
092         * 
093         * This method returns a multi-line field.
094         * @return
095         */
096        public String getKemidResults() {
097            StringBuilder result = new StringBuilder();
098            if (ObjectUtils.isNotNull(kemidObj)) {
099                result.append("[" + kemid + "," + " ,");
100                result.append(kemidObj.getShortTitle() + "]");
101            }
102            
103            return result.toString();
104        }
105          
106        /**
107         * 
108         * This method returns a multi-line field.
109         * @return
110         */
111        public String getEtranCodeResults() {
112            StringBuilder result = new StringBuilder();
113            if (ObjectUtils.isNotNull(etranObj)) {
114                result.append("[" + etranCode + "," + " ,");
115                result.append(etranObj.getName() + "]");
116            }
117            
118            return result.toString();
119        }
120        
121        /**
122         * 
123         * This method returns a multi-line field.
124         * @return
125         */
126        public String getSecurityResults() {
127            StringBuilder result = new StringBuilder();
128            TransactionArchiveSecurity archiveSecurity = getArchiveSecurity();
129            if (ObjectUtils.isNotNull(archiveSecurity)) {
130                result.append("[" + archiveSecurity.getSecurityId() + "," + " ,");
131                result.append(archiveSecurity.getSecurity().getDescription() + "]");
132            }
133            
134            return result.toString();
135        }
136        
137        /**
138         * 
139         * Data for the transaction document type results column.
140         *
141         * @return
142         */
143        public String getDocumentTypeResults() {
144            
145            DocumentTypeService documentTypeService = SpringContext.getBean(DocumentTypeService.class);
146            DocumentType documentType = documentTypeService.findByName(typeCode);
147            
148            StringBuilder result = new StringBuilder();
149            result.append("[" + typeCode + "," + " ,");
150            
151            if (documentType != null) {
152                result.append(documentType.getLabel());
153            }
154            result.append("]");
155            
156            return result.toString();
157        }
158        
159        /**
160         * Gets the documentHeader attribute. 
161         * @return Returns the documentHeader.
162         */
163        public DocumentHeader getDocumentHeader() {
164            return documentHeader;
165        }
166    
167        /**
168         * Sets the documentHeader attribute value.
169         * @param documentHeader The documentHeader to set.
170         */
171        public void setDocumentHeader(DocumentHeader documentHeader) {
172            this.documentHeader = documentHeader;
173        }
174    
175        /**
176         * 
177         * This method...
178         * @return
179         */
180        public String getTransactionArchiveViewer() {
181            return "View Detail";
182        }
183    
184        /**
185         * Gets the etranObj attribute. 
186         * @return Returns the etranObj.
187         */
188        public EndowmentTransactionCode getEtranObj() {
189            return etranObj;
190        }
191    
192        /**
193         * Sets the etranObj attribute value.
194         * @param etranObj The etranObj to set.
195         */
196        public void setEtranObj(EndowmentTransactionCode etranObj) {
197            this.etranObj = etranObj;
198        }
199        
200        /**
201         * Gets the kemidObj attribute. 
202         * @return Returns the kemidObj.
203         */
204        public KEMID getKemidObj() {
205            return kemidObj;
206        }
207    
208        /**
209         * Sets the kemidObj attribute value.
210         * @param kemidObj The kemidObj to set.
211         */
212        public void setKemidObj(KEMID kemidObj) {
213            this.kemidObj = kemidObj;
214        }
215    
216        /**
217         * Gets the greaterAmount attribute. 
218         * @return Returns the greaterAmount.
219         */
220        public BigDecimal getGreaterAmount() {
221            return greaterAmount;
222        }
223    
224        /**
225         * Sets the greaterAmount attribute value.
226         * @param greaterAmount The greaterAmount to set.
227         */
228        public void setGreaterAmount(BigDecimal greaterAmount) {
229            this.greaterAmount = greaterAmount;
230        }
231    
232        /**
233         * Gets the lessAmount attribute. 
234         * @return Returns the lessAmount.
235         */
236        public BigDecimal getLessAmount() {
237            return lessAmount;
238        }
239    
240        /**
241         * Sets the lessAmount attribute value.
242         * @param lessAmount The lessAmount to set.
243         */
244        public void setLessAmount(BigDecimal lessAmount) {
245            this.lessAmount = lessAmount;
246        }
247    
248        /**
249         * Gets the archiveSecurity attribute. 
250         * @return Returns the archiveSecurity.
251         */
252        public TransactionArchiveSecurity getArchiveSecurity() {
253            return !archiveSecurities.isEmpty() ? archiveSecurities.get(0) 
254                   : new TransactionArchiveSecurity();
255        }
256    
257        /**
258         * Gets the documentNumber attribute. 
259         * @return Returns the documentNumber.
260         */
261        public String getDocumentNumber() {
262            return documentNumber;
263        }
264    
265        /**
266         * Sets the documentNumber attribute value.
267         * @param documentNumber The documentNumber to set.
268         */
269        public void setDocumentNumber(String documentNumber) {
270            this.documentNumber = documentNumber;
271        }
272    
273        /**
274         * Gets the lineNumber attribute. 
275         * @return Returns the lineNumber.
276         */
277        public Integer getLineNumber() {
278            return lineNumber;
279        }
280    
281        /**
282         * Sets the lineNumber attribute value.
283         * @param lineNumber The lineNumber to set.
284         */
285        public void setLineNumber(Integer lineNumber) {
286            this.lineNumber = lineNumber;
287        }
288    
289        /**
290         * Gets the lineTypeCode attribute. 
291         * @return Returns the lineTypeCode.
292         */
293        public String getLineTypeCode() {
294            return lineTypeCode;
295        }
296    
297        /**
298         * Sets the lineTypeCode attribute value.
299         * @param lineTypeCode The lineTypeCode to set.
300         */
301        public void setLineTypeCode(String lineTypeCode) {
302            this.lineTypeCode = lineTypeCode;
303        }
304    
305        /**
306         * Gets the description attribute. 
307         * @return Returns the description.
308         */
309        public String getDescription() {
310            return description;
311        }
312    
313        /**
314         * Sets the description attribute value.
315         * @param description The description to set.
316         */
317        public void setDescription(String description) {
318            this.description = description;
319        }
320    
321        /**
322         * Gets the typeCode attribute. 
323         * @return Returns the typeCode.
324         */
325        public String getTypeCode() {
326            return typeCode;
327        }
328    
329        /**
330         * Sets the typeCode attribute value.
331         * @param typeCode The typeCode to set.
332         */
333        public void setTypeCode(String typeCode) {
334            this.typeCode = typeCode;
335        }
336    
337        /**
338         * Gets the subTypeCode attribute. 
339         * @return Returns the subTypeCode.
340         */
341        public String getSubTypeCode() {
342            return subTypeCode;
343        }
344    
345        /**
346         * Sets the subTypeCode attribute value.
347         * @param subTypeCode The subTypeCode to set.
348         */
349        public void setSubTypeCode(String subTypeCode) {
350            this.subTypeCode = subTypeCode;
351        }
352    
353        /**
354         * Gets the srcTypeCode attribute. 
355         * @return Returns the srcTypeCode.
356         */
357        public String getSrcTypeCode() {
358            return srcTypeCode;
359        }
360    
361        /**
362         * Sets the srcTypeCode attribute value.
363         * @param srcTypeCode The srcTypeCode to set.
364         */
365        public void setSrcTypeCode(String srcTypeCode) {
366            this.srcTypeCode = srcTypeCode;
367        }
368    
369        /**
370         * Gets the kemid attribute. 
371         * @return Returns the kemid.
372         */
373        public String getKemid() {
374            return kemid;
375        }
376    
377        /**
378         * Sets the kemid attribute value.
379         * @param kemid The kemid to set.
380         */
381        public void setKemid(String kemid) {
382            this.kemid = kemid;
383        }
384    
385        /**
386         * Gets the etranCode attribute. 
387         * @return Returns the etranCode.
388         */
389        public String getEtranCode() {
390            return etranCode;
391        }
392    
393        /**
394         * Sets the etranCode attribute value.
395         * @param etranCode The etranCode to set.
396         */
397        public void setEtranCode(String etranCode) {
398            this.etranCode = etranCode;
399        }
400    
401        /**
402         * Gets the lineDescription attribute. 
403         * @return Returns the lineDescription.
404         */
405        public String getLineDescription() {
406            return lineDescription;
407        }
408    
409        /**
410         * Sets the lineDescription attribute value.
411         * @param lineDescription The lineDescription to set.
412         */
413        public void setLineDescription(String lineDescription) {
414            this.lineDescription = lineDescription;
415        }
416    
417        /**
418         * Gets the incomePrincipalIndicatorCode attribute. 
419         * @return Returns the incomePrincipalIndicatorCode.
420         */
421        public String getIncomePrincipalIndicatorCode() {
422            return incomePrincipalIndicatorCode;
423        }
424    
425        /**
426         * Sets the incomePrincipalIndicatorCode attribute value.
427         * @param incomePrincipalIndicatorCode The incomePrincipalIndicatorCode to set.
428         */
429        public void setIncomePrincipalIndicatorCode(String incomePrincipalIndicatorCode) {
430            this.incomePrincipalIndicatorCode = incomePrincipalIndicatorCode;
431        }
432    
433        /**
434         * Gets the principalCashAmount attribute. 
435         * @return Returns the principalCashAmount.
436         */
437        public BigDecimal getPrincipalCashAmount() {
438            return principalCashAmount;
439        }
440    
441        /**
442         * Sets the principalCashAmount attribute value.
443         * @param principalCashAmount The principalCashAmount to set.
444         */
445        public void setPrincipalCashAmount(BigDecimal principalCashAmount) {
446            this.principalCashAmount = principalCashAmount;
447        }
448    
449        /**
450         * Gets the incomeCashAmount attribute. 
451         * @return Returns the incomeCashAmount.
452         */
453        public BigDecimal getIncomeCashAmount() {
454            return incomeCashAmount;
455        }
456    
457        /**
458         * Sets the incomeCashAmount attribute value.
459         * @param incomeCashAmount The incomeCashAmount to set.
460         */
461        public void setIncomeCashAmount(BigDecimal incomeCashAmount) {
462            this.incomeCashAmount = incomeCashAmount;
463        }
464    
465        /**
466         * Gets the corpusIndicator attribute. 
467         * @return Returns the corpusIndicator.
468         */
469        public boolean getCorpusIndicator() {
470            return corpusIndicator;
471        }
472    
473        /**
474         * Sets the corpusIndicator attribute value.
475         * @param corpusIndicator The corpusIndicator to set.
476         */
477        public void setCorpusIndicator(boolean corpusIndicator) {
478            this.corpusIndicator = corpusIndicator;
479        }
480    
481        /**
482         * Gets the corpusAmount attribute. 
483         * @return Returns the corpusAmount.
484         */
485        public BigDecimal getCorpusAmount() {
486            return corpusAmount;
487        }
488    
489        /**
490         * Sets the corpusAmount attribute value.
491         * @param corpusAmount The corpusAmount to set.
492         */
493        public void setCorpusAmount(BigDecimal corpusAmount) {
494            this.corpusAmount = corpusAmount;
495        }
496    
497        /**
498         * Gets the postedDate attribute. 
499         * @return Returns the postedDate.
500         */
501        public Date getPostedDate() {
502            return postedDate;
503        }
504    
505        /**
506         * Sets the postedDate attribute value.
507         * @param postedDate The postedDate to set.
508         */
509        public void setPostedDate(Date postedDate) {
510            this.postedDate = postedDate;
511        }
512    
513        /**
514         * Gets the archiveSecurities attribute. 
515         * @return Returns the archiveSecurities.
516         */
517        public List<TransactionArchiveSecurity> getArchiveSecurities() {
518            return archiveSecurities;
519        }
520    
521        /**
522         * Sets the archiveSecurities attribute value.
523         * @param archiveSecurities The archiveSecurities to set.
524         */
525        public void setArchiveSecurities(List<TransactionArchiveSecurity> archiveSecurities) {
526            this.archiveSecurities = archiveSecurities;
527        }
528        /**
529         * Gets the code and description 
530         * @return Returns code + " - " + description  
531         */
532        public String getCodeAndDescription() {
533            if (StringUtils.isEmpty(typeCode)) {
534                return KFSConstants.EMPTY_STRING;
535            }
536            return typeCode + " - " + description;
537        }
538        
539        /**
540         * Sets the codeAndDescription attribute value.
541         * @param set codeAndDescription 
542         */
543        public void setCodeAndDescription(String codeAndDescription) {}
544        
545    }