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.report.util;
017    
018    import java.math.BigDecimal;
019    import java.util.ArrayList;
020    import java.util.List;
021    
022    import org.kuali.rice.kns.util.ObjectUtils;
023    /*
024     * class for holding data for transaction summary report
025     */
026    public class TransactionSummaryReportDataHolder {
027        // header
028        protected String institution;
029        protected String beginningDate;
030        protected String endingDate;
031        protected String kemid;
032        protected String kemidLongTitle;
033        
034        //body
035        protected BigDecimal incomeBeginningMarketValue = BigDecimal.ZERO;
036        protected BigDecimal principalBeginningMarketValue = BigDecimal.ZERO;
037    
038        //list of contributions and other income records..
039        protected List<ContributionsDataHolder> reportGroupsForContributions;
040        
041        //list of expenses records...
042        protected List<ExpensesDataHolder> reportGroupsForExpenses;
043        
044        //list of cash transfers....
045        protected List<CashTransfersDataHolder> reportGroupsForCashTransfers;
046        
047        //list of security transfers....
048        protected List<SecurityTransfersDataHolder> reportGroupsForSecurityTransfers;
049        
050        //change in market value data
051        protected BigDecimal incomeChangeInMarketValue = BigDecimal.ZERO;
052        protected BigDecimal principalChangeInMarketValue = BigDecimal.ZERO;
053    
054        //period end total market value (including cash) data
055        protected BigDecimal incomeEndingMarketValue = BigDecimal.ZERO;
056        protected BigDecimal principalEndingMarketValue = BigDecimal.ZERO;
057    
058        protected BigDecimal next12MonthsEstimatedIncome = BigDecimal.ZERO;
059        protected BigDecimal remainderOfFYEstimatedIncome = BigDecimal.ZERO;
060        protected BigDecimal nextFYEstimatedIncome = BigDecimal.ZERO;
061        
062        // footer
063        protected EndowmentReportFooterDataHolder footer;
064        
065        public TransactionSummaryReportDataHolder() {
066            reportGroupsForContributions = new ArrayList<ContributionsDataHolder>();   
067            reportGroupsForExpenses = new ArrayList<ExpensesDataHolder>();
068            reportGroupsForCashTransfers = new ArrayList<CashTransfersDataHolder>();
069            reportGroupsForSecurityTransfers = new ArrayList<SecurityTransfersDataHolder>();
070            
071            footer = null;        
072        }
073        
074        /**
075         * Gets the first row description
076         * 
077         * @return description
078         */
079        protected String getBeginningDescription() {
080            return "Beginning Market Value";
081        }
082        
083        /**
084         * Gets the last row description
085         * 
086         * @return
087         */
088        protected String getEndingDescription() {
089            return "Period End total Market Value (including Cash)";
090        }
091    
092        /**
093         * gets attribute institution
094         * @return institution
095         */
096        protected String getInstitution() {
097            return institution;
098        }
099    
100        /**
101         * sets attribute institution
102         */
103        public void setInstitution(String institution) {
104            this.institution = institution;
105        }
106    
107        /**
108         * gets attribute beginningDate
109         * @return beginningDate
110         */
111        protected String getBeginningDate() {
112            return beginningDate;
113        }
114    
115        /**
116         * sets attribute beginningDate
117         */
118        public void setBeginningDate(String beginningDate) {
119            this.beginningDate = beginningDate;
120        }
121    
122        /**
123         * gets attribute endingDate
124         * @return endingDate
125         */
126        protected String getEndingDate() {
127            return endingDate;
128        }
129    
130        /**
131         * sets attribute endingDate
132         */
133        public void setEndingDate(String endingDate) {
134            this.endingDate = endingDate;
135        }
136    
137        /**
138         * gets attribute incomeBeginningMarketValue
139         * @return incomeBeginningMarketValue
140         */
141        public BigDecimal getIncomeBeginningMarketValue() {
142            if (ObjectUtils.isNull(incomeBeginningMarketValue)) {
143                return BigDecimal.ZERO;
144            }
145            
146            return incomeBeginningMarketValue;
147        }
148    
149        /**
150         * sets attribute incomeBeginningMarketValue
151         */
152        public void setIncomeBeginningMarketValue(BigDecimal incomeBeginningMarketValue) {
153            this.incomeBeginningMarketValue = incomeBeginningMarketValue;
154        }
155    
156        /**
157         * gets attribute principalBeginningMarketValue
158         * @return principalBeginningMarketValue
159         */
160        public BigDecimal getPrincipalBeginningMarketValue() {
161            if (ObjectUtils.isNull(principalBeginningMarketValue)) {
162                return BigDecimal.ZERO;
163            }
164            
165            return principalBeginningMarketValue;
166        }
167    
168        /**
169         * sets attribute principalBeginningMarketValue
170         */
171        public void setPrincipalBeginningMarketValue(BigDecimal principalBeginningMarketValue) {
172            this.principalBeginningMarketValue = principalBeginningMarketValue;
173        }
174        
175        /**
176         * gets total beginning market value
177         * @return sum of incomeBeginningMarketValue and principleBeginningMarketValue
178         */
179        public BigDecimal getTotalBeginningMarketValue() {
180            return this.getIncomeBeginningMarketValue().add(this.getPrincipalBeginningMarketValue());
181        }
182    
183        /**
184         * gets attribute incomeChangeInMarketValue
185         * @return incomeChangeInMarketValue
186         */
187        public BigDecimal getIncomeChangeInMarketValue() {
188            if (ObjectUtils.isNull(incomeChangeInMarketValue)) {
189                return BigDecimal.ZERO;
190            }
191            
192            return incomeChangeInMarketValue;
193        }
194    
195        /**
196         * sets attribute incomeChangeInMarketValue
197         */
198        public void setIncomeChangeInMarketValue(BigDecimal incomeChangeInMarketValue) {
199            this.incomeChangeInMarketValue = incomeChangeInMarketValue;
200        }
201    
202        /**
203         * gets attribute principalChangeInMarketValue
204         * @return principalChangeInMarketValue
205         */
206        public BigDecimal getPrincipalChangeInMarketValue() {
207            if (ObjectUtils.isNull(principalChangeInMarketValue)) {
208                return BigDecimal.ZERO;
209            }
210            
211            return principalChangeInMarketValue;
212        }
213    
214        /**
215         * sets attribute principalChangeInMarketValue
216         */
217        public void setPrincipalChangeInMarketValue(BigDecimal principalChangeInMarketValue) {
218            this.principalChangeInMarketValue = principalChangeInMarketValue;
219        }
220        
221        /**
222         * gets total market value by adding incomeChangeInMarketValue and 
223         * principalChangeInMarketValue
224         * @return sum
225         */
226        public BigDecimal getTotalChangeInMarketValue() {
227            return this.getIncomeChangeInMarketValue().add(this.getPrincipalChangeInMarketValue());
228        }
229    
230        /**
231         * gets attribute incomeEndingMarketValue
232         * @return incomeEndingMarketValue
233         */
234        public BigDecimal getIncomeEndingMarketValue() {
235            if (ObjectUtils.isNull(incomeEndingMarketValue)) {
236                return BigDecimal.ZERO;
237            }
238            
239            return incomeEndingMarketValue;
240        }
241    
242        /**
243         * sets attribute incomeEndingMarketValue
244         */
245        public void setIncomeEndingMarketValue(BigDecimal incomeEndingMarketValue) {
246            this.incomeEndingMarketValue = incomeEndingMarketValue;
247        }
248    
249        
250        /**
251         * gets attribute kemid
252         * @return kemid
253         */
254        public String getKemid() {
255            return kemid;
256        }
257    
258        /**
259         * sets attribute kemid
260         */
261        public void setKemid(String kemid) {
262            this.kemid = kemid;
263        }
264    
265        /**
266         * gets attribute kemidLongTitle
267         * @return kemidLongTitle
268         */
269        public String getKemidLongTitle() {
270            return kemidLongTitle;
271        }
272    
273        /**
274         * sets attribute kemidLongTitle
275         */
276        public void setKemidLongTitle(String kemidLongTitle) {
277            this.kemidLongTitle = kemidLongTitle;
278        }
279    
280        /**
281         * gets attribute reportGroupsForExpenses
282         * @return reportGroupsForExpenses
283         */
284        public List<ExpensesDataHolder> getReportGroupsForExpenses() {
285            return reportGroupsForExpenses;
286        }
287    
288        /**
289         * sets attribute reportGroupsForExpenses
290         */
291        public void setReportGroupsForExpenses(List<ExpensesDataHolder> reportGroupsForExpenses) {
292            this.reportGroupsForExpenses = reportGroupsForExpenses;
293        }
294    
295        /**
296         * gets attribute principalEndingMarketValue
297         * @return principalEndingMarketValue
298         */
299        public BigDecimal getPrincipalEndingMarketValue() {
300            if (ObjectUtils.isNull(principalEndingMarketValue)) {
301                return BigDecimal.ZERO;
302            }
303            
304            return principalEndingMarketValue;
305        }
306    
307        /**
308         * sets attribute principalEndingMarketValue
309         */
310        public void setPrincipalEndingMarketValue(BigDecimal principalEndingMarketValue) {
311            this.principalEndingMarketValue = principalEndingMarketValue;
312        }
313    
314        /**
315         * gets total ending market value by adding incomeEndingMarketValue and 
316         * principalEndingMarketValue
317         * @return sum
318         */
319        public BigDecimal getTotalEndingMarketValue() {
320            return this.getIncomeEndingMarketValue().add(this.getPrincipalEndingMarketValue());
321        }
322        
323        /**
324         * gets attribute next12MonthsEstimatedIncome
325         * @return next12MonthsEstimatedIncome
326         */
327        public BigDecimal getNext12MonthsEstimatedIncome() {
328            if (ObjectUtils.isNull(next12MonthsEstimatedIncome)) {
329                return BigDecimal.ZERO;
330            }
331            
332            return next12MonthsEstimatedIncome;
333        }
334    
335        /**
336         * sets attribute next12MonthsEstimatedIncome
337         */
338        public void setNext12MonthsEstimatedIncome(BigDecimal next12MonthsEstimatedIncome) {
339            this.next12MonthsEstimatedIncome = next12MonthsEstimatedIncome;
340        }
341    
342        /**
343         * gets attribute remainderOfFYEstimatedIncome
344         * @return remainderOfFYEstimatedIncome
345         */
346        public BigDecimal getRemainderOfFYEstimatedIncome() {
347            if (ObjectUtils.isNull(remainderOfFYEstimatedIncome)) {
348                return BigDecimal.ZERO;
349            }
350            
351            return remainderOfFYEstimatedIncome;
352        }
353    
354        /**
355         * sets attribute remainderOfFYEstimatedIncome
356         */
357        public void setRemainderOfFYEstimatedIncome(BigDecimal remainderOfFYEstimatedIncome) {
358            this.remainderOfFYEstimatedIncome = remainderOfFYEstimatedIncome;
359        }
360    
361        /**
362         * gets attribute nextFYEstimatedIncome
363         * @return nextFYEstimatedIncome
364         */
365        public BigDecimal getNextFYEstimatedIncome() {
366            if (ObjectUtils.isNull(nextFYEstimatedIncome)) {
367                return BigDecimal.ZERO;
368            }
369            
370            return nextFYEstimatedIncome;
371        }
372    
373        /**
374         * sets attribute nextFYEstimatedIncome
375         */
376        public void setNextFYEstimatedIncome(BigDecimal nextFYEstimatedIncome) {
377            this.nextFYEstimatedIncome = nextFYEstimatedIncome;
378        }
379    
380        /**
381         * gets attribute reportGroupsForContributions
382         * @return reportGroupsForContributions
383         */
384        public List<ContributionsDataHolder> getReportGroupsForContributions() {
385            return reportGroupsForContributions;
386        }
387    
388        
389        /**
390         * gets attribute reportGroupsForCashTransfers
391         * @return reportGroupsForCashTransfers
392         */
393        public List<CashTransfersDataHolder> getReportGroupsForCashTransfers() {
394            return reportGroupsForCashTransfers;
395        }
396        /**
397         * sets attribute reportGroupsForCashTransfers
398         */
399        public void setReportGroupsForCashTransfers(List<CashTransfersDataHolder> reportGroupsForCashTransfers) {
400            this.reportGroupsForCashTransfers = reportGroupsForCashTransfers;
401        }
402    
403        /**
404         * gets attribute reportGroupsForSecurityTransfers
405         * @return reportGroupsForSecurityTransfers
406         */
407        public List<SecurityTransfersDataHolder> getReportGroupsForSecurityTransfers() {
408            return reportGroupsForSecurityTransfers;
409        }
410        /**
411         * sets attribute reportGroupsForSecurityTransfers
412         */
413        public void setReportGroupsForSecurityTransfers(List<SecurityTransfersDataHolder> reportGroupsForSecurityTransfers) {
414            this.reportGroupsForSecurityTransfers = reportGroupsForSecurityTransfers;
415        }
416    
417        /**
418         * sets attribute reportGroupsForContributions
419         */
420        public void setReportGroupsForContributions(List<ContributionsDataHolder> reportGroupsForContributions) {
421            this.reportGroupsForContributions = reportGroupsForContributions;
422        }
423    
424        /**
425         * gets attribute footer
426         * @return footer
427         */
428        protected EndowmentReportFooterDataHolder getFooter() {
429            return footer;
430        }
431        /**
432         * sets attribute footer
433         */
434        public void setFooter(EndowmentReportFooterDataHolder footer) {
435            this.footer = footer;
436        }
437        
438        /**
439         * public class to hold contributions and Other income totals.
440         */
441        public class ContributionsDataHolder {
442            protected String contributionsDescription;
443            protected BigDecimal incomeContributions = BigDecimal.ZERO;
444            protected BigDecimal principalContributions = BigDecimal.ZERO;
445            
446            /**
447             * gets attribute contributionsDescription
448             * @return contributionsDescription
449             */
450            public String getContributionsDescription() {
451                return contributionsDescription;
452            }
453            /**
454             * sets attribute contributionsDescription
455             */
456            public void setContributionsDescription(String contributionsDescription) {
457                this.contributionsDescription = contributionsDescription;
458            }
459            /**
460             * gets attribute incomeContributions
461             * @return incomeContributions
462             */
463            public BigDecimal getIncomeContributions() {
464                if (ObjectUtils.isNull(incomeContributions)) {
465                    return BigDecimal.ZERO;
466                }
467                
468                return incomeContributions;
469            }
470            /**
471             * sets attribute incomeContributions
472             */
473            public void setIncomeContributions(BigDecimal incomeContributions) {
474                this.incomeContributions = incomeContributions;
475            }
476            /**
477             * gets attribute principalContributions
478             * @return principalContributions
479             */
480            public BigDecimal getPrincipalContributions() {
481                if (ObjectUtils.isNull(principalContributions)) {
482                    return BigDecimal.ZERO;
483                }
484                
485                return principalContributions;
486            }
487            /**
488             * sets attribute principalContributions
489             */
490            public void setPrincipalContributions(BigDecimal principalContributions) {
491                this.principalContributions = principalContributions;
492            }
493            /**
494             * gets sum of incomeContributions and principalContributions
495             * @return sum
496             */
497            protected BigDecimal getTotalContributions() {
498                return this.getIncomeContributions().add(this.getPrincipalContributions());
499            }
500        }
501        
502        /**
503         * public class to hold Expenses data
504         */
505        public class ExpensesDataHolder {
506            protected String expensesDescription;
507            protected BigDecimal incomeExpenses = BigDecimal.ZERO;
508            protected BigDecimal principalExpenses = BigDecimal.ZERO;
509            
510            /**
511             * gets attribute expensesDescription
512             * @return expensesDescription
513             */
514            public String getExpensesDescription() {
515                return expensesDescription;
516            }
517    
518            /**
519             * sets attribute expensesDescription
520             */
521            public void setExpensesDescription(String expensesDescription) {
522                this.expensesDescription = expensesDescription;
523            }
524    
525            /**
526             * gets attribute incomeExpenses
527             * @return incomeExpenses
528             */
529            public BigDecimal getIncomeExpenses() {
530                if (ObjectUtils.isNull(incomeExpenses)) {
531                    return BigDecimal.ZERO;
532                }
533                
534                return incomeExpenses;
535            }
536    
537            /**
538             * sets attribute incomeExpenses
539             */
540            public void setIncomeExpenses(BigDecimal incomeExpenses) {
541                this.incomeExpenses = incomeExpenses;
542            }
543    
544            /**
545             * gets attribute principalExpenses
546             * @return principalExpenses
547             */
548            public BigDecimal getPrincipalExpenses() {
549                if (ObjectUtils.isNull(principalExpenses)) {
550                    return BigDecimal.ZERO;
551                }
552                
553                return principalExpenses;
554            }
555    
556            /**
557             * sets attribute principalExpenses
558             */
559            public void setPrincipalExpenses(BigDecimal principalExpenses) {
560                this.principalExpenses = principalExpenses;
561            }
562    
563            /**
564             * gets sum of incomeExpenses and principalExpenses
565             * @return totalExpenses
566             */
567            public BigDecimal getTotalExpenses() {
568                return this.getIncomeExpenses().add(this.getPrincipalExpenses());
569            }
570        }
571        
572        /**
573         * public class to hold cash transfers data
574         */
575        public class CashTransfersDataHolder {
576            protected String cashTransfersDescription;
577            protected BigDecimal incomeCashTransfers = BigDecimal.ZERO;
578            protected BigDecimal principalCashTransfers = BigDecimal.ZERO;
579            
580            /**
581             * gets attribute cashTransfersDescription
582             * @return cashTransfersDescription
583             */
584            public String getCashTransfersDescription() {
585                return cashTransfersDescription;
586            }
587    
588            /**
589             * sets attribute cashTransfersDescription
590             */
591            public void setCashTransfersDescription(String cashTransfersDescription) {
592                this.cashTransfersDescription = cashTransfersDescription;
593            }
594    
595            /**
596             * gets attribute incomeCashTransfers
597             * @return incomeCashTransfers
598             */
599            public BigDecimal getIncomeCashTransfers() {
600                if (ObjectUtils.isNull(incomeCashTransfers)) {
601                    return BigDecimal.ZERO;
602                }
603                
604                return incomeCashTransfers;
605            }
606    
607            /**
608             * sets attribute incomeCashTransfers
609             */
610            public void setIncomeCashTransfers(BigDecimal incomeCashTransfers) {
611                this.incomeCashTransfers = incomeCashTransfers;
612            }
613    
614            /**
615             * gets attribute principalCashTransfers
616             * @return principalCashTransfers
617             */
618            public BigDecimal getPrincipalCashTransfers() {
619                if (ObjectUtils.isNull(principalCashTransfers)) {
620                    return BigDecimal.ZERO;
621                }
622                
623                return principalCashTransfers;
624            }
625    
626            /**
627             * sets attribute principalCashTransfers
628             */
629            public void setPrincipalCashTransfers(BigDecimal principalCashTransfers) {
630                this.principalCashTransfers = principalCashTransfers;
631            }
632    
633            /**
634             * gets sum of incomeExpenses and principalExpenses
635             * @return totalExpenses
636             */
637            public BigDecimal getTotalCashTransfers() {
638                return this.getIncomeCashTransfers().add(this.getPrincipalCashTransfers());
639            }
640        }
641        
642        /**
643         * public class to hold Security transfers data
644         */
645        public class SecurityTransfersDataHolder {
646            protected String securityTransfersDescription;
647            protected BigDecimal incomeSecurityTransfers = BigDecimal.ZERO;
648            protected BigDecimal principalSecurityTransfers = BigDecimal.ZERO;
649            
650            /**
651             * gets attribute securityTransfersDescription
652             * @return securityTransfersDescription
653             */
654            public String getSecurityTransfersDescription() {
655                return securityTransfersDescription;
656            }
657    
658            /**
659             * sets attribute securityTransfersDescription
660             */
661            public void setSecurityTransfersDescription(String securityTransfersDescription) {
662                this.securityTransfersDescription = securityTransfersDescription;
663            }
664    
665            /**
666             * gets attribute incomeSecurityTransfers
667             * @return incomeSecurityTransfers
668             */
669            public BigDecimal getIncomeSecurityTransfers() {
670                if (ObjectUtils.isNull(incomeSecurityTransfers)) {
671                    return BigDecimal.ZERO;
672                }
673                
674                return incomeSecurityTransfers;
675            }
676    
677            /**
678             * sets attribute incomeSecurityTransfers
679             */
680            public void setIncomeSecurityTransfers(BigDecimal incomeSecurityTransfers) {
681                this.incomeSecurityTransfers = incomeSecurityTransfers;
682            }
683    
684            /**
685             * gets attribute principalSecurityTransfers
686             * @return principalSecurityTransfers
687             */
688            public BigDecimal getPrincipalSecurityTransfers() {
689                if (ObjectUtils.isNull(principalSecurityTransfers)) {
690                    return BigDecimal.ZERO;
691                }
692                
693                return principalSecurityTransfers;
694            }
695    
696            /**
697             * sets attribute principalSecurityTransfers
698             */
699            public void setPrincipalSecurityTransfers(BigDecimal principalSecurityTransfers) {
700                this.principalSecurityTransfers = principalSecurityTransfers;
701            }
702    
703            /**
704             * gets sum of incomeSecurityTransferS and principalSecurityTransfers
705             * @return totalExpenses
706             */
707            public BigDecimal getTotalSecurityTransfers() {
708                return this.getIncomeSecurityTransfers().add(this.getPrincipalSecurityTransfers());
709            }
710        }
711        
712    }