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.module.ld.businessobject;
018    
019    import java.math.BigDecimal;
020    import java.sql.Date;
021    import java.sql.Timestamp;
022    import java.text.ParseException;
023    import java.text.SimpleDateFormat;
024    import java.util.ArrayList;
025    import java.util.List;
026    import java.util.Map;
027    import java.util.regex.Matcher;
028    
029    import org.apache.commons.lang.StringUtils;
030    import org.kuali.kfs.coa.businessobject.Account;
031    import org.kuali.kfs.coa.businessobject.AccountingPeriod;
032    import org.kuali.kfs.coa.service.AccountService;
033    import org.kuali.kfs.gl.GeneralLedgerConstants;
034    import org.kuali.kfs.gl.businessobject.OriginEntryFull;
035    import org.kuali.kfs.gl.businessobject.OriginEntryInformation;
036    import org.kuali.kfs.module.ld.LaborConstants;
037    import org.kuali.kfs.module.ld.LaborPropertyConstants;
038    import org.kuali.kfs.sys.KFSPropertyConstants;
039    import org.kuali.kfs.sys.Message;
040    import org.kuali.kfs.sys.businessobject.OriginationCode;
041    import org.kuali.kfs.sys.context.SpringContext;
042    import org.kuali.rice.kew.doctype.bo.DocumentTypeEBO;
043    import org.kuali.rice.kew.service.impl.KEWModuleService;
044    import org.kuali.rice.kns.util.KualiDecimal;
045    
046    /**
047     * Labor business object for LaborOriginEntry.
048     */
049    public class LaborOriginEntry extends OriginEntryFull implements OriginEntryInformation, LaborTransaction {
050        private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(LaborOriginEntry.class);
051        private static LaborOriginEntryFieldUtil laborOriginEntryFieldUtil;
052        private static final String DATE_FORMAT = "yyyy-MM-dd";
053        private String positionNumber;
054        private Date transactionPostingDate;
055        private Date payPeriodEndDate;
056        private BigDecimal transactionTotalHours;
057        private Integer payrollEndDateFiscalYear;
058        private String payrollEndDateFiscalPeriodCode;
059        private String financialDocumentApprovedCode;
060        private String transactionEntryOffsetCode;
061        private Timestamp transactionEntryProcessedTimestamp;
062        private String emplid;
063        private Integer employeeRecord;
064        private String earnCode;
065        private String payGroup;
066        private String salaryAdministrationPlan;
067        private String grade;
068        private String runIdentifier;
069        private String laborLedgerOriginalChartOfAccountsCode;
070        private String laborLedgerOriginalAccountNumber;
071        private String laborLedgerOriginalSubAccountNumber;
072        private String laborLedgerOriginalFinancialObjectCode;
073        private String laborLedgerOriginalFinancialSubObjectCode;
074        private String hrmsCompany;
075        private String setid;
076        private Date transactionDateTimeStamp;
077        private DocumentTypeEBO  referenceFinancialSystemDocumentTypeCode;
078        private OriginationCode referenceFinancialSystemOrigination;
079        private AccountingPeriod payrollEndDateFiscalPeriod;
080    
081        public LaborOriginEntry(LaborLedgerPendingEntry pendingEntry){
082            
083            accountNumber = pendingEntry.getAccountNumber();
084            documentNumber = pendingEntry.getDocumentNumber();
085            referenceFinancialDocumentNumber = pendingEntry.getReferenceFinancialDocumentNumber();
086            referenceFinancialDocumentTypeCode = pendingEntry.getReferenceFinancialDocumentTypeCode();
087            financialDocumentReversalDate = pendingEntry.getFinancialDocumentReversalDate();
088            financialDocumentTypeCode = pendingEntry.getFinancialDocumentTypeCode();
089            financialBalanceTypeCode = pendingEntry.getFinancialBalanceTypeCode();
090            chartOfAccountsCode = pendingEntry.getChartOfAccountsCode();
091            financialObjectTypeCode = pendingEntry.getFinancialObjectTypeCode();
092            financialObjectCode = pendingEntry.getFinancialObjectCode();
093            financialSubObjectCode = pendingEntry.getFinancialSubObjectCode();
094            financialSystemOriginationCode = pendingEntry.getFinancialSystemOriginationCode();
095            referenceFinancialSystemOriginationCode = pendingEntry.getReferenceFinancialSystemOriginationCode();
096            organizationDocumentNumber = pendingEntry.getOrganizationDocumentNumber();
097            organizationReferenceId = pendingEntry.getOrganizationReferenceId();
098            projectCode = pendingEntry.getProjectCode();
099            subAccountNumber = pendingEntry.getSubAccountNumber();
100            transactionDate = pendingEntry.getTransactionDate();
101            transactionDebitCreditCode = pendingEntry.getTransactionDebitCreditCode();
102            transactionEncumbranceUpdateCode = pendingEntry.getTransactionEncumbranceUpdateCode();
103            transactionLedgerEntrySequenceNumber = pendingEntry.getTransactionLedgerEntrySequenceNumber();
104            transactionLedgerEntryAmount = pendingEntry.getTransactionLedgerEntryAmount();
105            transactionLedgerEntryDescription = pendingEntry.getTransactionLedgerEntryDescription();
106            universityFiscalPeriodCode = pendingEntry.getUniversityFiscalPeriodCode();
107            universityFiscalYear = pendingEntry.getUniversityFiscalYear();
108            
109            //TODO:- need to check 
110            
111            positionNumber = pendingEntry.getPositionNumber();
112            transactionPostingDate = pendingEntry.getTransactionPostingDate();
113            payPeriodEndDate = pendingEntry.getPayPeriodEndDate();
114            transactionTotalHours = pendingEntry.getTransactionTotalHours();
115            payrollEndDateFiscalYear = pendingEntry.getPayrollEndDateFiscalYear();
116            payrollEndDateFiscalPeriodCode = pendingEntry.getPayrollEndDateFiscalPeriodCode();
117            emplid = pendingEntry.getEmplid();
118            employeeRecord = pendingEntry.getEmployeeRecord();
119            earnCode = pendingEntry.getEarnCode();
120            payGroup = pendingEntry.getPayGroup();
121            salaryAdministrationPlan = pendingEntry.getSalaryAdministrationPlan();
122            grade = pendingEntry.getGrade();
123            runIdentifier = pendingEntry.getRunIdentifier();
124            laborLedgerOriginalChartOfAccountsCode = pendingEntry.getLaborLedgerOriginalChartOfAccountsCode();
125            laborLedgerOriginalAccountNumber = pendingEntry.getLaborLedgerOriginalAccountNumber();
126            laborLedgerOriginalSubAccountNumber = pendingEntry.getLaborLedgerOriginalSubAccountNumber();
127            laborLedgerOriginalFinancialObjectCode = pendingEntry.getLaborLedgerOriginalFinancialObjectCode();
128            laborLedgerOriginalFinancialSubObjectCode = pendingEntry.getLaborLedgerOriginalFinancialSubObjectCode();
129            hrmsCompany = pendingEntry.getHrmsCompany();
130            setid = pendingEntry.getSetid();
131            //TODO:- timestamp????
132            //transactionDateTimeStamp = pendingEntry.getTransactionDateTimeStamp();
133            transactionEntryOffsetCode = pendingEntry.getTransactionEntryOffsetCode();
134            payrollEndDateFiscalPeriod = pendingEntry.getPayrollEndDateFiscalPeriod();
135            
136            //TODO:- don't need it?
137            //reversalDate = pendingEntry.getReversalDate();
138            
139            //TODO:- check: no positionData in laborOriginEntry
140            //positionData = pendingEntry.getPositionData();
141            
142        }
143    
144        /**
145         * Constructor with financialDocumentTypeCode and financialSystemOriginationCode.
146         * 
147         * @param financialDocumentTypeCode
148         * @param financialSystemOriginationCode
149         */
150        public LaborOriginEntry(String financialDocumentTypeCode, String financialSystemOriginationCode) {
151            super(financialDocumentTypeCode, financialSystemOriginationCode);
152        }
153    
154        /**
155         * Default constructor.
156         */
157        public LaborOriginEntry() {
158            this(null, null);
159        }
160    
161        /**
162         * Constructor with laborTransaction
163         * 
164         * @param t
165         */
166        public LaborOriginEntry(LaborTransaction t) {
167            this();
168            copyFieldsFromTransaction(t);
169            setPositionNumber(t.getPositionNumber());
170            setTransactionPostingDate(t.getTransactionPostingDate());
171            setPayPeriodEndDate(t.getPayPeriodEndDate());
172            setTransactionTotalHours(t.getTransactionTotalHours());
173            setPayrollEndDateFiscalYear(t.getPayrollEndDateFiscalYear());
174            setPayrollEndDateFiscalPeriodCode(t.getPayrollEndDateFiscalPeriodCode());
175            setFinancialDocumentApprovedCode(t.getFinancialDocumentApprovedCode());
176            setTransactionEntryOffsetCode(t.getTransactionEntryOffsetCode());
177            setTransactionEntryProcessedTimestamp(t.getTransactionEntryProcessedTimestamp());
178            setEmplid(t.getEmplid());
179            setEmployeeRecord(t.getEmployeeRecord());
180            setEarnCode(t.getEarnCode());
181            setPayGroup(t.getPayGroup());
182            setSalaryAdministrationPlan(t.getSalaryAdministrationPlan());
183            setGrade(t.getGrade());
184            setRunIdentifier(t.getRunIdentifier());
185            setLaborLedgerOriginalChartOfAccountsCode(t.getLaborLedgerOriginalChartOfAccountsCode());
186            setLaborLedgerOriginalAccountNumber(t.getLaborLedgerOriginalAccountNumber());
187            setLaborLedgerOriginalSubAccountNumber(t.getLaborLedgerOriginalSubAccountNumber());
188            setLaborLedgerOriginalFinancialObjectCode(t.getLaborLedgerOriginalFinancialObjectCode());
189            setLaborLedgerOriginalFinancialSubObjectCode(t.getLaborLedgerOriginalFinancialSubObjectCode());
190            setHrmsCompany(t.getHrmsCompany());
191            setSetid(t.getSetid());
192            this.referenceFinancialSystemDocumentTypeCode = t.getReferenceFinancialSystemDocumentTypeCode();
193            setReferenceFinancialSystemOrigination(t.getReferenceFinancialSystemOrigination());
194            setPayrollEndDateFiscalPeriod(t.getPayrollEndDateFiscalPeriod());
195        }
196    
197        /**
198         * Constructor with string line
199         * 
200         * @param line
201         */
202        public LaborOriginEntry(String line) {
203            setFromTextFileForBatch(line, 0);
204        }
205    
206        /**
207         * Gets the positionNumber
208         * 
209         * @return Returns the positionNumber
210         */
211        public String getPositionNumber() {
212            return positionNumber;
213        }
214    
215        /**
216         * Sets the positionNumber
217         * 
218         * @param positionNumber The positionNumber to set.
219         */
220        public void setPositionNumber(String positionNumber) {
221            this.positionNumber = positionNumber;
222        }
223    
224        /**
225         * Gets the transactionPostingDate
226         * 
227         * @return Returns the transactionPostingDate
228         */
229        public Date getTransactionPostingDate() {
230            return transactionPostingDate;
231        }
232    
233        /**
234         * Sets the transactionPostingDate
235         * 
236         * @param transactionPostingDate The transactionPostingDate to set.
237         */
238        public void setTransactionPostingDate(Date transactionPostingDate) {
239            this.transactionPostingDate = transactionPostingDate;
240        }
241    
242        /**
243         * Gets the payPeriodEndDate
244         * 
245         * @return Returns the payPeriodEndDate
246         */
247        public Date getPayPeriodEndDate() {
248            return payPeriodEndDate;
249        }
250    
251        /**
252         * Sets the payPeriodEndDate
253         * 
254         * @param payPeriodEndDate The payPeriodEndDate to set.
255         */
256        public void setPayPeriodEndDate(Date payPeriodEndDate) {
257            this.payPeriodEndDate = payPeriodEndDate;
258        }
259    
260        /**
261         * Gets the transactionTotalHours
262         * 
263         * @return Returns the transactionTotalHours
264         */
265        public BigDecimal getTransactionTotalHours() {
266            return transactionTotalHours;
267        }
268    
269        /**
270         * Sets the transactionTotalHours
271         * 
272         * @param transactionTotalHours The transactionTotalHours to set.
273         */
274        public void setTransactionTotalHours(BigDecimal transactionTotalHours) {
275            this.transactionTotalHours = transactionTotalHours;
276        }
277    
278        /**
279         * Gets the payrollEndDateFiscalYear
280         * 
281         * @return Returns the payrollEndDateFiscalYear
282         */
283        public Integer getPayrollEndDateFiscalYear() {
284            return payrollEndDateFiscalYear;
285        }
286    
287        /**
288         * Sets the payrollEndDateFiscalYear
289         * 
290         * @param payrollEndDateFiscalYear The payrollEndDateFiscalYear to set.
291         */
292        public void setPayrollEndDateFiscalYear(Integer payrollEndDateFiscalYear) {
293            this.payrollEndDateFiscalYear = payrollEndDateFiscalYear;
294        }
295    
296        /**
297         * Gets the payrollEndDateFiscalPeriodCode
298         * 
299         * @return Returns the payrollEndDateFiscalPeriodCode
300         */
301        public String getPayrollEndDateFiscalPeriodCode() {
302            return payrollEndDateFiscalPeriodCode;
303        }
304    
305        /**
306         * Sets the payrollEndDateFiscalPeriodCode
307         * 
308         * @param payrollEndDateFiscalPeriodCode The payrollEndDateFiscalPeriodCode to set.
309         */
310        public void setPayrollEndDateFiscalPeriodCode(String payrollEndDateFiscalPeriodCode) {
311            this.payrollEndDateFiscalPeriodCode = payrollEndDateFiscalPeriodCode;
312        }
313    
314        /**
315         * Gets the financialDocumentApprovedCode
316         * 
317         * @return Returns the financialDocumentApprovedCode
318         */
319        public String getFinancialDocumentApprovedCode() {
320            return financialDocumentApprovedCode;
321        }
322    
323        /**
324         * Sets the financialDocumentApprovedCode
325         * 
326         * @param financialDocumentApprovedCode The financialDocumentApprovedCode to set.
327         */
328        public void setFinancialDocumentApprovedCode(String financialDocumentApprovedCode) {
329            this.financialDocumentApprovedCode = financialDocumentApprovedCode;
330        }
331    
332        /**
333         * Gets the transactionEntryOffsetCode
334         * 
335         * @return Returns the transactionEntryOffsetCode
336         */
337        public String getTransactionEntryOffsetCode() {
338            return transactionEntryOffsetCode;
339        }
340    
341        /**
342         * Sets the transactionEntryOffsetCode
343         * 
344         * @param transactionEntryOffsetCode The transactionEntryOffsetCode to set.
345         */
346        public void setTransactionEntryOffsetCode(String transactionEntryOffsetCode) {
347            this.transactionEntryOffsetCode = transactionEntryOffsetCode;
348        }
349    
350        /**
351         * Gets the transactionEntryProcessedTimestamp
352         * 
353         * @return Returns the transactionEntryProcessedTimestamp
354         */
355        public Timestamp getTransactionEntryProcessedTimestamp() {
356            return transactionEntryProcessedTimestamp;
357        }
358    
359        /**
360         * Sets the transactionEntryProcessedTimestamp
361         * 
362         * @param transactionEntryProcessedTimestamp The transactionEntryProcessedTimestamp to set.
363         */
364        public void setTransactionEntryProcessedTimestamp(Timestamp transactionEntryProcessedTimestamp) {
365            this.transactionEntryProcessedTimestamp = transactionEntryProcessedTimestamp;
366        }
367    
368        /**
369         * Gets the emplid
370         * 
371         * @return Returns the emplid
372         */
373        public String getEmplid() {
374            return emplid;
375        }
376    
377        /**
378         * Sets the emplid
379         * 
380         * @param emplid The emplid to set.
381         */
382        public void setEmplid(String emplid) {
383            this.emplid = emplid;
384        }
385    
386        /**
387         * Gets the employeeRecord
388         * 
389         * @return Returns the employeeRecord
390         */
391        public Integer getEmployeeRecord() {
392            return employeeRecord;
393        }
394    
395        /**
396         * Sets the employeeRecord
397         * 
398         * @param employeeRecord The employeeRecord to set.
399         */
400        public void setEmployeeRecord(Integer employeeRecord) {
401            this.employeeRecord = employeeRecord;
402        }
403    
404        /**
405         * Gets the earnCode
406         * 
407         * @return Returns the earnCode
408         */
409        public String getEarnCode() {
410            return earnCode;
411        }
412    
413        /**
414         * Sets the earnCode
415         * 
416         * @param earnCode The earnCode to set.
417         */
418        public void setEarnCode(String earnCode) {
419            this.earnCode = earnCode;
420        }
421    
422        /**
423         * Gets the payGroup
424         * 
425         * @return Returns the payGroup
426         */
427        public String getPayGroup() {
428            return payGroup;
429        }
430    
431        /**
432         * Sets the payGroup
433         * 
434         * @param payGroup The payGroup to set.
435         */
436        public void setPayGroup(String payGroup) {
437            this.payGroup = payGroup;
438        }
439    
440        /**
441         * Gets the salaryAdministrationPlan
442         * 
443         * @return Returns the salaryAdministrationPlan
444         */
445        public String getSalaryAdministrationPlan() {
446            return salaryAdministrationPlan;
447        }
448    
449        /**
450         * Sets the salaryAdministrationPlan
451         * 
452         * @param salaryAdministrationPlan The salaryAdministrationPlan to set.
453         */
454        public void setSalaryAdministrationPlan(String salaryAdministrationPlan) {
455            this.salaryAdministrationPlan = salaryAdministrationPlan;
456        }
457    
458        /**
459         * Gets the grade
460         * 
461         * @return Returns the grade
462         */
463        public String getGrade() {
464            return grade;
465        }
466    
467        /**
468         * Sets the grade
469         * 
470         * @param grade The grade to set.
471         */
472        public void setGrade(String grade) {
473            this.grade = grade;
474        }
475    
476        /**
477         * Gets the runIdentifier
478         * 
479         * @return Returns the runIdentifier
480         */
481        public String getRunIdentifier() {
482            return runIdentifier;
483        }
484    
485        /**
486         * Sets the runIdentifier
487         * 
488         * @param runIdentifier The runIdentifier to set.
489         */
490        public void setRunIdentifier(String runIdentifier) {
491            this.runIdentifier = runIdentifier;
492        }
493    
494        /**
495         * Gets the laborLedgerOriginalChartOfAccountsCode
496         * 
497         * @return Returns the laborLedgerOriginalChartOfAccountsCode
498         */
499        public String getLaborLedgerOriginalChartOfAccountsCode() {
500            return laborLedgerOriginalChartOfAccountsCode;
501        }
502    
503        /**
504         * Sets the laborLedgerOriginalChartOfAccountsCode
505         * 
506         * @param laborLedgerOriginalChartOfAccountsCode The laborLedgerOriginalChartOfAccountsCode to set.
507         */
508        public void setLaborLedgerOriginalChartOfAccountsCode(String laborLedgerOriginalChartOfAccountsCode) {
509            this.laborLedgerOriginalChartOfAccountsCode = laborLedgerOriginalChartOfAccountsCode;
510        }
511    
512        /**
513         * Gets the laborLedgerOriginalAccountNumber
514         * 
515         * @return Returns the laborLedgerOriginalAccountNumber
516         */
517        public String getLaborLedgerOriginalAccountNumber() {
518            return laborLedgerOriginalAccountNumber;
519        }
520    
521        /**
522         * Sets the laborLedgerOriginalAccountNumber
523         * 
524         * @param laborLedgerOriginalAccountNumber The laborLedgerOriginalAccountNumber to set.
525         */
526        public void setLaborLedgerOriginalAccountNumber(String laborLedgerOriginalAccountNumber) {
527            this.laborLedgerOriginalAccountNumber = laborLedgerOriginalAccountNumber;
528        }
529    
530        /**
531         * Gets the laborLedgerOriginalSubAccountNumber
532         * 
533         * @return Returns the laborLedgerOriginalSubAccountNumber
534         */
535        public String getLaborLedgerOriginalSubAccountNumber() {
536            return laborLedgerOriginalSubAccountNumber;
537        }
538    
539        /**
540         * Sets the laborLedgerOriginalSubAccountNumber
541         * 
542         * @param laborLedgerOriginalSubAccountNumber The laborLedgerOriginalSubAccountNumber to set.
543         */
544        public void setLaborLedgerOriginalSubAccountNumber(String laborLedgerOriginalSubAccountNumber) {
545            this.laborLedgerOriginalSubAccountNumber = laborLedgerOriginalSubAccountNumber;
546        }
547    
548        /**
549         * Gets the laborLedgerOriginalFinancialObjectCode
550         * 
551         * @return Returns the laborLedgerOriginalFinancialObjectCode
552         */
553        public String getLaborLedgerOriginalFinancialObjectCode() {
554            return laborLedgerOriginalFinancialObjectCode;
555        }
556    
557        /**
558         * Sets the laborLedgerOriginalFinancialObjectCode
559         * 
560         * @param laborLedgerOriginalFinancialObjectCode The laborLedgerOriginalFinancialObjectCode to set.
561         */
562        public void setLaborLedgerOriginalFinancialObjectCode(String laborLedgerOriginalFinancialObjectCode) {
563            this.laborLedgerOriginalFinancialObjectCode = laborLedgerOriginalFinancialObjectCode;
564        }
565    
566        /**
567         * Gets the laborLedgerOriginalFinancialSubObjectCode
568         * 
569         * @return Returns the laborLedgerOriginalFinancialSubObjectCode
570         */
571        public String getLaborLedgerOriginalFinancialSubObjectCode() {
572            return laborLedgerOriginalFinancialSubObjectCode;
573        }
574    
575        /**
576         * Sets the laborLedgerOriginalFinancialSubObjectCode
577         * 
578         * @param laborLedgerOriginalFinancialSubObjectCode The laborLedgerOriginalFinancialSubObjectCode to set.
579         */
580        public void setLaborLedgerOriginalFinancialSubObjectCode(String laborLedgerOriginalFinancialSubObjectCode) {
581            this.laborLedgerOriginalFinancialSubObjectCode = laborLedgerOriginalFinancialSubObjectCode;
582        }
583    
584        /**
585         * Gets the hrmsCompany
586         * 
587         * @return Returns the hrmsCompany
588         */
589        public String getHrmsCompany() {
590            return hrmsCompany;
591        }
592    
593        /**
594         * Sets the hrmsCompany
595         * 
596         * @param hrmsCompany The hrmsCompany to set.
597         */
598        public void setHrmsCompany(String hrmsCompany) {
599            this.hrmsCompany = hrmsCompany;
600        }
601    
602        /**
603         * Gets the setid
604         * 
605         * @return Returns the setid
606         */
607        public String getSetid() {
608            return setid;
609        }
610    
611        /**
612         * Sets the setid
613         * 
614         * @param setid The setid to set.
615         */
616        public void setSetid(String setid) {
617            this.setid = setid;
618        }
619    
620        /**
621         * Gets the transactionDateTimeStamp
622         * 
623         * @return Returns the transactionDateTimeStamp
624         */
625        public Date getTransactionDateTimeStamp() {
626            return transactionDateTimeStamp;
627        }
628    
629        /**
630         * Sets the transactionDateTimeStamp
631         * 
632         * @param transactionDateTimeStamp The transactionDateTimeStamp to set.
633         */
634        public void setTransactionDateTimeStamp(Date transactionDateTimeStamp) {
635            this.transactionDateTimeStamp = transactionDateTimeStamp;
636        }
637    
638        /**
639         * Gets the payrollEndDateFiscalPeriod
640         * 
641         * @return Returns the payrollEndDateFiscalPeriod.
642         */
643        public AccountingPeriod getPayrollEndDateFiscalPeriod() {
644            return payrollEndDateFiscalPeriod;
645        }
646    
647        /**
648         * Sets the payrollEndDateFiscalPeriod
649         * 
650         * @param payrollEndDateFiscalPeriod The payrollEndDateFiscalPeriod to set.
651         */
652        public void setPayrollEndDateFiscalPeriod(AccountingPeriod payrollEndDateFiscalPeriod) {
653            this.payrollEndDateFiscalPeriod = payrollEndDateFiscalPeriod;
654        }
655    
656        /**
657         * Gets the referenceFinancialDocumentType
658         * 
659         * @return Returns the referenceFinancialDocumentType.
660         */
661        public DocumentTypeEBO getReferenceFinancialSystemDocumentTypeCode() {
662            return referenceFinancialSystemDocumentTypeCode = SpringContext.getBean(KEWModuleService.class).retrieveExternalizableBusinessObjectIfNecessary(this, referenceFinancialSystemDocumentTypeCode, "referenceFinancialSystemDocumentTypeCode");
663        }
664    
665        /**
666         * Gets the referenceFinancialSystemOrigination
667         * 
668         * @return Returns the referenceFinancialSystemOrigination.
669         */
670        public OriginationCode getReferenceFinancialSystemOrigination() {
671            return referenceFinancialSystemOrigination;
672        }
673    
674        /**
675         * Sets the referenceFinancialSystemOrigination
676         * 
677         * @param referenceFinancialSystemOrigination The referenceFinancialSystemOrigination to set.
678         */
679        public void setReferenceFinancialSystemOrigination(OriginationCode referenceFinancialSystemOrigination) {
680            this.referenceFinancialSystemOrigination = referenceFinancialSystemOrigination;
681        }
682    
683        /**
684         * Sets transactionTotalHours to null.
685         */
686        public void clearTransactionTotalHours() {
687            this.transactionTotalHours = null;
688        }
689    
690        /**
691         * Get lines from string
692         */
693        public String getLine() {
694            StringBuilder sb = new StringBuilder();
695            Map<String, Integer> lMap = getLaborOriginEntryFieldUtil().getFieldLengthMap();
696            Map<String, Integer> pMap = getLaborOriginEntryFieldUtil().getFieldBeginningPositionMap();
697            int entryLength = pMap.get(LaborPropertyConstants.SET_ID) +  lMap.get(LaborPropertyConstants.SET_ID);
698            
699            if (universityFiscalYear == null) {
700                sb.append(GeneralLedgerConstants.getSpaceUniversityFiscalYear());
701            }
702            else {
703                sb.append(universityFiscalYear);
704            }
705    
706            sb.append(getField(lMap.get(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE), chartOfAccountsCode));
707            sb.append(getField(lMap.get(KFSPropertyConstants.ACCOUNT_NUMBER), accountNumber));
708            sb.append(getField(lMap.get(KFSPropertyConstants.SUB_ACCOUNT_NUMBER), subAccountNumber));
709            sb.append(getField(lMap.get(KFSPropertyConstants.FINANCIAL_OBJECT_CODE), financialObjectCode));
710            sb.append(getField(lMap.get(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE), financialSubObjectCode));
711            sb.append(getField(lMap.get(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE), financialBalanceTypeCode));
712            sb.append(getField(lMap.get(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE), financialObjectTypeCode));
713            sb.append(getField(lMap.get(KFSPropertyConstants.UNIVERSITY_FISCAL_PERIOD_CODE), universityFiscalPeriodCode));
714            sb.append(getField(lMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_TYPE_CODE), financialDocumentTypeCode));
715            sb.append(getField(lMap.get(KFSPropertyConstants.FINANCIAL_SYSTEM_ORIGINATION_CODE), financialSystemOriginationCode));
716            sb.append(getField(lMap.get(KFSPropertyConstants.DOCUMENT_NUMBER), documentNumber));
717    
718            String seqNum ="";  
719            if (transactionLedgerEntrySequenceNumber != null) {
720                seqNum = transactionLedgerEntrySequenceNumber.toString();
721            }
722            // Format to a length of 5
723            sb.append(StringUtils.leftPad(seqNum.trim(), lMap.get(KFSPropertyConstants.TRANSACTION_ENTRY_SEQUENCE_NUMBER), "0"));
724    
725            // Labor Specified fields
726            sb.append(getField(lMap.get(KFSPropertyConstants.POSITION_NUMBER), positionNumber));
727            sb.append(getField(lMap.get(KFSPropertyConstants.PROJECT_CODE), projectCode));
728            sb.append(getField(lMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_DESC), transactionLedgerEntryDescription));
729    
730            if (transactionLedgerEntryAmount == null) {
731                sb.append(GeneralLedgerConstants.getZeroTransactionLedgerEntryAmount());
732            }
733            else {
734                String a = transactionLedgerEntryAmount.abs().toString();
735                if (transactionLedgerEntryAmount.isNegative()) {
736                    sb.append("-");
737                } else {
738                    sb.append("+");
739                } 
740                sb.append(GeneralLedgerConstants.getZeroTransactionLedgerEntryAmount().substring(1, lMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT) - a.length()));
741                sb.append(a);
742            }
743    
744            sb.append(getField(lMap.get(KFSPropertyConstants.TRANSACTION_DEBIT_CREDIT_CODE), transactionDebitCreditCode));
745            sb.append(formatDate(transactionDate));
746            sb.append(getField(lMap.get(KFSPropertyConstants.ORGANIZATION_DOCUMENT_NUMBER), organizationDocumentNumber));
747            sb.append(getField(lMap.get(KFSPropertyConstants.ORGANIZATION_REFERENCE_ID), organizationReferenceId));
748            sb.append(getField(lMap.get(KFSPropertyConstants.REFERENCE_FIN_DOCUMENT_TYPE_CODE), referenceFinancialDocumentTypeCode));
749            sb.append(getField(lMap.get(KFSPropertyConstants.FIN_SYSTEM_REF_ORIGINATION_CODE), referenceFinancialSystemOriginationCode));
750            sb.append(getField(lMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_REFERENCE_NBR), referenceFinancialDocumentNumber));
751            sb.append(formatDate(financialDocumentReversalDate));
752            sb.append(getField(lMap.get(KFSPropertyConstants.TRANSACTION_ENCUMBRANCE_UPDT_CD), transactionEncumbranceUpdateCode));
753            sb.append(formatDate(transactionPostingDate));
754            sb.append(formatDate(payPeriodEndDate));
755    
756            if (transactionTotalHours == null) {
757                sb.append(StringUtils.rightPad("", lMap.get(KFSPropertyConstants.TRANSACTION_TOTAL_HOURS), " "));
758            }
759            else {
760                String totalhour = getField(lMap.get(KFSPropertyConstants.TRANSACTION_TOTAL_HOURS), transactionTotalHours.toString());
761                sb.append(StringUtils.leftPad(totalhour.trim(), lMap.get(KFSPropertyConstants.TRANSACTION_TOTAL_HOURS), " "));
762            }
763    
764            if (payrollEndDateFiscalYear == null) {
765                sb.append(StringUtils.rightPad("", lMap.get(KFSPropertyConstants.PAYROLL_END_DATE_FISCAL_YEAR), " "));
766            }
767            else {
768                sb.append(getField(lMap.get(KFSPropertyConstants.PAYROLL_END_DATE_FISCAL_YEAR), payrollEndDateFiscalYear.toString()));
769            }
770    
771            sb.append(getField(lMap.get(LaborPropertyConstants.PAYROLL_END_DATE_FISCAL_PERIOD_CODE), payrollEndDateFiscalPeriodCode));
772            sb.append(getField(lMap.get(KFSPropertyConstants.EMPLID), emplid));
773    
774            if (employeeRecord == null) {
775                sb.append(StringUtils.rightPad("", lMap.get(KFSPropertyConstants.EMPLOYEE_RECORD), " "));
776            }
777            else {
778                String empRecord = getField(lMap.get(KFSPropertyConstants.EMPLOYEE_RECORD), employeeRecord.toString());
779                sb.append(StringUtils.leftPad(empRecord.trim(), lMap.get(KFSPropertyConstants.EMPLOYEE_RECORD), " "));
780            }
781    
782            sb.append(getField(lMap.get(KFSPropertyConstants.EARN_CODE), earnCode));
783            sb.append(getField(lMap.get(KFSPropertyConstants.PAY_GROUP), payGroup));
784            sb.append(getField(lMap.get(LaborPropertyConstants.SALARY_ADMINISTRATION_PLAN), salaryAdministrationPlan));
785            sb.append(getField(lMap.get(LaborPropertyConstants.GRADE), grade));
786            sb.append(getField(lMap.get(LaborPropertyConstants.RUN_IDENTIFIER), runIdentifier));
787            sb.append(getField(lMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_CHART_OF_ACCOUNTS_CODE), laborLedgerOriginalChartOfAccountsCode));
788            sb.append(getField(lMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_ACCOUNT_NUMBER), laborLedgerOriginalAccountNumber));
789            sb.append(getField(lMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_SUB_ACCOUNT_NUMBER), laborLedgerOriginalSubAccountNumber));
790            sb.append(getField(lMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_FINANCIAL_OBJECT_CODE), laborLedgerOriginalFinancialObjectCode));
791            sb.append(getField(lMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_FINANCIAL_SUB_OBJECT_CODE), laborLedgerOriginalFinancialSubObjectCode));
792            sb.append(getField(lMap.get(LaborPropertyConstants.HRMS_COMPANY), hrmsCompany));
793            sb.append(getField(lMap.get(LaborPropertyConstants.SET_ID), setid));
794    
795            // pad to full length of 295 chars.
796            while (entryLength > sb.toString().length()) {
797                sb.append(' ');
798            }
799    
800            // KFSMI-5958: Don't want any control characters in output files. They potentially disrupt further processing
801            Matcher controlCharacterMatcher = MATCH_CONTROL_CHARACTERS.matcher(sb);
802            String returnString = controlCharacterMatcher.replaceAll(REPLACE_MATCHED_CONTROL_CHARACTERS);
803            
804            return returnString;
805        }
806    
807        /**
808         * Sets the entries from text file.
809         */
810        
811        public List<Message> setFromTextFileForBatch(String line, int lineNumber)  {
812            List<Message> returnList = new ArrayList();        
813            Map<String, Integer> pMap = getLaborOriginEntryFieldUtil().getFieldBeginningPositionMap();
814            Map<String, Integer> lMap = getLaborOriginEntryFieldUtil().getFieldLengthMap();
815            int entryLength = pMap.get(LaborPropertyConstants.SET_ID) +  lMap.get(LaborPropertyConstants.SET_ID); 
816            
817            // KFSMI-5958: Don't want any control characters in output files. They potentially disrupt further processing
818            Matcher controlCharacterMatcher = MATCH_CONTROL_CHARACTERS.matcher(line);
819            line = controlCharacterMatcher.replaceAll(REPLACE_MATCHED_CONTROL_CHARACTERS);
820            
821            // Just in case
822            line = org.apache.commons.lang.StringUtils.rightPad(line, entryLength, ' ');
823            String fiscalYearString = line.substring(pMap.get(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR), pMap.get(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE));
824            if (!GeneralLedgerConstants.getSpaceUniversityFiscalYear().equals(fiscalYearString)) {            
825                try {
826                    setUniversityFiscalYear(new Integer(fiscalYearString));
827                }
828                catch (NumberFormatException e) {
829                    returnList.add(new Message("Fiscal year '" + fiscalYearString + "' contains an invalid value." , Message.TYPE_FATAL));
830                    setUniversityFiscalYear(null);
831                }
832    
833            }
834            else {
835                setUniversityFiscalYear(null);
836            }
837            
838            setChartOfAccountsCode(getValue(line, pMap.get(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE), pMap.get(KFSPropertyConstants.ACCOUNT_NUMBER)));
839            setAccountNumber(getValue(line, pMap.get(KFSPropertyConstants.ACCOUNT_NUMBER), pMap.get(KFSPropertyConstants.SUB_ACCOUNT_NUMBER)));
840    
841            // if chart code is empty while accounts cannot cross charts, then derive chart code from account number
842            AccountService acctserv = SpringContext.getBean(AccountService.class);
843            if (StringUtils.isEmpty(getChartOfAccountsCode()) && StringUtils.isNotEmpty(getAccountNumber()) && !acctserv.accountsCanCrossCharts()) {
844                Account account = acctserv.getUniqueAccountForAccountNumber(getAccountNumber());
845                if (account != null) {
846                    setChartOfAccountsCode(account.getChartOfAccountsCode());
847                }            
848            }
849                    
850            setSubAccountNumber(getValue(line, pMap.get(KFSPropertyConstants.SUB_ACCOUNT_NUMBER), pMap.get(KFSPropertyConstants.FINANCIAL_OBJECT_CODE)));
851            setFinancialObjectCode(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_OBJECT_CODE), pMap.get(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE)));
852            setFinancialSubObjectCode(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE), pMap.get(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE)));
853            setFinancialBalanceTypeCode(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE), pMap.get(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE)));
854            setFinancialObjectTypeCode(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE), pMap.get(KFSPropertyConstants.UNIVERSITY_FISCAL_PERIOD_CODE)));
855            setUniversityFiscalPeriodCode(getValue(line, pMap.get(KFSPropertyConstants.UNIVERSITY_FISCAL_PERIOD_CODE), pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_TYPE_CODE)));
856            setFinancialDocumentTypeCode(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_TYPE_CODE), pMap.get(KFSPropertyConstants.FINANCIAL_SYSTEM_ORIGINATION_CODE)));
857            setFinancialSystemOriginationCode(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_SYSTEM_ORIGINATION_CODE), pMap.get(KFSPropertyConstants.DOCUMENT_NUMBER)));
858            setDocumentNumber(getValue(line, pMap.get(KFSPropertyConstants.DOCUMENT_NUMBER), pMap.get(KFSPropertyConstants.TRANSACTION_ENTRY_SEQUENCE_NUMBER)));
859            
860            String sequenceNumberString = line.substring(pMap.get(KFSPropertyConstants.TRANSACTION_ENTRY_SEQUENCE_NUMBER), pMap.get(KFSPropertyConstants.POSITION_NUMBER));
861            if (!GeneralLedgerConstants.getSpaceTransactionEntrySequenceNumber().equals(sequenceNumberString) && !GeneralLedgerConstants.getZeroTransactionEntrySequenceNumber().equals(sequenceNumberString)) {
862                try {
863                    setTransactionLedgerEntrySequenceNumber(new Integer(sequenceNumberString.trim()));
864                }
865                catch (NumberFormatException e) {
866                    returnList.add(new Message("Transaction Sequence Number '" + sequenceNumberString + "' contains an invalid value." , Message.TYPE_FATAL));
867                    setTransactionLedgerEntrySequenceNumber(null);
868                }
869            }
870            else {
871                setTransactionLedgerEntrySequenceNumber(null);
872            }
873            
874            setPositionNumber(getValue(line, pMap.get(KFSPropertyConstants.POSITION_NUMBER), pMap.get(KFSPropertyConstants.PROJECT_CODE)));
875            setProjectCode(getValue(line, pMap.get(KFSPropertyConstants.PROJECT_CODE), pMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_DESC)));
876            setTransactionLedgerEntryDescription(getValue(line, pMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_DESC), pMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT)));
877            
878            String amountString = line.substring(pMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT), pMap.get(KFSPropertyConstants.TRANSACTION_DEBIT_CREDIT_CODE));
879            if (!amountString.trim().equals(GeneralLedgerConstants.EMPTY_CODE)){
880                try {
881                    setTransactionLedgerEntryAmount(new KualiDecimal(amountString.trim()));
882                }
883                catch (NumberFormatException e) {
884                    returnList.add(new Message("Transaction Amount '" + amountString + "' contains an invalid value." , Message.TYPE_FATAL));
885                    setTransactionLedgerEntryAmount(KualiDecimal.ZERO);
886                }
887            } else {
888                returnList.add(new Message("Transaction Amount cannot be blank." , Message.TYPE_FATAL));
889                setTransactionLedgerEntryAmount(KualiDecimal.ZERO);
890            }
891            
892            setTransactionDebitCreditCode(line.substring(pMap.get(KFSPropertyConstants.TRANSACTION_DEBIT_CREDIT_CODE), pMap.get(KFSPropertyConstants.TRANSACTION_DATE)));
893            
894            String transactionDateString = line.substring(pMap.get(KFSPropertyConstants.TRANSACTION_DATE), pMap.get(KFSPropertyConstants.ORGANIZATION_DOCUMENT_NUMBER));
895            if (!transactionDateString.trim().equals(GeneralLedgerConstants.EMPTY_CODE)){
896                try {
897                    setTransactionDate(parseDate(org.springframework.util.StringUtils.trimTrailingWhitespace(transactionDateString), false));
898                }
899                catch (ParseException e) {
900                    setTransactionDate(null);
901                    returnList.add(new Message("Transaction Date '" + transactionDateString + "' contains an invalid value." , Message.TYPE_FATAL));
902                }
903            } else {
904                setTransactionDate(null);
905            }
906            
907            setOrganizationDocumentNumber(getValue(line, pMap.get(KFSPropertyConstants.ORGANIZATION_DOCUMENT_NUMBER), pMap.get(KFSPropertyConstants.ORGANIZATION_REFERENCE_ID)));
908            setOrganizationReferenceId(getValue(line, pMap.get(KFSPropertyConstants.ORGANIZATION_REFERENCE_ID), pMap.get(KFSPropertyConstants.REFERENCE_FIN_DOCUMENT_TYPE_CODE)));
909            setReferenceFinancialDocumentTypeCode(getValue(line, pMap.get(KFSPropertyConstants.REFERENCE_FIN_DOCUMENT_TYPE_CODE), pMap.get(KFSPropertyConstants.FIN_SYSTEM_REF_ORIGINATION_CODE)));
910            setReferenceFinancialSystemOriginationCode(getValue(line, pMap.get(KFSPropertyConstants.FIN_SYSTEM_REF_ORIGINATION_CODE), pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_REFERENCE_NBR)));
911            setReferenceFinancialDocumentNumber(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_REFERENCE_NBR), pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_REVERSAL_DATE)));
912            
913            String revDateStr = line.substring(pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_REVERSAL_DATE), pMap.get(KFSPropertyConstants.TRANSACTION_ENCUMBRANCE_UPDT_CD));
914            if (!revDateStr.trim().equals(GeneralLedgerConstants.EMPTY_CODE)){
915                try {
916                    setFinancialDocumentReversalDate(parseDate(org.springframework.util.StringUtils.trimTrailingWhitespace(revDateStr), false));
917                }
918                catch (ParseException e) {
919                    setFinancialDocumentReversalDate(null);
920                    returnList.add(new Message("Reversal Date '" + revDateStr + "' contains an invalid value." , Message.TYPE_FATAL));
921                }
922            } else {
923                setFinancialDocumentReversalDate(null);
924            }
925            
926            setTransactionEncumbranceUpdateCode(line.substring(pMap.get(KFSPropertyConstants.TRANSACTION_ENCUMBRANCE_UPDT_CD), pMap.get(KFSPropertyConstants.TRANSACTION_POSTING_DATE)));
927    
928            String postDateStr = line.substring(pMap.get(KFSPropertyConstants.TRANSACTION_POSTING_DATE), pMap.get(KFSPropertyConstants.PAY_PERIOD_END_DATE));
929            if (!postDateStr.trim().equals(GeneralLedgerConstants.EMPTY_CODE)){
930                try {
931                    setTransactionPostingDate(parseDate(org.springframework.util.StringUtils.trimTrailingWhitespace(postDateStr), false));
932                }
933                catch (ParseException e) {
934                    setTransactionPostingDate(null);
935                    returnList.add(new Message("Transaction Posting Date '" + postDateStr + "' contains an invalid value." , Message.TYPE_FATAL));
936                }
937            } else {
938                setTransactionPostingDate(null);
939            }
940            
941            String payPeriodDateStr = line.substring(pMap.get(KFSPropertyConstants.PAY_PERIOD_END_DATE), pMap.get(KFSPropertyConstants.TRANSACTION_TOTAL_HOURS));
942            if (!payPeriodDateStr.trim().equals(GeneralLedgerConstants.EMPTY_CODE)){
943                try {
944                    setPayPeriodEndDate(parseDate(org.springframework.util.StringUtils.trimTrailingWhitespace(payPeriodDateStr), false));
945                }
946                catch (ParseException e) {
947                    setPayPeriodEndDate(null);
948                    returnList.add(new Message("Pay Period End Date '" + payPeriodDateStr + "' contains an invalid value." , Message.TYPE_FATAL));
949                }
950            } else {
951                setPayPeriodEndDate(null);
952            }
953            
954            String transTotHrsStr = line.substring(pMap.get(KFSPropertyConstants.TRANSACTION_TOTAL_HOURS), pMap.get(KFSPropertyConstants.PAYROLL_END_DATE_FISCAL_YEAR)); 
955            if (!transTotHrsStr.trim().equals(GeneralLedgerConstants.EMPTY_CODE)){
956                try {
957                    setTransactionTotalHours(new BigDecimal(transTotHrsStr.trim()));
958                }
959                catch (NumberFormatException e) {
960                    setTransactionTotalHours(null);
961                    returnList.add(new Message("Transaction Total Hours '" + transTotHrsStr.trim() + "' contains an invalid value." , Message.TYPE_FATAL));
962                }
963            } else {
964                setTransactionTotalHours(null);
965            }
966            String payEndFisYrStr = line.substring(pMap.get(KFSPropertyConstants.PAYROLL_END_DATE_FISCAL_YEAR), pMap.get(LaborPropertyConstants.PAYROLL_END_DATE_FISCAL_PERIOD_CODE));
967            if (!GeneralLedgerConstants.getSpaceUniversityFiscalYear().equals(payEndFisYrStr)) {
968                try {
969                    setPayrollEndDateFiscalYear(new Integer(org.springframework.util.StringUtils.trimTrailingWhitespace(payEndFisYrStr)));
970                }
971                catch (NumberFormatException e) {
972                    returnList.add(new Message("Payroll End Date Fiscal Year '" + payEndFisYrStr + "' contains an invalid value." , Message.TYPE_FATAL));
973                    setPayrollEndDateFiscalYear(null);
974                }
975            }
976            else {
977                setPayrollEndDateFiscalYear(null);
978            }
979    
980            setPayrollEndDateFiscalPeriodCode(getValue(line, pMap.get(LaborPropertyConstants.PAYROLL_END_DATE_FISCAL_PERIOD_CODE), pMap.get(KFSPropertyConstants.EMPLID)));
981            setEmplid(getValue(line, pMap.get(KFSPropertyConstants.EMPLID), pMap.get(KFSPropertyConstants.EMPLOYEE_RECORD)));
982    
983            String empRecordStr = line.substring(pMap.get(KFSPropertyConstants.EMPLOYEE_RECORD), pMap.get(KFSPropertyConstants.EARN_CODE));
984            if (!empRecordStr.trim().equals(GeneralLedgerConstants.EMPTY_CODE)){
985                try {
986                    setEmployeeRecord(new Integer(empRecordStr.trim()));
987                }
988                catch (NumberFormatException e) {
989                    returnList.add(new Message("Employee Record '" + empRecordStr.trim() + "' contains an invalid value." , Message.TYPE_FATAL));
990                    setEmployeeRecord(null);
991                }
992            } else {
993                setEmployeeRecord(null);
994            }
995            
996            setEarnCode(getValue(line, pMap.get(KFSPropertyConstants.EARN_CODE), pMap.get(KFSPropertyConstants.PAY_GROUP)));
997            setPayGroup(getValue(line, pMap.get(KFSPropertyConstants.PAY_GROUP), pMap.get(LaborPropertyConstants.SALARY_ADMINISTRATION_PLAN)));
998            setSalaryAdministrationPlan(getValue(line, pMap.get(LaborPropertyConstants.SALARY_ADMINISTRATION_PLAN), pMap.get(LaborPropertyConstants.GRADE)));
999            setGrade(getValue(line, pMap.get(LaborPropertyConstants.GRADE), pMap.get(LaborPropertyConstants.RUN_IDENTIFIER)));
1000            setRunIdentifier(getValue(line, pMap.get(LaborPropertyConstants.RUN_IDENTIFIER), pMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_CHART_OF_ACCOUNTS_CODE)));
1001            setLaborLedgerOriginalChartOfAccountsCode(getValue(line, pMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_CHART_OF_ACCOUNTS_CODE), pMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_ACCOUNT_NUMBER)));
1002            setLaborLedgerOriginalAccountNumber(getValue(line, pMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_ACCOUNT_NUMBER), pMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_SUB_ACCOUNT_NUMBER)));
1003            setLaborLedgerOriginalSubAccountNumber(getValue(line, pMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_SUB_ACCOUNT_NUMBER), pMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_FINANCIAL_OBJECT_CODE)));
1004            setLaborLedgerOriginalFinancialObjectCode(getValue(line, pMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_FINANCIAL_OBJECT_CODE), pMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_FINANCIAL_SUB_OBJECT_CODE)));
1005            setLaborLedgerOriginalFinancialSubObjectCode(getValue(line, pMap.get(LaborPropertyConstants.LABORLEDGER_ORIGINAL_FINANCIAL_SUB_OBJECT_CODE), pMap.get(LaborPropertyConstants.HRMS_COMPANY)));
1006            setHrmsCompany(getValue(line, pMap.get(LaborPropertyConstants.HRMS_COMPANY), pMap.get(LaborPropertyConstants.SET_ID)));
1007            setSetid(getValue(line, pMap.get(LaborPropertyConstants.SET_ID), entryLength));
1008            
1009            return returnList;
1010        }
1011    
1012    
1013        /**
1014         * Get fieldValue from fieldName.
1015         * 
1016         * @param fieldName
1017         */
1018    
1019        public Object getFieldValue(String fieldName) {
1020            if ("universityFiscalYear".equals(fieldName)) {
1021                return getUniversityFiscalYear();
1022            }
1023            else if ("chartOfAccountsCode".equals(fieldName)) {
1024                return getChartOfAccountsCode();
1025            }
1026            else if ("accountNumber".equals(fieldName)) {
1027                return getAccountNumber();
1028            }
1029            else if ("subAccountNumber".equals(fieldName)) {
1030                return getSubAccountNumber();
1031            }
1032            else if ("financialObjectCode".equals(fieldName)) {
1033                return getFinancialObjectCode();
1034            }
1035            else if ("financialSubObjectCode".equals(fieldName)) {
1036                return getFinancialSubObjectCode();
1037            }
1038            else if ("financialBalanceTypeCode".equals(fieldName)) {
1039                return getFinancialBalanceTypeCode();
1040            }
1041            else if ("financialObjectTypeCode".equals(fieldName)) {
1042                return getFinancialObjectTypeCode();
1043            }
1044            else if ("universityFiscalPeriodCode".equals(fieldName)) {
1045                return getUniversityFiscalPeriodCode();
1046            }
1047            else if ("financialDocumentTypeCode".equals(fieldName)) {
1048                return getFinancialDocumentTypeCode();
1049            }
1050            else if ("financialSystemOriginationCode".equals(fieldName)) {
1051                return getFinancialSystemOriginationCode();
1052            }
1053            else if (KFSPropertyConstants.DOCUMENT_NUMBER.equals(fieldName)) {
1054                return getDocumentNumber();
1055            }
1056            else if ("transactionLedgerEntrySequenceNumber".equals(fieldName)) {
1057                return getTransactionLedgerEntrySequenceNumber();
1058            }
1059            else if ("positionNumber".equals(fieldName)) {
1060                return getPositionNumber();
1061            }
1062            else if ("transactionLedgerEntryDescription".equals(fieldName)) {
1063                return getTransactionLedgerEntryDescription();
1064            }
1065            else if ("transactionLedgerEntryAmount".equals(fieldName)) {
1066                return getTransactionLedgerEntryAmount();
1067            }
1068            else if ("transactionDebitCreditCode".equals(fieldName)) {
1069                return getTransactionDebitCreditCode();
1070            }
1071            else if ("transactionDate".equals(fieldName)) {
1072                return getTransactionDate();
1073            }
1074            else if ("organizationDocumentNumber".equals(fieldName)) {
1075                return getOrganizationDocumentNumber();
1076            }
1077            else if ("projectCode".equals(fieldName)) {
1078                return getProjectCode();
1079            }
1080            else if ("organizationReferenceId".equals(fieldName)) {
1081                return getOrganizationReferenceId();
1082            }
1083            else if ("referenceFinancialDocumentTypeCode".equals(fieldName)) {
1084                return getReferenceFinancialDocumentTypeCode();
1085            }
1086            else if ("referenceFinancialSystemOriginationCode".equals(fieldName)) {
1087                return getReferenceFinancialSystemOriginationCode();
1088            }
1089            else if ("referenceFinancialDocumentNumber".equals(fieldName)) {
1090                return getReferenceFinancialDocumentNumber();
1091            }
1092            else if ("financialDocumentReversalDate".equals(fieldName)) {
1093                return getFinancialDocumentReversalDate();
1094            }
1095            else if ("transactionEncumbranceUpdateCode".equals(fieldName)) {
1096                return getTransactionEncumbranceUpdateCode();
1097            }
1098            else if ("transactionPostingDate".equals(fieldName)) {
1099                return getTransactionPostingDate();
1100            }
1101            else if ("payPeriodEndDate".equals(fieldName)) {
1102                return getPayPeriodEndDate();
1103            }
1104            else if ("transactionTotalHours".equals(fieldName)) {
1105                return getTransactionTotalHours();
1106            }
1107            else if ("payrollEndDateFiscalYear".equals(fieldName)) {
1108                return getPayrollEndDateFiscalYear();
1109            }
1110            else if ("payrollEndDateFiscalPeriodCode".equals(fieldName)) {
1111                return getPayrollEndDateFiscalPeriodCode();
1112            }
1113            else if ("financialDocumentApprovedCode".equals(fieldName)) {
1114                return getFinancialDocumentApprovedCode();
1115            }
1116            else if ("transactionEntryOffsetCode".equals(fieldName)) {
1117                return getTransactionEntryOffsetCode();
1118            }
1119            else if ("financialDocumentApprovedCode".equals(fieldName)) {
1120                return getFinancialDocumentApprovedCode();
1121            }
1122            else if ("transactionEntryProcessedTimestamp".equals(fieldName)) {
1123                return getTransactionEntryProcessedTimestamp();
1124            }
1125            else if ("emplid".equals(fieldName)) {
1126                return getEmplid();
1127            }
1128            else if ("employeeRecord".equals(fieldName)) {
1129                return getEmployeeRecord();
1130            }
1131            else if ("earnCode".equals(fieldName)) {
1132                return getEarnCode();
1133            }
1134            else if ("payGroup".equals(fieldName)) {
1135                return getPayGroup();
1136            }
1137            else if ("salaryAdministrationPlan".equals(fieldName)) {
1138                return getSalaryAdministrationPlan();
1139            }
1140            else if ("grade".equals(fieldName)) {
1141                return getGrade();
1142            }
1143            else if ("runIdentifier".equals(fieldName)) {
1144                return getRunIdentifier();
1145            }
1146            else if ("laborLedgerOriginalChartOfAccountsCode".equals(fieldName)) {
1147                return getLaborLedgerOriginalChartOfAccountsCode();
1148            }
1149            else if ("laborLedgerOriginalAccountNumber".equals(fieldName)) {
1150                return getLaborLedgerOriginalAccountNumber();
1151            }
1152            else if ("laborLedgerOriginalSubAccountNumber".equals(fieldName)) {
1153                return getLaborLedgerOriginalSubAccountNumber();
1154            }
1155            else if ("laborLedgerOriginalFinancialObjectCode".equals(fieldName)) {
1156                return getLaborLedgerOriginalFinancialObjectCode();
1157            }
1158            else if ("laborLedgerOriginalFinancialSubObjectCode".equals(fieldName)) {
1159                return getLaborLedgerOriginalFinancialSubObjectCode();
1160            }
1161            else if ("hrmsCompany".equals(fieldName)) {
1162                return getHrmsCompany();
1163            }
1164            else if ("setid".equals(fieldName)) {
1165                return getSetid();
1166            }
1167            else {
1168                throw new IllegalArgumentException("Invalid Field Name " + fieldName);
1169            }
1170        }
1171    
1172        /**
1173         * Sets the fieldValue
1174         * 
1175         * @param fieldName
1176         * @param fieldValue
1177         */
1178        public void setFieldValue(String fieldName, String fieldValue) {
1179            if ("universityFiscalYear".equals(fieldName)) {
1180                if (StringUtils.isNotBlank(fieldValue)) {
1181                    setUniversityFiscalYear(Integer.parseInt(fieldValue));
1182                }
1183                else {
1184                    setUniversityFiscalYear(null);
1185                }
1186            }
1187            else if ("chartOfAccountsCode".equals(fieldName)) {
1188                setChartOfAccountsCode(fieldValue);
1189            }
1190            else if ("accountNumber".equals(fieldName)) {
1191                setAccountNumber(fieldValue);
1192            }
1193            else if ("subAccountNumber".equals(fieldName)) {
1194                setSubAccountNumber(fieldValue);
1195            }
1196            else if ("financialObjectCode".equals(fieldName)) {
1197                setFinancialObjectCode(fieldValue);
1198            }
1199            else if ("financialSubObjectCode".equals(fieldName)) {
1200                setFinancialSubObjectCode(fieldValue);
1201            }
1202            else if ("financialBalanceTypeCode".equals(fieldName)) {
1203                setFinancialBalanceTypeCode(fieldValue);
1204            }
1205            else if ("financialObjectTypeCode".equals(fieldName)) {
1206                setFinancialObjectTypeCode(fieldValue);
1207            }
1208            else if ("universityFiscalPeriodCode".equals(fieldName)) {
1209                setUniversityFiscalPeriodCode(fieldValue);
1210            }
1211            else if ("financialDocumentTypeCode".equals(fieldName)) {
1212                setFinancialDocumentTypeCode(fieldValue);
1213            }
1214            else if ("financialSystemOriginationCode".equals(fieldName)) {
1215                setFinancialSystemOriginationCode(fieldValue);
1216            }
1217            else if (KFSPropertyConstants.DOCUMENT_NUMBER.equals(fieldName)) {
1218                setDocumentNumber(fieldValue);
1219            }
1220            else if ("transactionLedgerEntrySequenceNumber".equals(fieldName)) {
1221                if (StringUtils.isNotBlank(fieldValue)) {
1222                    setTransactionLedgerEntrySequenceNumber(Integer.parseInt(fieldValue));
1223                }
1224                else {
1225                    setTransactionLedgerEntrySequenceNumber(null);
1226                }
1227            }
1228            else if ("positionNumber".equals(fieldName)) {
1229                setPositionNumber(fieldValue);
1230            }
1231            else if ("projectCode".equals(fieldName)) {
1232                setProjectCode(fieldValue);
1233            }
1234            else if ("transactionLedgerEntryDescription".equals(fieldName)) {
1235                setTransactionLedgerEntryDescription(fieldValue);
1236            }
1237            else if ("transactionLedgerEntryAmount".equals(fieldName)) {
1238                if (StringUtils.isNotBlank(fieldValue)) {
1239                    setTransactionLedgerEntryAmount(new KualiDecimal(fieldValue));
1240                }
1241                else {
1242                    clearTransactionLedgerEntryAmount();
1243                }
1244            }
1245            else if ("transactionDebitCreditCode".equals(fieldName)) {
1246                setTransactionDebitCreditCode(fieldValue);
1247            }
1248            else if ("transactionDate".equals(fieldName)) {
1249                if (StringUtils.isNotBlank(fieldValue)) {
1250                    try {
1251                        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
1252                        setTransactionDate(new java.sql.Date((df.parse(fieldValue)).getTime()));
1253                    }
1254                    catch (ParseException e) {
1255                        setTransactionDate(null);
1256                    }
1257                }
1258                else {
1259                    setTransactionDate(null);
1260                }
1261            }
1262            else if ("organizationDocumentNumber".equals(fieldName)) {
1263                setOrganizationDocumentNumber(fieldValue);
1264            }
1265            else if ("organizationReferenceId".equals(fieldName)) {
1266                setOrganizationReferenceId(fieldValue);
1267            }
1268            else if ("referenceFinancialDocumentTypeCode".equals(fieldName)) {
1269                setReferenceFinancialDocumentTypeCode(fieldValue);
1270            }
1271            else if ("referenceFinancialSystemOriginationCode".equals(fieldName)) {
1272                setReferenceFinancialSystemOriginationCode(fieldValue);
1273            }
1274            else if ("referenceFinancialDocumentNumber".equals(fieldName)) {
1275                setReferenceFinancialDocumentNumber(fieldValue);
1276            }
1277            else if ("financialDocumentReversalDate".equals(fieldName)) {
1278                if (StringUtils.isNotBlank(fieldValue)) {
1279                    try {
1280                        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
1281                        setFinancialDocumentReversalDate(new java.sql.Date((df.parse(fieldValue)).getTime()));
1282                    }
1283                    catch (ParseException e) {
1284                        setFinancialDocumentReversalDate(null);
1285                    }
1286                }
1287                else {
1288                    setFinancialDocumentReversalDate(null);
1289                }
1290            }
1291            else if ("transactionEncumbranceUpdateCode".equals(fieldName)) {
1292                setTransactionEncumbranceUpdateCode(fieldValue);
1293            }
1294            else if ("transactionPostingDate".equals(fieldName)) {
1295                if (StringUtils.isNotBlank(fieldValue)) {
1296                    try {
1297                        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
1298                        setTransactionPostingDate(new java.sql.Date((df.parse(fieldValue)).getTime()));
1299                    }
1300                    catch (ParseException e) {
1301                        setTransactionPostingDate(null);
1302                    }
1303                }
1304                else {
1305                    setTransactionPostingDate(null);
1306                }
1307            }
1308            else if ("payPeriodEndDate".equals(fieldName)) {
1309                if (StringUtils.isNotBlank(fieldValue)) {
1310                    try {
1311                        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
1312                        setPayPeriodEndDate(new java.sql.Date((df.parse(fieldValue)).getTime()));
1313                    }
1314                    catch (ParseException e) {
1315                        setPayPeriodEndDate(null);
1316                    }
1317                }
1318                else {
1319                    setPayPeriodEndDate(null);
1320                }
1321            }
1322            else if ("transactionTotalHours".equals(fieldName)) {
1323                if (StringUtils.isNotBlank(fieldValue)) {
1324                    setTransactionTotalHours(new BigDecimal(fieldValue));
1325                }
1326                else {
1327                    clearTransactionTotalHours();
1328                }
1329            }
1330            else if ("payrollEndDateFiscalYear".equals(fieldName)) {
1331                if (StringUtils.isNotBlank(fieldValue)) {
1332                    setPayrollEndDateFiscalYear(Integer.parseInt(fieldValue));
1333                }
1334                else {
1335                    setPayrollEndDateFiscalYear(null);
1336                }
1337            }
1338            else if ("payrollEndDateFiscalPeriodCode".equals(fieldName)) {
1339                setPayrollEndDateFiscalPeriodCode(fieldValue);
1340            }
1341            else if ("emplid".equals(fieldName)) {
1342                setEmplid(fieldValue);
1343            }
1344            else if ("employeeRecord".equals(fieldName)) {
1345                if (StringUtils.isNotBlank(fieldValue)) {
1346                    setEmployeeRecord(Integer.parseInt(fieldValue));
1347                }
1348                else {
1349                    setEmployeeRecord(null);
1350                }
1351            }
1352            else if ("earnCode".equals(fieldName)) {
1353                setEarnCode(fieldValue);
1354            }
1355            else if ("payGroup".equals(fieldName)) {
1356                setPayGroup(fieldValue);
1357            }
1358            else if ("salaryAdministrationPlan".equals(fieldName)) {
1359                setSalaryAdministrationPlan(fieldValue);
1360            }
1361            else if ("grade".equals(fieldName)) {
1362                setGrade(fieldValue);
1363            }
1364            else if ("runIdentifier".equals(fieldName)) {
1365                setRunIdentifier(fieldValue);
1366            }
1367            else if ("laborLedgerOriginalChartOfAccountsCode".equals(fieldName)) {
1368                setLaborLedgerOriginalChartOfAccountsCode(fieldValue);
1369            }
1370            else if ("laborLedgerOriginalAccountNumber".equals(fieldName)) {
1371                setLaborLedgerOriginalAccountNumber(fieldValue);
1372            }
1373            else if ("laborLedgerOriginalSubAccountNumber".equals(fieldName)) {
1374                setLaborLedgerOriginalSubAccountNumber(fieldValue);
1375            }
1376            else if ("laborLedgerOriginalFinancialObjectCode".equals(fieldName)) {
1377                setLaborLedgerOriginalFinancialObjectCode(fieldValue);
1378            }
1379            else if ("laborLedgerOriginalFinancialSubObjectCode".equals(fieldName)) {
1380                setLaborLedgerOriginalFinancialSubObjectCode(fieldValue);
1381            }
1382            else if ("hrmsCompany".equals(fieldName)) {
1383                setHrmsCompany(fieldValue);
1384            }
1385            else if ("setid".equals(fieldName)) {
1386                setSetid(fieldValue);
1387            }
1388            else {
1389                throw new IllegalArgumentException("Invalid Field Name " + fieldName);
1390            }
1391        }
1392    
1393        /**
1394         * Formats date and returns date
1395         * 
1396         * @param date
1397         * @see org.kuali.kfs.gl.businessobject.OriginEntryLite#formatDate(java.sql.Date)
1398         */
1399        protected String formatDate(Date date) {
1400            if (date == null) {
1401                return LaborConstants.getSpaceTransactionDate();
1402            }
1403            else {
1404                SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
1405                return sdf.format(date);
1406            }
1407        }
1408        
1409        /**
1410         * @return an initialized version of the LaborOriginEntryFieldUtil
1411         */
1412        protected static LaborOriginEntryFieldUtil getLaborOriginEntryFieldUtil() {
1413            if (laborOriginEntryFieldUtil == null) {
1414                laborOriginEntryFieldUtil = new LaborOriginEntryFieldUtil();
1415            }
1416            return laborOriginEntryFieldUtil;
1417        }
1418    }