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    
017    package org.kuali.kfs.fp.businessobject;
018    
019    import java.sql.Timestamp;
020    import java.text.ParseException;
021    import java.util.Iterator;
022    import java.util.LinkedHashMap;
023    import java.util.List;
024    
025    import org.kuali.kfs.sys.KFSPropertyConstants;
026    import org.kuali.kfs.sys.context.SpringContext;
027    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
028    import org.kuali.rice.kns.service.DateTimeService;
029    import org.kuali.rice.kns.util.KualiDecimal;
030    import org.kuali.rice.kns.util.ObjectUtils;
031    import org.kuali.rice.kns.util.TypedArrayList;
032    
033    /**
034     * This class is used to represent a non-employee trip for a disbursement voucher .
035     */
036    public class DisbursementVoucherNonEmployeeTravel extends PersistableBusinessObjectBase {
037    
038        private String documentNumber;
039        private String disbVchrTravelFromCityName;
040        private String disbVchrTravelFromStateCode;
041        private String dvTravelFromCountryCode;
042        private String disbVchrTravelToCityName;
043        private String disbVchrTravelToStateCode;
044        private String disbVchrTravelToCountryCode;
045        private Timestamp dvPerdiemStartDttmStamp;
046        private Timestamp dvPerdiemEndDttmStamp;
047        private KualiDecimal disbVchrPerdiemCalculatedAmt;
048        private KualiDecimal disbVchrPerdiemActualAmount;
049        private String dvPerdiemChangeReasonText;
050        private String disbVchrServicePerformedDesc;
051        private String dvServicePerformedLocName;
052        private String dvServiceRegularEmprName;
053        private String disbVchrAutoFromCityName;
054        private String disbVchrAutoFromStateCode;
055        private String disbVchrAutoToCityName;
056        private String disbVchrAutoToStateCode;
057        private boolean disbVchrAutoRoundTripCode;
058        private Integer dvPersonalCarMileageAmount;
059        private KualiDecimal disbVchrPersonalCarRate;
060        private KualiDecimal disbVchrPersonalCarAmount;
061        private boolean disbVchrExceptionCode;
062        private Integer financialDocumentNextLineNbr;
063        private String disbVchrNonEmpTravelerName;
064        private KualiDecimal disbVchrPerdiemRate;
065        private String disbVchrPerdiemCategoryName;
066        private KualiDecimal disbVchrMileageCalculatedAmt;
067    
068        private KualiDecimal totalTravelAmount;
069    
070        private List dvNonEmployeeExpenses;
071        private List dvPrePaidEmployeeExpenses;
072    
073        /**
074         * Default no-arg constructor.
075         */
076        public DisbursementVoucherNonEmployeeTravel() {
077            dvNonEmployeeExpenses = new TypedArrayList(DisbursementVoucherNonEmployeeExpense.class);
078            dvPrePaidEmployeeExpenses = new TypedArrayList(DisbursementVoucherNonEmployeeExpense.class);
079            financialDocumentNextLineNbr = new Integer(1);
080        }
081    
082        /**
083         * Gets the documentNumber attribute.
084         * 
085         * @return Returns the documentNumber
086         */
087        public String getDocumentNumber() {
088            return documentNumber;
089        }
090    
091    
092        /**
093         * Sets the documentNumber attribute.
094         * 
095         * @param documentNumber The documentNumber to set.
096         */
097        public void setDocumentNumber(String documentNumber) {
098            this.documentNumber = documentNumber;
099        }
100    
101        /**
102         * Gets the disbVchrTravelFromCityName attribute.
103         * 
104         * @return Returns the disbVchrTravelFromCityName
105         */
106        public String getDisbVchrTravelFromCityName() {
107            return disbVchrTravelFromCityName;
108        }
109    
110    
111        /**
112         * Sets the disbVchrTravelFromCityName attribute.
113         * 
114         * @param disbVchrTravelFromCityName The disbVchrTravelFromCityName to set.
115         */
116        public void setDisbVchrTravelFromCityName(String disbVchrTravelFromCityName) {
117            this.disbVchrTravelFromCityName = disbVchrTravelFromCityName;
118        }
119    
120        /**
121         * Gets the disbVchrTravelFromStateCode attribute.
122         * 
123         * @return Returns the disbVchrTravelFromStateCode
124         */
125        public String getDisbVchrTravelFromStateCode() {
126            return disbVchrTravelFromStateCode;
127        }
128    
129    
130        /**
131         * Sets the disbVchrTravelFromStateCode attribute.
132         * 
133         * @param disbVchrTravelFromStateCode The disbVchrTravelFromStateCode to set.
134         */
135        public void setDisbVchrTravelFromStateCode(String disbVchrTravelFromStateCode) {
136            this.disbVchrTravelFromStateCode = disbVchrTravelFromStateCode;
137        }
138    
139        /**
140         * Gets the dvTravelFromCountryCode attribute.
141         * 
142         * @return Returns the dvTravelFromCountryCode
143         */
144        public String getDvTravelFromCountryCode() {
145            return dvTravelFromCountryCode;
146        }
147    
148    
149        /**
150         * Sets the dvTravelFromCountryCode attribute.
151         * 
152         * @param dvTravelFromCountryCode The dvTravelFromCountryCode to set.
153         */
154        public void setDvTravelFromCountryCode(String dvTravelFromCountryCode) {
155            this.dvTravelFromCountryCode = dvTravelFromCountryCode;
156        }
157    
158        /**
159         * Gets the disbVchrTravelToCityName attribute.
160         * 
161         * @return Returns the disbVchrTravelToCityName
162         */
163        public String getDisbVchrTravelToCityName() {
164            return disbVchrTravelToCityName;
165        }
166    
167    
168        /**
169         * Sets the disbVchrTravelToCityName attribute.
170         * 
171         * @param disbVchrTravelToCityName The disbVchrTravelToCityName to set.
172         */
173        public void setDisbVchrTravelToCityName(String disbVchrTravelToCityName) {
174            this.disbVchrTravelToCityName = disbVchrTravelToCityName;
175        }
176    
177        /**
178         * Gets the disbVchrTravelToStateCode attribute.
179         * 
180         * @return Returns the disbVchrTravelToStateCode
181         */
182        public String getDisbVchrTravelToStateCode() {
183            return disbVchrTravelToStateCode;
184        }
185    
186    
187        /**
188         * Sets the disbVchrTravelToStateCode attribute.
189         * 
190         * @param disbVchrTravelToStateCode The disbVchrTravelToStateCode to set.
191         */
192        public void setDisbVchrTravelToStateCode(String disbVchrTravelToStateCode) {
193            this.disbVchrTravelToStateCode = disbVchrTravelToStateCode;
194        }
195    
196        /**
197         * Gets the disbVchrTravelToCountryCode attribute.
198         * 
199         * @return Returns the disbVchrTravelToCountryCode
200         */
201        public String getDisbVchrTravelToCountryCode() {
202            return disbVchrTravelToCountryCode;
203        }
204    
205    
206        /**
207         * Sets the disbVchrTravelToCountryCode attribute.
208         * 
209         * @param disbVchrTravelToCountryCode The disbVchrTravelToCountryCode to set.
210         */
211        public void setDisbVchrTravelToCountryCode(String disbVchrTravelToCountryCode) {
212            this.disbVchrTravelToCountryCode = disbVchrTravelToCountryCode;
213        }
214    
215        /**
216         * Gets the dvPerdiemStartDttmStamp attribute.
217         * 
218         * @return Returns the dvPerdiemStartDttmStamp
219         */
220        public Timestamp getDvPerdiemStartDttmStamp() {
221            return dvPerdiemStartDttmStamp;
222        }
223    
224    
225        /**
226         * Sets the dvPerdiemStartDttmStamp attribute.
227         * 
228         * @param dvPerdiemStartDttmStamp The dvPerdiemStartDttmStamp to set.
229         */
230        public void setDvPerdiemStartDttmStamp(Timestamp dvPerdiemStartDttmStamp) {
231            this.dvPerdiemStartDttmStamp = dvPerdiemStartDttmStamp;
232        }
233    
234        /**
235         * Gets the dvPerdiemEndDttmStamp attribute.
236         * 
237         * @return Returns the dvPerdiemEndDttmStamp
238         */
239        public Timestamp getDvPerdiemEndDttmStamp() {
240            return dvPerdiemEndDttmStamp;
241        }
242    
243    
244        /**
245         * Sets the dvPerdiemEndDttmStamp attribute.
246         * 
247         * @param dvPerdiemEndDttmStamp The dvPerdiemEndDttmStamp to set.
248         */
249        public void setDvPerdiemEndDttmStamp(Timestamp dvPerdiemEndDttmStamp) {
250            this.dvPerdiemEndDttmStamp = dvPerdiemEndDttmStamp;
251        }
252    
253        /**
254         * Gets the disbVchrPerdiemCalculatedAmt attribute.
255         * 
256         * @return Returns the disbVchrPerdiemCalculatedAmt
257         */
258        public KualiDecimal getDisbVchrPerdiemCalculatedAmt() {
259            return disbVchrPerdiemCalculatedAmt;
260        }
261    
262    
263        /**
264         * Sets the disbVchrPerdiemCalculatedAmt attribute.
265         * 
266         * @param disbVchrPerdiemCalculatedAmt The disbVchrPerdiemCalculatedAmt to set.
267         */
268        public void setDisbVchrPerdiemCalculatedAmt(KualiDecimal disbVchrPerdiemCalculatedAmt) {
269            this.disbVchrPerdiemCalculatedAmt = disbVchrPerdiemCalculatedAmt;
270        }
271    
272        /**
273         * Gets the disbVchrPerdiemActualAmount attribute.
274         * 
275         * @return Returns the disbVchrPerdiemActualAmount
276         */
277        public KualiDecimal getDisbVchrPerdiemActualAmount() {
278            return disbVchrPerdiemActualAmount;
279        }
280    
281    
282        /**
283         * Sets the disbVchrPerdiemActualAmount attribute.
284         * 
285         * @param disbVchrPerdiemActualAmount The disbVchrPerdiemActualAmount to set.
286         */
287        public void setDisbVchrPerdiemActualAmount(KualiDecimal disbVchrPerdiemActualAmount) {
288            this.disbVchrPerdiemActualAmount = disbVchrPerdiemActualAmount;
289        }
290    
291        /**
292         * Gets the dvPerdiemChangeReasonText attribute.
293         * 
294         * @return Returns the dvPerdiemChangeReasonText
295         */
296        public String getDvPerdiemChangeReasonText() {
297            return dvPerdiemChangeReasonText;
298        }
299    
300    
301        /**
302         * Sets the dvPerdiemChangeReasonText attribute.
303         * 
304         * @param dvPerdiemChangeReasonText The dvPerdiemChangeReasonText to set.
305         */
306        public void setDvPerdiemChangeReasonText(String dvPerdiemChangeReasonText) {
307            this.dvPerdiemChangeReasonText = dvPerdiemChangeReasonText;
308        }
309    
310        /**
311         * Gets the disbVchrServicePerformedDesc attribute.
312         * 
313         * @return Returns the disbVchrServicePerformedDesc
314         */
315        public String getDisbVchrServicePerformedDesc() {
316            return disbVchrServicePerformedDesc;
317        }
318    
319    
320        /**
321         * Sets the disbVchrServicePerformedDesc attribute.
322         * 
323         * @param disbVchrServicePerformedDesc The disbVchrServicePerformedDesc to set.
324         */
325        public void setDisbVchrServicePerformedDesc(String disbVchrServicePerformedDesc) {
326            this.disbVchrServicePerformedDesc = disbVchrServicePerformedDesc;
327        }
328    
329        /**
330         * Gets the dvServicePerformedLocName attribute.
331         * 
332         * @return Returns the dvServicePerformedLocName
333         */
334        public String getDvServicePerformedLocName() {
335            return dvServicePerformedLocName;
336        }
337    
338    
339        /**
340         * Sets the dvServicePerformedLocName attribute.
341         * 
342         * @param dvServicePerformedLocName The dvServicePerformedLocName to set.
343         */
344        public void setDvServicePerformedLocName(String dvServicePerformedLocName) {
345            this.dvServicePerformedLocName = dvServicePerformedLocName;
346        }
347    
348        /**
349         * Gets the dvServiceRegularEmprName attribute.
350         * 
351         * @return Returns the dvServiceRegularEmprName
352         */
353        public String getDvServiceRegularEmprName() {
354            return dvServiceRegularEmprName;
355        }
356    
357    
358        /**
359         * Sets the dvServiceRegularEmprName attribute.
360         * 
361         * @param dvServiceRegularEmprName The dvServiceRegularEmprName to set.
362         */
363        public void setDvServiceRegularEmprName(String dvServiceRegularEmprName) {
364            this.dvServiceRegularEmprName = dvServiceRegularEmprName;
365        }
366    
367        /**
368         * Gets the disbVchrAutoFromCityName attribute.
369         * 
370         * @return Returns the disbVchrAutoFromCityName
371         */
372        public String getDisbVchrAutoFromCityName() {
373            return disbVchrAutoFromCityName;
374        }
375    
376    
377        /**
378         * Sets the disbVchrAutoFromCityName attribute.
379         * 
380         * @param disbVchrAutoFromCityName The disbVchrAutoFromCityName to set.
381         */
382        public void setDisbVchrAutoFromCityName(String disbVchrAutoFromCityName) {
383            this.disbVchrAutoFromCityName = disbVchrAutoFromCityName;
384        }
385    
386        /**
387         * Gets the disbVchrAutoFromStateCode attribute.
388         * 
389         * @return Returns the disbVchrAutoFromStateCode
390         */
391        public String getDisbVchrAutoFromStateCode() {
392            return disbVchrAutoFromStateCode;
393        }
394    
395    
396        /**
397         * Sets the disbVchrAutoFromStateCode attribute.
398         * 
399         * @param disbVchrAutoFromStateCode The disbVchrAutoFromStateCode to set.
400         */
401        public void setDisbVchrAutoFromStateCode(String disbVchrAutoFromStateCode) {
402            this.disbVchrAutoFromStateCode = disbVchrAutoFromStateCode;
403        }
404    
405        /**
406         * Gets the disbVchrAutoToCityName attribute.
407         * 
408         * @return Returns the disbVchrAutoToCityName
409         */
410        public String getDisbVchrAutoToCityName() {
411            return disbVchrAutoToCityName;
412        }
413    
414    
415        /**
416         * Sets the disbVchrAutoToCityName attribute.
417         * 
418         * @param disbVchrAutoToCityName The disbVchrAutoToCityName to set.
419         */
420        public void setDisbVchrAutoToCityName(String disbVchrAutoToCityName) {
421            this.disbVchrAutoToCityName = disbVchrAutoToCityName;
422        }
423    
424        /**
425         * Gets the disbVchrAutoToStateCode attribute.
426         * 
427         * @return Returns the disbVchrAutoToStateCode
428         */
429        public String getDisbVchrAutoToStateCode() {
430            return disbVchrAutoToStateCode;
431        }
432    
433    
434        /**
435         * Sets the disbVchrAutoToStateCode attribute.
436         * 
437         * @param disbVchrAutoToStateCode The disbVchrAutoToStateCode to set.
438         */
439        public void setDisbVchrAutoToStateCode(String disbVchrAutoToStateCode) {
440            this.disbVchrAutoToStateCode = disbVchrAutoToStateCode;
441        }
442    
443        /**
444         * Gets the disbVchrAutoRoundTripCode attribute.
445         * 
446         * @return Returns the disbVchrAutoRoundTripCode
447         */
448        public boolean getDisbVchrAutoRoundTripCode() {
449            return disbVchrAutoRoundTripCode;
450        }
451    
452    
453        /**
454         * Sets the disbVchrAutoRoundTripCode attribute.
455         * 
456         * @param disbVchrAutoRoundTripCode The disbVchrAutoRoundTripCode to set.
457         */
458        public void setDisbVchrAutoRoundTripCode(boolean disbVchrAutoRoundTripCode) {
459            this.disbVchrAutoRoundTripCode = disbVchrAutoRoundTripCode;
460        }
461    
462        /**
463         * Gets the dvPersonalCarMileageAmount attribute.
464         * 
465         * @return Returns the dvPersonalCarMileageAmount
466         */
467        public Integer getDvPersonalCarMileageAmount() {
468            return dvPersonalCarMileageAmount;
469        }
470    
471    
472        /**
473         * Sets the dvPersonalCarMileageAmount attribute.
474         * 
475         * @param dvPersonalCarMileageAmount The dvPersonalCarMileageAmount to set.
476         */
477        public void setDvPersonalCarMileageAmount(Integer dvPersonalCarMileageAmount) {
478            this.dvPersonalCarMileageAmount = dvPersonalCarMileageAmount;
479        }
480    
481        /**
482         * Gets the disbVchrPersonalCarRate attribute.
483         * 
484         * @return Returns the disbVchrPersonalCarRate
485         */
486        public KualiDecimal getDisbVchrPersonalCarRate() {
487            return disbVchrPersonalCarRate;
488        }
489    
490    
491        /**
492         * Sets the disbVchrPersonalCarRate attribute.
493         * 
494         * @param disbVchrPersonalCarRate The disbVchrPersonalCarRate to set.
495         */
496        public void setDisbVchrPersonalCarRate(KualiDecimal disbVchrPersonalCarRate) {
497            this.disbVchrPersonalCarRate = disbVchrPersonalCarRate;
498        }
499    
500        /**
501         * Gets the disbVchrPersonalCarAmount attribute.
502         * 
503         * @return Returns the disbVchrPersonalCarAmount
504         */
505        public KualiDecimal getDisbVchrPersonalCarAmount() {
506            return dvPersonalCarMileageAmount == null ? null : disbVchrPersonalCarAmount;
507        }
508    
509    
510        /**
511         * Sets the disbVchrPersonalCarAmount attribute.
512         * 
513         * @param disbVchrPersonalCarAmount The disbVchrPersonalCarAmount to set.
514         */
515        public void setDisbVchrPersonalCarAmount(KualiDecimal disbVchrPersonalCarAmount) {
516            this.disbVchrPersonalCarAmount = disbVchrPersonalCarAmount;
517        }
518    
519        /**
520         * Gets the disbVchrExceptionCode attribute.
521         * 
522         * @return Returns the disbVchrExceptionCode
523         */
524        public boolean getDisbVchrExceptionCode() {
525            return disbVchrExceptionCode;
526        }
527    
528    
529        /**
530         * Sets the disbVchrExceptionCode attribute.
531         * 
532         * @param disbVchrExceptionCode The disbVchrExceptionCode to set.
533         */
534        public void setDisbVchrExceptionCode(boolean disbVchrExceptionCode) {
535            this.disbVchrExceptionCode = disbVchrExceptionCode;
536        }
537    
538        /**
539         * Gets the financialDocumentNextLineNbr attribute.
540         * 
541         * @return Returns the financialDocumentNextLineNbr
542         */
543        public Integer getFinancialDocumentNextLineNbr() {
544            return financialDocumentNextLineNbr;
545        }
546    
547    
548        /**
549         * Sets the financialDocumentNextLineNbr attribute.
550         * 
551         * @param financialDocumentNextLineNbr The financialDocumentNextLineNbr to set.
552         */
553        public void setFinancialDocumentNextLineNbr(Integer financialDocumentNextLineNbr) {
554            this.financialDocumentNextLineNbr = financialDocumentNextLineNbr;
555        }
556    
557        /**
558         * Gets the disbVchrNonEmpTravelerName attribute.
559         * 
560         * @return Returns the disbVchrNonEmpTravelerName
561         */
562        public String getDisbVchrNonEmpTravelerName() {
563            return disbVchrNonEmpTravelerName;
564        }
565    
566    
567        /**
568         * Sets the disbVchrNonEmpTravelerName attribute.
569         * 
570         * @param disbVchrNonEmpTravelerName The disbVchrNonEmpTravelerName to set.
571         */
572        public void setDisbVchrNonEmpTravelerName(String disbVchrNonEmpTravelerName) {
573            this.disbVchrNonEmpTravelerName = disbVchrNonEmpTravelerName;
574        }
575    
576        /**
577         * Gets the disbVchrPerdiemRate attribute.
578         * 
579         * @return Returns the disbVchrPerdiemRate
580         */
581        public KualiDecimal getDisbVchrPerdiemRate() {
582            return disbVchrPerdiemRate;
583        }
584    
585    
586        /**
587         * Sets the disbVchrPerdiemRate attribute.
588         * 
589         * @param disbVchrPerdiemRate The disbVchrPerdiemRate to set.
590         */
591        public void setDisbVchrPerdiemRate(KualiDecimal disbVchrPerdiemRate) {
592            this.disbVchrPerdiemRate = disbVchrPerdiemRate;
593        }
594    
595        /**
596         * Gets the disbVchrPerdiemCategoryName attribute.
597         * 
598         * @return Returns the disbVchrPerdiemCategoryName
599         */
600        public String getDisbVchrPerdiemCategoryName() {
601            return disbVchrPerdiemCategoryName;
602        }
603    
604    
605        /**
606         * Sets the disbVchrPerdiemCategoryName attribute.
607         * 
608         * @param disbVchrPerdiemCategoryName The disbVchrPerdiemCategoryName to set.
609         */
610        public void setDisbVchrPerdiemCategoryName(String disbVchrPerdiemCategoryName) {
611            this.disbVchrPerdiemCategoryName = disbVchrPerdiemCategoryName;
612        }
613    
614        /**
615         * Gets the disbVchrMileageCalculatedAmt attribute.
616         * 
617         * @return Returns the disbVchrMileageCalculatedAmt
618         */
619        public KualiDecimal getDisbVchrMileageCalculatedAmt() {
620            return dvPersonalCarMileageAmount == null ? null : disbVchrMileageCalculatedAmt;
621        }
622    
623    
624        /**
625         * Sets the disbVchrMileageCalculatedAmt attribute.
626         * 
627         * @param disbVchrMileageCalculatedAmt The disbVchrMileageCalculatedAmt to set.
628         */
629        public void setDisbVchrMileageCalculatedAmt(KualiDecimal disbVchrMileageCalculatedAmt) {
630            this.disbVchrMileageCalculatedAmt = disbVchrMileageCalculatedAmt;
631        }
632    
633        /**
634         * Gets the dvNonEmployeeExpenses attribute.
635         * 
636         * @return Returns the dvNonEmployeeExpenses.
637         */
638        public List getDvNonEmployeeExpenses() {
639            return dvNonEmployeeExpenses;
640        }
641    
642        /**
643         * Sets the dvNonEmployeeExpenses attribute value.
644         * 
645         * @param dvNonEmployeeExpenses The dvNonEmployeeExpenses to set.
646         */
647        public void setDvNonEmployeeExpenses(List dvNonEmployeeExpenses) {
648            this.dvNonEmployeeExpenses = dvNonEmployeeExpenses;
649        }
650    
651        /**
652         * @return Returns the dvPrePaidEmployeeExpenses.
653         */
654        public List getDvPrePaidEmployeeExpenses() {
655            return dvPrePaidEmployeeExpenses;
656        }
657    
658        /**
659         * @param dvPrePaidEmployeeExpenses The dvPrePaidEmployeeExpenses to set.
660         */
661        public void setDvPrePaidEmployeeExpenses(List dvPrePaidEmployeeExpenses) {
662            this.dvPrePaidEmployeeExpenses = dvPrePaidEmployeeExpenses;
663        }
664    
665        /**
666         * Adds a dv non employee expense line
667         * 
668         * @param line
669         */
670        public void addDvNonEmployeeExpenseLine(DisbursementVoucherNonEmployeeExpense line) {
671            line.setFinancialDocumentLineNumber(getFinancialDocumentNextLineNbr());
672            this.dvNonEmployeeExpenses.add(line);
673            this.financialDocumentNextLineNbr = new Integer(getFinancialDocumentNextLineNbr().intValue() + 1);
674        }
675    
676        /**
677         * Adds a dv pre paid expense line
678         * 
679         * @param line
680         */
681        public void addDvPrePaidEmployeeExpenseLine(DisbursementVoucherNonEmployeeExpense line) {
682            line.setFinancialDocumentLineNumber(getFinancialDocumentNextLineNbr());
683            this.dvPrePaidEmployeeExpenses.add(line);
684            this.financialDocumentNextLineNbr = new Integer(getFinancialDocumentNextLineNbr().intValue() + 1);
685        }
686    
687        /**
688         * Returns the per diem start date time as a string representation.
689         * 
690         * @return
691         */
692        public String getPerDiemStartDateTime() {
693            return SpringContext.getBean(DateTimeService.class).toDateTimeString(dvPerdiemStartDttmStamp);
694        }
695    
696        /**
697         * Sets the per diem start timestamp from the string representation.
698         * 
699         * @param perDiemStartDateTime
700         */
701        public void setPerDiemStartDateTime(String perDiemStartDateTime) {
702            try {
703                this.dvPerdiemStartDttmStamp = SpringContext.getBean(DateTimeService.class).convertToSqlTimestamp(perDiemStartDateTime);
704            }
705            catch (ParseException e) {
706                this.dvPerdiemStartDttmStamp = null;
707            }
708        }
709    
710        /**
711         * Returns the per diem end date time as a string representation.
712         * 
713         * @return String
714         */
715        public String getPerDiemEndDateTime() {
716            return SpringContext.getBean(DateTimeService.class).toDateTimeString(dvPerdiemEndDttmStamp);
717        }
718    
719        /**
720         * Sets the per diem start timestamp from the string representation.
721         * 
722         * @param perDiemEndDateTime
723         */
724        public void setPerDiemEndDateTime(String perDiemEndDateTime) {
725            try {
726                this.dvPerdiemEndDttmStamp = SpringContext.getBean(DateTimeService.class).convertToSqlTimestamp(perDiemEndDateTime);
727            }
728            catch (ParseException e) {
729                this.dvPerdiemEndDttmStamp = null;
730            }
731        }
732    
733        /**
734         * Calculates the total pre paid expense amount
735         * 
736         * @return KualiDecimal
737         */
738        public KualiDecimal getTotalPrePaidAmount() {
739            KualiDecimal totalPrePaidAmount = KualiDecimal.ZERO;
740            if (dvPrePaidEmployeeExpenses != null) {
741                for (Iterator iter = dvPrePaidEmployeeExpenses.iterator(); iter.hasNext();) {
742                    DisbursementVoucherNonEmployeeExpense element = (DisbursementVoucherNonEmployeeExpense) iter.next();
743                    if (ObjectUtils.isNotNull(element.getDisbVchrExpenseAmount())) {
744                        totalPrePaidAmount = totalPrePaidAmount.add(element.getDisbVchrExpenseAmount());
745                    }
746                }
747            }
748    
749            return totalPrePaidAmount;
750        }
751    
752        /**
753         * Calculates the total expense amount
754         * 
755         * @return KualiDecimal
756         */
757        public KualiDecimal getTotalExpenseAmount() {
758            KualiDecimal totalExpenseAmount = KualiDecimal.ZERO;
759            if (dvNonEmployeeExpenses != null) {
760                for (Iterator iter = dvNonEmployeeExpenses.iterator(); iter.hasNext();) {
761                    DisbursementVoucherNonEmployeeExpense element = (DisbursementVoucherNonEmployeeExpense) iter.next();
762                    if (ObjectUtils.isNotNull(element.getDisbVchrExpenseAmount())) {
763                        totalExpenseAmount = totalExpenseAmount.add(element.getDisbVchrExpenseAmount());
764                    }
765                }
766            }
767            return totalExpenseAmount;
768        }
769    
770        /**
771         * Calculates the total travel amount.
772         * 
773         * @return KualiDecimal
774         */
775        public KualiDecimal getTotalTravelAmount() {
776            KualiDecimal travelAmount = KualiDecimal.ZERO;
777    
778            // get non paid expenses first
779            travelAmount = travelAmount.add(getTotalExpenseAmount());
780    
781            // add in per diem amount
782            if (disbVchrPerdiemActualAmount != null) {
783                travelAmount = travelAmount.add(disbVchrPerdiemActualAmount);
784            }
785            // add in personnal car amount
786            if (disbVchrPersonalCarAmount != null) {
787                travelAmount = travelAmount.add(disbVchrPersonalCarAmount);
788            }
789    
790            return travelAmount;
791        }
792    
793        /**
794         * @param totalTravelAmount The totalTravelAmount to set.
795         */
796        public void setTotalTravelAmount(KualiDecimal totalTravelAmount) {
797            this.totalTravelAmount = totalTravelAmount;
798        }
799    
800        /**
801         * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
802         */
803        @Override
804        protected LinkedHashMap toStringMapper() {
805            LinkedHashMap m = new LinkedHashMap();
806            m.put(KFSPropertyConstants.DOCUMENT_NUMBER, this.documentNumber);
807            return m;
808        }
809    }