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.sql.Date;
019    import java.util.LinkedHashMap;
020    import java.math.BigDecimal;
021    import java.util.List;
022    import org.kuali.rice.kns.util.KualiDecimal;
023    import org.apache.commons.lang.StringUtils;
024    import org.apache.log4j.Logger;
025    import org.kuali.kfs.module.endow.EndowConstants;
026    import org.kuali.kfs.module.endow.EndowPropertyConstants;
027    import org.kuali.rice.kns.bo.Inactivateable;
028    import org.kuali.rice.kns.bo.KualiCodeBase;
029    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
030    import org.kuali.rice.kns.util.TypedArrayList;
031    import org.kuali.kfs.module.endow.businessobject.FrequencyCode;
032    import org.kuali.kfs.module.endow.businessobject.FeeRateDefinitionCode;
033    import org.kuali.kfs.module.endow.businessobject.FeeTypeCode;
034    import org.kuali.kfs.module.endow.businessobject.FeeBaseCode;
035    import org.kuali.kfs.module.endow.businessobject.EndowmentTransactionCode;
036    import org.kuali.kfs.module.endow.businessobject.FeeBalanceTypeCode;
037    import org.kuali.kfs.module.endow.businessobject.FeeClassCode;
038    import org.kuali.kfs.module.endow.businessobject.FeeSecurity;
039    import org.kuali.kfs.module.endow.businessobject.FeePaymentType;
040    import org.kuali.kfs.module.endow.businessobject.FeeTransaction;
041    import org.kuali.kfs.module.endow.businessobject.FeeEndowmentTransactionCode;
042    import org.kuali.kfs.sys.KFSConstants;
043    
044    /**
045     * Business Object for Fee Method.
046     */
047    public class FeeMethod extends KualiCodeBase {
048        private static final Logger LOG = Logger.getLogger(FeeMethod.class);
049    
050        private String feeFrequencyCode;
051        private Date feeNextProcessDate;
052        private Date feeLastProcessDate;
053        private String feeRateDefinitionCode;
054        private BigDecimal firstFeeRate;
055        private KualiDecimal firstFeeBreakpoint;
056        private BigDecimal secondFeeRate;
057        private KualiDecimal secondFeeBreakpoint;
058        private BigDecimal thirdFeeRate;
059        private KualiDecimal minimumFeeThreshold;    
060        private KualiDecimal minimumFeeToCharge;
061        private String feeTypeCode;
062        private String feeBaseCode;
063        private String feeExpenseETranCode;
064        private boolean feePostPendingIndicator;
065        private KualiDecimal corpusPctTolerance;
066        private String feeBalanceTypeCode;
067        private boolean feeByClassCode;
068        private boolean feeBySecurityCode;
069        private boolean feeByTransactionType;
070        private boolean feeByETranCode;
071    
072        private FrequencyCode frequencyCode;
073        private FeeRateDefinitionCode feeRateDefinition;
074        private EndowmentTransactionCode endowmentTransactionCode;
075        private FeeTypeCode feeType;
076        private FeeBaseCode feeBase;
077        private FeeBalanceTypeCode feeBalanceType;
078    
079        // collection classes
080        private List<FeeClassCode> feeClassCodes;
081        private List<FeeSecurity> feeSecurity;
082        private List<FeePaymentType> feePaymentTypes;
083        private List<FeeTransaction> feeTransactions;
084        private List<FeeEndowmentTransactionCode> feeEndowmentTransactionCodes;
085    
086        /**
087         * Constructs a TypeCode object
088         */
089        public FeeMethod() {
090            super();
091            feeClassCodes = new TypedArrayList(FeeClassCode.class);
092            feeSecurity = new TypedArrayList(FeeSecurity.class);
093            feePaymentTypes = new TypedArrayList(FeePaymentType.class);
094            feeTransactions = new TypedArrayList(FeeTransaction.class);
095            feeEndowmentTransactionCodes = new TypedArrayList(FeeEndowmentTransactionCode.class);
096        }
097    
098        /**
099         * Gets the feeFrequencyCode attribute.
100         * 
101         * @return Returns the feeFrequencyCode.
102         */
103        public String getFeeFrequencyCode() {
104            return feeFrequencyCode;
105        }
106    
107        /**
108         * Sets the feeFrequencyCode attribute value.
109         * 
110         * @param feeFrequencyCode The feeFrequencyCode to set.
111         */
112        public void setFeeFrequencyCode(String feeFrequencyCode) {
113            this.feeFrequencyCode = feeFrequencyCode;
114        }
115    
116        /**
117         * Gets the feeNextProcessDate attribute.
118         * 
119         * @return Returns the feeNextProcessDate.
120         */
121        public Date getFeeNextProcessDate() {
122            return feeNextProcessDate;
123        }
124    
125        /**
126         * Sets the feeNextProcessDate attribute value.
127         * 
128         * @param feeNextProcessDate The feeNextProcessDate to set.
129         */
130        public void setFeeNextProcessDate(Date feeNextProcessDate) {
131            this.feeNextProcessDate = feeNextProcessDate;
132        }
133    
134    
135        /**
136         * Gets the feeLastProcessDate attribute.
137         * 
138         * @return Returns the feeLastProcessDate.
139         */
140        public Date getFeeLastProcessDate() {
141            return feeLastProcessDate;
142        }
143    
144        /**
145         * Sets the feeLastProcessDate attribute value.
146         * 
147         * @param feeLastProcessDate The feeLastProcessDate to set.
148         */
149        public void setFeeLastProcessDate(Date feeLastProcessDate) {
150            this.feeLastProcessDate = feeLastProcessDate;
151        }
152    
153        /**
154         * Gets the feeRateDefinitionCode attribute.
155         * 
156         * @return Returns the feeRateDefinitionCode.
157         */
158        public String getFeeRateDefinitionCode() {
159            return feeRateDefinitionCode;
160        }
161    
162        /**
163         * Sets the feeRateDefinitionCode attribute value.
164         * 
165         * @param feeRateDefinitionCode The feeRateDefinitionCode to set.
166         */
167        public void setFeeRateDefinitionCode(String feeRateDefinitionCode) {
168            this.feeRateDefinitionCode = feeRateDefinitionCode;
169        }
170    
171        /**
172         * Gets the firstFeeRate attribute.
173         * 
174         * @return Returns the firstFeeRate.
175         */
176        public BigDecimal getFirstFeeRate() {
177            if (firstFeeRate != null) {
178                return firstFeeRate.setScale(EndowConstants.FeeMethod.FEE_RATE_MAX_SCALE, KualiDecimal.ROUND_BEHAVIOR);
179            }
180            else {
181                return BigDecimal.ZERO.setScale(EndowConstants.FeeMethod.FEE_RATE_MAX_SCALE, KualiDecimal.ROUND_BEHAVIOR);
182            }
183        }
184    
185        /**
186         * Sets the firstFeeRate attribute value.
187         * 
188         * @param firstFeeRate The firstFeeRate to set.
189         */
190        public void setFirstFeeRate(BigDecimal firstFeeRate) {
191            this.firstFeeRate = firstFeeRate.setScale(EndowConstants.FeeMethod.FEE_RATE_MAX_SCALE, KualiDecimal.ROUND_BEHAVIOR);
192        }
193    
194        /**
195         * Gets the firstFeeBreakpoint attribute.
196         * 
197         * @return Returns the firstFeeBreakpoint.
198         */
199        public KualiDecimal getFirstFeeBreakpoint() {
200            return firstFeeBreakpoint;
201        }
202    
203        /**
204         * Sets the firstFeeBreakpoint attribute value.
205         * 
206         * @param firstFeeBreakpoint The firstFeeBreakpoint to set.
207         */
208        public void setFirstFeeBreakpoint(KualiDecimal firstFeeBreakpoint) {
209            this.firstFeeBreakpoint = firstFeeBreakpoint;
210        }
211    
212        /**
213         * Gets the secondFeeRate attribute.
214         * 
215         * @return Returns the address2.
216         */
217        public BigDecimal getSecondFeeRate() {
218            if (secondFeeRate != null) {
219                return secondFeeRate.setScale(EndowConstants.FeeMethod.FEE_RATE_MAX_SCALE, KualiDecimal.ROUND_BEHAVIOR);
220            }
221            else {
222                return BigDecimal.ZERO.setScale(EndowConstants.FeeMethod.FEE_RATE_MAX_SCALE, KualiDecimal.ROUND_BEHAVIOR);
223            }
224        }
225    
226        /**
227         * Sets the secondFeeRate attribute value.
228         * 
229         * @param secondFeeRate The secondFeeRate to set.
230         */
231        public void setSecondFeeRate(BigDecimal secondFeeRate) {
232            this.secondFeeRate = secondFeeRate.setScale(EndowConstants.FeeMethod.FEE_RATE_MAX_SCALE, KualiDecimal.ROUND_BEHAVIOR);
233        }
234    
235        /**
236         * Gets the secondFeeBreakpoint attribute.
237         * 
238         * @return Returns the secondFeeBreakpoint.
239         */
240        public KualiDecimal getSecondFeeBreakpoint() {
241            return secondFeeBreakpoint;
242        }
243    
244        /**
245         * Sets the secondFeeBreakpoint attribute value.
246         * 
247         * @param secondFeeBreakpoint The secondFeeBreakpoint to set.
248         */
249        public void setSecondFeeBreakpoint(KualiDecimal secondFeeBreakpoint) {
250            this.secondFeeBreakpoint = secondFeeBreakpoint;
251        }
252    
253        /**
254         * Gets the thirdFeeRate attribute.
255         * 
256         * @return Returns the thirdFeeRate.
257         */
258        public BigDecimal getThirdFeeRate() {
259            if (thirdFeeRate != null) {
260                return thirdFeeRate.setScale(EndowConstants.FeeMethod.FEE_RATE_MAX_SCALE, KualiDecimal.ROUND_BEHAVIOR);
261            }
262            else {
263                return BigDecimal.ZERO.setScale(EndowConstants.FeeMethod.FEE_RATE_MAX_SCALE, KualiDecimal.ROUND_BEHAVIOR);
264            }
265        }
266    
267        /**
268         * Sets the thirdFeeRate attribute value.
269         * 
270         * @param thirdFeeRate The thirdFeeRate to set.
271         */
272        public void setThirdFeeRate(BigDecimal thirdFeeRate) {
273            this.thirdFeeRate = thirdFeeRate.setScale(EndowConstants.FeeMethod.FEE_RATE_MAX_SCALE, KualiDecimal.ROUND_BEHAVIOR);
274        }
275    
276        /**
277         * Gets the minimumFeeToCharge attribute.
278         * 
279         * @return Returns the minimumFeeToCharge.
280         */
281        public KualiDecimal getMinimumFeeToCharge() {
282            return minimumFeeToCharge;
283        }
284    
285        /**
286         * Sets the minimumFeeToCharge attribute value.
287         * 
288         * @param minimumFeeToCharge The minimumFeeToCharge to set.
289         */
290        public void setMinimumFeeToCharge(KualiDecimal minimumFeeToCharge) {
291            this.minimumFeeToCharge = minimumFeeToCharge;
292        }
293    
294        /**
295         * Gets the feeTypeCode attribute.
296         * 
297         * @return Returns the feeTypeCode.
298         */
299        public String getFeeTypeCode() {
300            return feeTypeCode;
301        }
302    
303        /**
304         * Sets the feeTypeCode attribute value.
305         * 
306         * @param feeTypeCode The feeTypeCode to set.
307         */
308        public void setFeeTypeCode(String feeTypeCode) {
309            this.feeTypeCode = feeTypeCode;
310        }
311    
312        /**
313         * Gets the feeBaseCode attribute.
314         * 
315         * @return Returns the feeBaseCode.
316         */
317        public String getFeeBaseCode() {
318            return feeBaseCode;
319        }
320    
321        /**
322         * Sets the feeBaseCode attribute value.
323         * 
324         * @param feeBaseCode The feeBaseCode to set.
325         */
326        public void setFeeBaseCode(String feeBaseCode) {
327            this.feeBaseCode = feeBaseCode;
328        }
329    
330        /**
331         * Gets the feeExpenseETranCode attribute.
332         * 
333         * @return Returns the feeExpenseETranCode.
334         */
335        public String getFeeExpenseETranCode() {
336            return feeExpenseETranCode;
337        }
338    
339        /**
340         * Sets the feeExpenseETranCode attribute value.
341         * 
342         * @param feeExpenseETranCode feeExpenseETranCode feeBaseCode to set.
343         */
344        public void setFeeExpenseETranCode(String feeExpenseETranCode) {
345            this.feeExpenseETranCode = feeExpenseETranCode;
346        }
347    
348        /**
349         * Gets the feePostPendingIndicator attribute.
350         * 
351         * @return Returns the feePostPendingIndicator.
352         */
353        public boolean getFeePostPendingIndicator() {
354            return feePostPendingIndicator;
355        }
356    
357        /**
358         * Sets the feePostPendingIndicator attribute value.
359         * 
360         * @param feePostPendingIndicator The feePostPendingIndicator to set.
361         */
362        public void setFeePostPendingIndicator(boolean feePostPendingIndicator) {
363            this.feePostPendingIndicator = feePostPendingIndicator;
364        }
365    
366        /**
367         * Gets the corpusPctTolerance attribute.
368         * 
369         * @return Returns the corpusPctTolerance.
370         */
371        public KualiDecimal getCorpusPctTolerance() {
372            return corpusPctTolerance;
373        }
374    
375        /**
376         * Sets the corpusPctTolerance attribute value.
377         * 
378         * @param corpusPctTolerance The corpusPctTolerance to set.
379         */
380        public void setCorpusPctTolerance(KualiDecimal corpusPctTolerance) {
381            this.corpusPctTolerance = corpusPctTolerance;
382        }
383    
384        /**
385         * Gets the feeBalanceTypeCode attribute.
386         * 
387         * @return Returns the feeBalanceTypeCode.
388         */
389        public String getFeeBalanceTypeCode() {
390            return feeBalanceTypeCode;
391        }
392    
393        /**
394         * Sets the feeBalanceTypeCode attribute value.
395         * 
396         * @param feeBalanceTypeCode The feeBalanceTypeCode to set.
397         */
398        public void setFeeBalanceTypeCode(String feeBalanceTypeCode) {
399            this.feeBalanceTypeCode = feeBalanceTypeCode;
400        }
401    
402        /**
403         * Gets the feeByClassCode attribute.
404         * 
405         * @return Returns the feeByClassCode.
406         */
407        public boolean getFeeByClassCode() {
408            return feeByClassCode;
409        }
410    
411        /**
412         * Sets the feeByClassCode attribute value.
413         * 
414         * @param feeByClassCode The feeByClassCode to set.
415         */
416        public void setFeeByClassCode(boolean feeByClassCode) {
417            this.feeByClassCode = feeByClassCode;
418        }
419    
420        /**
421         * Gets the feeBySecurityCode attribute.
422         * 
423         * @return Returns the feeBySecurityCode.
424         */
425        public boolean getFeeBySecurityCode() {
426            return feeBySecurityCode;
427        }
428    
429        /**
430         * Sets the feeBySecurityCode attribute value.
431         * 
432         * @param feeBySecurityCode The feeBySecurityCode to set.
433         */
434        public void setFeeBySecurityCode(boolean feeBySecurityCode) {
435            this.feeBySecurityCode = feeBySecurityCode;
436        }
437    
438        /**
439         * Gets the feeByTransactionType attribute.
440         * 
441         * @return Returns the feeByTransactionType.
442         */
443        public boolean getFeeByTransactionType() {
444            return feeByTransactionType;
445        }
446    
447        /**
448         * Sets the feeByTransactionType attribute value.
449         * 
450         * @param feeByTransactionType The feeByTransactionType to set.
451         */
452        public void setFeeByTransactionType(boolean feeByTransactionType) {
453            this.feeByTransactionType = feeByTransactionType;
454        }
455    
456        /**
457         * Gets the feeByETranCode attribute.
458         * 
459         * @return Returns the feeByETranCode.
460         */
461        public boolean getFeeByETranCode() {
462            return feeByETranCode;
463        }
464    
465        /**
466         * Sets the feeByETranCode attribute value.
467         * 
468         * @param feeByETranCode The feeByETranCode to set.
469         */
470        public void setFeeByETranCode(boolean feeByETranCode) {
471            this.feeByETranCode = feeByETranCode;
472        }
473    
474        /**
475         * Gets the active attribute.
476         * 
477         * @return Returns the active.
478         */
479        public boolean isActive() {
480            return active;
481        }
482    
483        /**
484         * Sets the active attribute value.
485         * 
486         * @param active The active to set.
487         */
488        public void setActive(boolean active) {
489            this.active = active;
490        }
491    
492        /**
493         * Gets the FrequencyCode.
494         * 
495         * @return Returns the FrequencyCode.
496         */
497        public FrequencyCode getFrequencyCode() {
498            return frequencyCode;
499        }
500    
501        /**
502         * Sets the FrequencyCode.
503         * 
504         * @param FrequencyCode The FrequencyCode to set.
505         */
506        public void setFrequencyCode(FrequencyCode frequencyCode) {
507            this.frequencyCode = frequencyCode;
508        }
509    
510        /**
511         * Gets the feeRateDefinitionCode .
512         * 
513         * @return Returns the feeRateDefinitionCode.
514         */
515        public FeeRateDefinitionCode getFeeRateDefinition() {
516            return feeRateDefinition;
517        }
518    
519        /**
520         * Sets the developmentOfficer attribute value.
521         * 
522         * @param developmentOfficer The developmentOfficer to set.
523         */
524        public void setFeeRateDefinition(FeeRateDefinitionCode feeRateDefinition) {
525            this.feeRateDefinition = feeRateDefinition;
526        }
527    
528        /**
529         * Gets the endowmentTransactionCode.
530         * 
531         * @return Returns the endowmentTransactionCode.
532         */
533        public EndowmentTransactionCode getEndowmentTransactionCode() {
534            return endowmentTransactionCode;
535        }
536    
537        /**
538         * Sets the endowmentTransactionCode.
539         * 
540         * @param endowmentTransactionCode The endowmentTransactionCode to set.
541         */
542        public void setEndowmentTransactionCode(EndowmentTransactionCode endowmentTransactionCode) {
543            this.endowmentTransactionCode = endowmentTransactionCode;
544        }
545    
546        /**
547         * Gets the feeTypeCode attribute.
548         * 
549         * @return Returns the feeTypeCode.
550         */
551        public FeeTypeCode getFeeType() {
552            return feeType;
553        }
554    
555        /**
556         * Sets the firstCorporateContact.
557         * 
558         * @param firstCorporateContact The firstCorporateContact to set.
559         */
560        public void setFeeType(FeeTypeCode feeType) {
561            this.feeType = feeType;
562        }
563    
564        /**
565         * Gets the feeBaseCode.
566         * 
567         * @return Returns the firstContactTitle.
568         */
569        public FeeBaseCode getFeeBase() {
570            return feeBase;
571        }
572    
573        /**
574         * Sets the feeBaseCode.
575         * 
576         * @param feeBaseCode The feeBaseCode to set.
577         */
578        public void setFeeBase(FeeBaseCode feeBase) {
579            this.feeBase = feeBase;
580        }
581    
582        /**
583         * Gets the feeBalanceTypeCode.
584         * 
585         * @return Returns the feeBalanceTypeCode.
586         */
587        public FeeBalanceTypeCode getFeeBalanceType() {
588            return feeBalanceType;
589        }
590    
591        /**
592         * Sets the feeBalanceTypeCode.
593         * 
594         * @param feeBalanceTypeCode The feeBalanceTypeCode to set.
595         */
596        public void setFeeBalanceType(FeeBalanceTypeCode feeBalanceType) {
597            this.feeBalanceType = feeBalanceType;
598        }
599    
600        /**
601         * Gets the feeClassCodes attribute.
602         * 
603         * @return Returns the feeClassCodes.
604         */
605        public List<FeeClassCode> getFeeClassCodes() {
606            return feeClassCodes;
607        }
608    
609        /**
610         * Sets the feeClassCodes attribute value.
611         * 
612         * @param feeClassCodes The feeClassCodes to set.
613         */
614        public void setFeeClassCodes(List<FeeClassCode> feeClassCodes) {
615            this.feeClassCodes = feeClassCodes;
616        }
617    
618        /**
619         * Gets the feeSecurity attribute.
620         * 
621         * @return Returns the feeSecurity.
622         */
623        public List<FeeSecurity> getFeeSecurity() {
624            return feeSecurity;
625        }
626    
627        /**
628         * Sets the feeSecurity attribute value.
629         * 
630         * @param feeSecurity The feeSecurity to set.
631         */
632        public void setFeeSecurity(List<FeeSecurity> feeSecurity) {
633            this.feeSecurity = feeSecurity;
634        }
635    
636        /**
637         * Gets the feePaymentTypes attribute.
638         * 
639         * @return Returns the feePaymentTypes.
640         */
641        public List<FeePaymentType> getFeePaymentTypes() {
642            return feePaymentTypes;
643        }
644    
645        /**
646         * Sets the feePaymentTypes attribute value.
647         * 
648         * @param feePaymentTypes The feePaymentTypes to set.
649         */
650        public void setFeePaymentTypes(List<FeePaymentType> feePaymentTypes) {
651            this.feePaymentTypes = feePaymentTypes;
652        }
653    
654        /**
655         * Gets the feeTransactions attribute.
656         * 
657         * @return Returns the feeTransactions.
658         */
659        public List<FeeTransaction> getFeeTransactions() {
660            return feeTransactions;
661        }
662    
663        /**
664         * Sets the feeTransactions attribute value.
665         * 
666         * @param feeTransactions The feeTransactions to set.
667         */
668        public void setFeeTransactions(List<FeeTransaction> feeTransactions) {
669            this.feeTransactions = feeTransactions;
670        }
671    
672        /**
673         * Gets the feeEndowmentTransactionCodes attribute.
674         * 
675         * @return Returns the feeEndowmentTransactionCodes.
676         */
677        public List<FeeEndowmentTransactionCode> getFeeEndowmentTransactionCodes() {
678            return feeEndowmentTransactionCodes;
679        }
680    
681        /**
682         * Sets the feeEndowmentTransactionCodes attribute value.
683         * 
684         * @param feeEndowmentTransactionCodes The feeEndowmentTransactionCodes to set.
685         */
686        public void setFeeEndowmentTransactionCodes(List<FeeEndowmentTransactionCode> feeEndowmentTransactionCodes) {
687            this.feeEndowmentTransactionCodes = feeEndowmentTransactionCodes;
688        }
689    
690        /**
691         * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
692         */
693        @Override
694        protected LinkedHashMap<String, String> toStringMapper() {
695            LinkedHashMap<String, String> m = new LinkedHashMap<String, String>();
696            m.put(EndowPropertyConstants.FEE_METHOD, this.code);
697            return m;
698        }
699    
700        /**
701         * gets the codeAndDescription. returns codeAndDescription.
702         */
703        public String getCodeAndDescription() {
704            if (StringUtils.isEmpty(this.code)) {
705                return KFSConstants.EMPTY_STRING;
706            }
707            return getCode() + "-" + getName();
708        }
709        /**
710         * gets the minimumFeeThreshold. returns minimumFeeThreshold.
711         */    
712        public KualiDecimal getMinimumFeeThreshold() {
713            if (minimumFeeThreshold == null) {
714                return new KualiDecimal("0");
715            }
716            return minimumFeeThreshold;
717        }
718    
719        /**
720         * Sets the minimumFeeThreshold attribute value.
721         * @param minimumFeeThreshold The minimumFeeThreshold to set.
722         */
723        public void setMinimumFeeThreshold(KualiDecimal minimumFeeThreshold) {
724            this.minimumFeeThreshold = minimumFeeThreshold;
725        }
726    }