001    /*
002     * Copyright 2011 The Kuali Foundation.
003     * 
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     * http://www.opensource.org/licenses/ecl2.php
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.kfs.gl.businessobject;
017    
018    import java.sql.Date;
019    import java.text.ParseException;
020    import java.text.SimpleDateFormat;
021    import java.util.ArrayList;
022    import java.util.LinkedHashMap;
023    import java.util.List;
024    import java.util.Map;
025    import java.util.regex.Matcher;
026    import java.util.regex.Pattern;
027    
028    import org.apache.commons.lang.StringUtils;
029    import org.kuali.kfs.coa.businessobject.A21SubAccount;
030    import org.kuali.kfs.coa.businessobject.Account;
031    import org.kuali.kfs.coa.businessobject.AccountingPeriod;
032    import org.kuali.kfs.coa.businessobject.BalanceType;
033    import org.kuali.kfs.coa.businessobject.Chart;
034    import org.kuali.kfs.coa.businessobject.ObjectCode;
035    import org.kuali.kfs.coa.businessobject.ObjectType;
036    import org.kuali.kfs.coa.businessobject.ProjectCode;
037    import org.kuali.kfs.coa.businessobject.SubAccount;
038    import org.kuali.kfs.coa.businessobject.SubObjectCode;
039    import org.kuali.kfs.coa.service.AccountService;
040    import org.kuali.kfs.gl.GeneralLedgerConstants;
041    import org.kuali.kfs.gl.exception.LoadException;
042    import org.kuali.kfs.sys.KFSConstants;
043    import org.kuali.kfs.sys.KFSPropertyConstants;
044    import org.kuali.kfs.sys.Message;
045    import org.kuali.kfs.sys.businessobject.GeneralLedgerPendingEntry;
046    import org.kuali.kfs.sys.businessobject.OriginationCode;
047    import org.kuali.kfs.sys.businessobject.SystemOptions;
048    import org.kuali.kfs.sys.businessobject.UniversityDate;
049    import org.kuali.kfs.sys.context.SpringContext;
050    import org.kuali.rice.kew.doctype.bo.DocumentTypeEBO;
051    import org.kuali.rice.kew.service.impl.KEWModuleService;
052    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
053    import org.kuali.rice.kns.service.DateTimeService;
054    import org.kuali.rice.kns.util.KualiDecimal;
055    
056    /**
057     * This class represents a full origin entry
058     */
059    public class OriginEntryFull extends PersistableBusinessObjectBase implements Transaction, OriginEntryInformation, FlexibleAccountUpdateable {
060        private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OriginEntryFull.class);
061        private static OriginEntryFieldUtil originEntryFieldUtil;
062        
063        public static final Pattern MATCH_CONTROL_CHARACTERS = Pattern.compile("\\p{Cntrl}");
064        public static final String REPLACE_MATCHED_CONTROL_CHARACTERS = " ";
065        
066     // 17 characters while it is 19 character in DD. Don't change, it has to be 17.
067        // KFSMI-3308 - changed to 20
068         
069        
070        private Integer entryId;
071        private Integer entryGroupId;
072        protected String accountNumber;
073        protected String documentNumber;
074        protected String referenceFinancialDocumentNumber;
075        protected String referenceFinancialDocumentTypeCode;
076        protected Date financialDocumentReversalDate;
077        protected String financialDocumentTypeCode;
078        protected String financialBalanceTypeCode;
079        protected String chartOfAccountsCode;
080        protected String financialObjectTypeCode;
081        protected String financialObjectCode;
082        protected String financialSubObjectCode;
083        protected String financialSystemOriginationCode;
084        protected String referenceFinancialSystemOriginationCode;
085        protected String organizationDocumentNumber;
086        protected String organizationReferenceId;
087        protected String projectCode;
088        protected String subAccountNumber;
089        protected Date transactionDate;
090        protected String transactionDebitCreditCode;
091        protected String transactionEncumbranceUpdateCode;
092        protected Integer transactionLedgerEntrySequenceNumber;
093        protected KualiDecimal transactionLedgerEntryAmount;
094        protected String transactionLedgerEntryDescription;
095        protected String universityFiscalPeriodCode;
096        protected Integer universityFiscalYear;
097        private boolean transactionScrubberOffsetGenerationIndicator;
098    
099        // bo references
100        private OriginEntryGroup group;
101        private Account account;
102        private SubAccount subAccount;
103        private A21SubAccount a21SubAccount;
104        private BalanceType balanceType;
105        private Chart chart;
106        private ObjectCode financialObject;
107        private SubObjectCode financialSubObject;
108        private ObjectType objectType;
109        private ProjectCode project;
110        private DocumentTypeEBO financialSystemDocumentTypeCode;
111        private UniversityDate universityDate;
112        private SystemOptions option;
113        private AccountingPeriod accountingPeriod;
114        private UniversityDate reversalDate;
115        private OriginationCode origination;
116        private DocumentTypeEBO referenceFinancialSystemDocumentTypeCode;
117        
118        private static final String DATE_FORMAT = "yyyy-MM-dd";
119    
120        public void copyFieldsFromTransaction(Transaction t) {
121            setAccountNumber(t.getAccountNumber());
122            setDocumentNumber(t.getDocumentNumber());
123            setReferenceFinancialDocumentNumber(t.getReferenceFinancialDocumentNumber());
124            setReferenceFinancialDocumentTypeCode(t.getReferenceFinancialDocumentTypeCode());
125            setFinancialDocumentReversalDate(t.getFinancialDocumentReversalDate());
126            setFinancialDocumentTypeCode(t.getFinancialDocumentTypeCode());
127            setFinancialBalanceTypeCode(t.getFinancialBalanceTypeCode());
128            setChartOfAccountsCode(t.getChartOfAccountsCode());
129            setFinancialObjectTypeCode(t.getFinancialObjectTypeCode());
130            setFinancialObjectCode(t.getFinancialObjectCode());
131            setFinancialSubObjectCode(t.getFinancialSubObjectCode());
132            setFinancialSystemOriginationCode(t.getFinancialSystemOriginationCode());
133            setReferenceFinancialSystemOriginationCode(t.getReferenceFinancialSystemOriginationCode());
134            setOrganizationDocumentNumber(t.getOrganizationDocumentNumber());
135            setOrganizationReferenceId(t.getOrganizationReferenceId());
136            setProjectCode(t.getProjectCode());
137            setSubAccountNumber(t.getSubAccountNumber());
138            setTransactionDate(t.getTransactionDate());
139            setTransactionDebitCreditCode(t.getTransactionDebitCreditCode());
140            setTransactionEncumbranceUpdateCode(t.getTransactionEncumbranceUpdateCode());
141            setTransactionLedgerEntrySequenceNumber(t.getTransactionLedgerEntrySequenceNumber());
142            setTransactionLedgerEntryAmount(t.getTransactionLedgerEntryAmount());
143            setTransactionLedgerEntryDescription(t.getTransactionLedgerEntryDescription());
144            setUniversityFiscalPeriodCode(t.getUniversityFiscalPeriodCode());
145            setUniversityFiscalYear(t.getUniversityFiscalYear());
146        }
147    
148        protected java.sql.Date parseDate(String sdate, boolean beLenientWithDates) throws ParseException {
149            if ((sdate == null) || (sdate.trim().length() == 0)) {
150                return null;
151            }
152            else {
153    
154                SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
155                sdf.setLenient(beLenientWithDates);
156    
157                java.util.Date d = sdf.parse(sdate);
158                return new Date(d.getTime());
159            }
160        }
161    
162        protected String formatDate(Date date) {
163            if (date == null) {
164                return GeneralLedgerConstants.getSpaceTransactionDate();
165            }
166            else {
167                SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
168                return sdf.format(date);
169            }
170        }
171    
172        protected String getValue(String line, int s, int e) {
173          //  String v = line.substring(s, e);
174            return org.springframework.util.StringUtils.trimTrailingWhitespace(StringUtils.substring(line, s, e));
175        }
176    
177        /**
178         * This method loads the fields of this origin entry by parsing the passed in the string It is assumed that the String does not
179         * contain the origin entry ID, but if it does, it will be ignored
180         * 
181         * @param line a string representing an origin entry
182         * @param lineNumber used to render an error message by identifying this line
183         * @throws LoadException
184         */
185        
186        public List<Message> setFromTextFileForBatch(String line, int lineNumber) throws LoadException {
187            List<Message> returnList = new ArrayList<Message>(); 
188            final Map<String, Integer> pMap = getOriginEntryFieldUtil().getFieldBeginningPositionMap();
189            
190            // KFSMI-5958: Don't want any control characters in output files. They potentially disrupt further processing
191            Matcher controlCharacterMatcher = MATCH_CONTROL_CHARACTERS.matcher(line);
192            line = controlCharacterMatcher.replaceAll(REPLACE_MATCHED_CONTROL_CHARACTERS);
193            
194            // Just in case
195            line = org.apache.commons.lang.StringUtils.rightPad(line, GeneralLedgerConstants.getSpaceAllOriginEntryFields().length(), ' ');
196            
197            if (!GeneralLedgerConstants.getSpaceUniversityFiscalYear().equals(line.substring(pMap.get(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR), pMap.get(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE)))) {
198                try {
199                    setUniversityFiscalYear(new Integer(getValue(line, pMap.get(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR), pMap.get(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE))));
200                }
201                catch (NumberFormatException e) {
202                    returnList.add(new Message("Fiscal year '" + line.substring(pMap.get(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR), pMap.get(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE)) + "' contains an invalid value." , Message.TYPE_FATAL));
203                    setUniversityFiscalYear(null);
204                }
205            }
206            else {
207                setUniversityFiscalYear(null);
208            }
209    
210            setChartOfAccountsCode(getValue(line, pMap.get(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE), pMap.get(KFSPropertyConstants.ACCOUNT_NUMBER)));
211            setAccountNumber(getValue(line, pMap.get(KFSPropertyConstants.ACCOUNT_NUMBER), pMap.get(KFSPropertyConstants.SUB_ACCOUNT_NUMBER)));
212    
213            // if chart code is empty while accounts cannot cross charts, then derive chart code from account number
214            AccountService acctserv = SpringContext.getBean(AccountService.class);
215            if (StringUtils.isEmpty(getChartOfAccountsCode()) && StringUtils.isNotEmpty(getAccountNumber()) && !acctserv.accountsCanCrossCharts()) {
216                Account account = acctserv.getUniqueAccountForAccountNumber(getAccountNumber());
217                if (account != null) {
218                    setChartOfAccountsCode(account.getChartOfAccountsCode());
219                }            
220            }
221            
222            setSubAccountNumber(getValue(line, pMap.get(KFSPropertyConstants.SUB_ACCOUNT_NUMBER), pMap.get(KFSPropertyConstants.FINANCIAL_OBJECT_CODE)));
223            setFinancialObjectCode(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_OBJECT_CODE), pMap.get(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE)));
224            setFinancialSubObjectCode(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE), pMap.get(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE)));
225            setFinancialBalanceTypeCode(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE), pMap.get(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE)));
226            setFinancialObjectTypeCode(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE), pMap.get(KFSPropertyConstants.UNIVERSITY_FISCAL_PERIOD_CODE)));
227            setUniversityFiscalPeriodCode(getValue(line, pMap.get(KFSPropertyConstants.UNIVERSITY_FISCAL_PERIOD_CODE), pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_TYPE_CODE)));
228            setFinancialDocumentTypeCode(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_TYPE_CODE), pMap.get(KFSPropertyConstants.FINANCIAL_SYSTEM_ORIGINATION_CODE)));
229            setFinancialSystemOriginationCode(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_SYSTEM_ORIGINATION_CODE), pMap.get(KFSPropertyConstants.DOCUMENT_NUMBER)));
230            setDocumentNumber(getValue(line, pMap.get(KFSPropertyConstants.DOCUMENT_NUMBER), pMap.get(KFSPropertyConstants.TRANSACTION_ENTRY_SEQUENCE_NUMBER)));
231            
232            // don't trim sequenceNumber because SpaceTransactionEntrySequenceNumber is "     "
233            if (!GeneralLedgerConstants.getSpaceTransactionEntrySequenceNumber().equals(line.substring(pMap.get(KFSPropertyConstants.TRANSACTION_ENTRY_SEQUENCE_NUMBER), pMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_DESC))) && !GeneralLedgerConstants.getZeroTransactionEntrySequenceNumber().equals(getValue(line, pMap.get(KFSPropertyConstants.TRANSACTION_ENTRY_SEQUENCE_NUMBER), pMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_DESC)))) {
234                try {
235                    setTransactionLedgerEntrySequenceNumber(new Integer(getValue(line, pMap.get(KFSPropertyConstants.TRANSACTION_ENTRY_SEQUENCE_NUMBER), pMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_DESC))));
236                }
237                catch (NumberFormatException e) {
238                    returnList.add(new Message("Transaction Sequence Number '" + line.substring(pMap.get(KFSPropertyConstants.TRANSACTION_ENTRY_SEQUENCE_NUMBER), pMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_DESC)) + "' contains an invalid value." , Message.TYPE_FATAL));
239                    setTransactionLedgerEntrySequenceNumber(null);
240                }
241            }
242            else {
243                setTransactionLedgerEntrySequenceNumber(null);
244            }
245            
246            setTransactionLedgerEntryDescription(getValue(line, pMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_DESC), pMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT)));
247            
248            if (!getValue(line, pMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT), pMap.get(KFSPropertyConstants.TRANSACTION_DEBIT_CREDIT_CODE)).equals(GeneralLedgerConstants.EMPTY_CODE)){
249                try {
250                    setTransactionLedgerEntryAmount(new KualiDecimal(getValue(line, pMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT), pMap.get(KFSPropertyConstants.TRANSACTION_DEBIT_CREDIT_CODE)).trim()));
251                }
252                catch (NumberFormatException e) {
253                    returnList.add(new Message("Transaction Amount '" + line.substring(pMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT), pMap.get(KFSPropertyConstants.TRANSACTION_DEBIT_CREDIT_CODE)) + "' contains an invalid value." , Message.TYPE_FATAL));
254                    setTransactionLedgerEntryAmount(KualiDecimal.ZERO);
255                }
256            } else {
257                returnList.add(new Message("Transaction Amount cannot be blank." , Message.TYPE_FATAL));
258                setTransactionLedgerEntryAmount(KualiDecimal.ZERO);
259            }
260            
261            setTransactionDebitCreditCode(line.substring(pMap.get(KFSPropertyConstants.TRANSACTION_DEBIT_CREDIT_CODE), pMap.get(KFSPropertyConstants.TRANSACTION_DATE)));
262    
263            if (!getValue(line, pMap.get(KFSPropertyConstants.TRANSACTION_DATE), pMap.get(KFSPropertyConstants.ORGANIZATION_DOCUMENT_NUMBER)).equals(GeneralLedgerConstants.EMPTY_CODE)){
264                // FSKD-193, KFSMI-5441
265                try {
266                    setTransactionDate(parseDate(getValue(line, pMap.get(KFSPropertyConstants.TRANSACTION_DATE), pMap.get(KFSPropertyConstants.ORGANIZATION_DOCUMENT_NUMBER)), false));
267                }
268                catch (ParseException e) {
269                    setTransactionDate(SpringContext.getBean(DateTimeService.class).getCurrentSqlDate());
270                }
271            } else {
272                setTransactionDate(null);
273            }
274            
275            setOrganizationDocumentNumber(getValue(line, pMap.get(KFSPropertyConstants.ORGANIZATION_DOCUMENT_NUMBER), pMap.get(KFSPropertyConstants.PROJECT_CODE)));
276            setProjectCode(getValue(line, pMap.get(KFSPropertyConstants.PROJECT_CODE), pMap.get(KFSPropertyConstants.ORGANIZATION_REFERENCE_ID)));
277            setOrganizationReferenceId(getValue(line, pMap.get(KFSPropertyConstants.ORGANIZATION_REFERENCE_ID), pMap.get(KFSPropertyConstants.REFERENCE_FIN_DOCUMENT_TYPE_CODE)));
278            setReferenceFinancialDocumentTypeCode(getValue(line, pMap.get(KFSPropertyConstants.REFERENCE_FIN_DOCUMENT_TYPE_CODE), pMap.get(KFSPropertyConstants.FIN_SYSTEM_REF_ORIGINATION_CODE)));
279            setReferenceFinancialSystemOriginationCode(getValue(line, pMap.get(KFSPropertyConstants.FIN_SYSTEM_REF_ORIGINATION_CODE), pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_REFERENCE_NBR)));
280            setReferenceFinancialDocumentNumber(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_REFERENCE_NBR), pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_REVERSAL_DATE)));
281    
282            if (!getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_REVERSAL_DATE), pMap.get(KFSPropertyConstants.TRANSACTION_ENCUMBRANCE_UPDT_CD)).equals(GeneralLedgerConstants.EMPTY_CODE)){
283                try {
284                    setFinancialDocumentReversalDate(parseDate(getValue(line, pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_REVERSAL_DATE), pMap.get(KFSPropertyConstants.TRANSACTION_ENCUMBRANCE_UPDT_CD)), false));
285                }
286                catch (ParseException e) {
287                    setFinancialDocumentReversalDate(null);
288                    returnList.add(new Message("Reversal Date '" + line.substring(pMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_REVERSAL_DATE), pMap.get(KFSPropertyConstants.TRANSACTION_ENCUMBRANCE_UPDT_CD)) + "' contains an invalid value." , Message.TYPE_FATAL));
289                    
290                }
291            } else {
292                setFinancialDocumentReversalDate(null);
293            }
294            
295            //set till end
296            setTransactionEncumbranceUpdateCode(line.substring(pMap.get(KFSPropertyConstants.TRANSACTION_ENCUMBRANCE_UPDT_CD), GeneralLedgerConstants.getSpaceAllOriginEntryFields().length()));
297        
298            return returnList;    
299        }
300    
301    
302        protected String getField(int size, String value) {
303            if (value == null) {
304                return GeneralLedgerConstants.getSpaceAllOriginEntryFields().substring(0, size);
305            }
306            else {
307                if (value.length() < size) {
308                    return value + GeneralLedgerConstants.getSpaceAllOriginEntryFields().substring(0, size - value.length());
309                }
310                else {
311                    return value.substring(0, size);
312                }
313            }
314        }
315    
316        public String getLine() {
317            StringBuffer sb = new StringBuffer();
318            Map<String, Integer> fieldLengthMap = getOriginEntryFieldUtil().getFieldLengthMap();
319            
320            if (universityFiscalYear == null) {
321                sb.append(GeneralLedgerConstants.getSpaceUniversityFiscalYear());
322            }
323            else {
324                sb.append(universityFiscalYear);
325            }
326    
327            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE), chartOfAccountsCode));
328            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.ACCOUNT_NUMBER), accountNumber));
329            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.SUB_ACCOUNT_NUMBER), subAccountNumber));
330            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.FINANCIAL_OBJECT_CODE), financialObjectCode));
331            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE), financialSubObjectCode));
332            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE), financialBalanceTypeCode));
333            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE), financialObjectTypeCode));
334            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.UNIVERSITY_FISCAL_PERIOD_CODE), universityFiscalPeriodCode));
335            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_TYPE_CODE), financialDocumentTypeCode));
336            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.FINANCIAL_SYSTEM_ORIGINATION_CODE), financialSystemOriginationCode));
337            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.DOCUMENT_NUMBER), documentNumber));
338    
339            // This is the cobol code for transaction sequence numbers.
340            // 3025 019280 IF TRN-ENTR-SEQ-NBR OF GLEN-RECORD NOT NUMERIC
341            // 3026 019290 MOVE ZEROES TO TRN-ENTR-SEQ-NBR OF GLEN-RECORD
342            // 3027 019300 END-IF
343            // 3028 019310 IF TRN-ENTR-SEQ-NBR OF GLEN-RECORD = SPACES
344            // 3029 019320 MOVE ZEROES
345            // 3030 019330 TO TRN-ENTR-SEQ-NBR OF ALT-GLEN-RECORD
346            // 3031 019340 ELSE
347            // 3032 019350 MOVE TRN-ENTR-SEQ-NBR OF GLEN-RECORD
348            // 3033 019360 TO TRN-ENTR-SEQ-NBR OF ALT-GLEN-RECORD
349            // 3034 019370 END-IF
350            String seqNum ="";  
351            if (transactionLedgerEntrySequenceNumber != null) {
352                seqNum = transactionLedgerEntrySequenceNumber.toString();
353            }
354            // Format to a length of 5
355            sb.append(StringUtils.leftPad(seqNum.trim(), fieldLengthMap.get(KFSPropertyConstants.TRANSACTION_ENTRY_SEQUENCE_NUMBER), "0"));
356            
357            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_DESC), transactionLedgerEntryDescription));
358            if (transactionLedgerEntryAmount == null) {
359                sb.append(GeneralLedgerConstants.getZeroTransactionLedgerEntryAmount());
360            }
361            else {
362                String a = transactionLedgerEntryAmount.abs().toString();
363                if (transactionLedgerEntryAmount.isNegative()) {
364                    sb.append("-");
365                } else {
366                    sb.append("+");
367                }
368                sb.append(GeneralLedgerConstants.getZeroTransactionLedgerEntryAmount().substring(1, fieldLengthMap.get(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT) - a.length()));
369                sb.append(a);
370            }
371            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.TRANSACTION_DEBIT_CREDIT_CODE), transactionDebitCreditCode));
372            sb.append(formatDate(transactionDate));
373            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.ORGANIZATION_DOCUMENT_NUMBER), organizationDocumentNumber));
374            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.PROJECT_CODE), projectCode));
375            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.ORGANIZATION_REFERENCE_ID), organizationReferenceId));
376            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.REFERENCE_FIN_DOCUMENT_TYPE_CODE), referenceFinancialDocumentTypeCode));
377            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.FIN_SYSTEM_REF_ORIGINATION_CODE), referenceFinancialSystemOriginationCode));
378            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.FINANCIAL_DOCUMENT_REFERENCE_NBR), referenceFinancialDocumentNumber));
379            sb.append(formatDate(financialDocumentReversalDate));
380            sb.append(getField(fieldLengthMap.get(KFSPropertyConstants.TRANSACTION_ENCUMBRANCE_UPDT_CD), transactionEncumbranceUpdateCode));
381            // pad to full length 
382            while (GeneralLedgerConstants.getSpaceAllOriginEntryFields().length() > sb.toString().length()) {
383                sb.append(' ');
384            }
385            
386            // KFSMI-5958: Don't want any control characters in output files. They potentially disrupt further processing
387            Matcher controlCharacterMatcher = MATCH_CONTROL_CHARACTERS.matcher(sb);
388            String returnString = controlCharacterMatcher.replaceAll(REPLACE_MATCHED_CONTROL_CHARACTERS);
389            
390            return returnString;
391        }
392    
393        public boolean isTransactionScrubberOffsetGenerationIndicator() {
394            return transactionScrubberOffsetGenerationIndicator;
395        }
396    
397        public void setTransactionScrubberOffsetGenerationIndicator(boolean transactionScrubberOffsetGenerationIndicator) {
398            this.transactionScrubberOffsetGenerationIndicator = transactionScrubberOffsetGenerationIndicator;
399        }
400    
401        public String getAccountNumber() {
402            return accountNumber;
403        }
404    
405        public void setAccountNumber(String accountNumber) {
406            this.accountNumber = accountNumber;
407        }
408    
409        public String getFinancialBalanceTypeCode() {
410            return financialBalanceTypeCode;
411        }
412    
413        public void setFinancialBalanceTypeCode(String financialBalanceTypeCode) {
414            this.financialBalanceTypeCode = financialBalanceTypeCode;
415        }
416    
417        public String getChartOfAccountsCode() {
418            return chartOfAccountsCode;
419        }
420    
421        public void setChartOfAccountsCode(String chartOfAccountsCode) {
422            this.chartOfAccountsCode = chartOfAccountsCode;
423        }
424    
425        public String getTransactionDebitCreditCode() {
426            return transactionDebitCreditCode;
427        }
428    
429        public void setTransactionDebitCreditCode(String transactionDebitCreditCode) {
430            if (transactionDebitCreditCode != null) {
431                this.transactionDebitCreditCode = transactionDebitCreditCode.toUpperCase();
432            }
433        }
434    
435        public String getDocumentNumber() {
436            return documentNumber;
437        }
438    
439        public void setDocumentNumber(String documentNumber) {
440            this.documentNumber = documentNumber;
441        }
442    
443        public Date getFinancialDocumentReversalDate() {
444            return financialDocumentReversalDate;
445        }
446    
447        public void setFinancialDocumentReversalDate(Date financialDocumentReversalDate) {
448            this.financialDocumentReversalDate = financialDocumentReversalDate;
449        }
450    
451        public String getFinancialDocumentTypeCode() {
452            return financialDocumentTypeCode;
453        }
454    
455        public void setFinancialDocumentTypeCode(String financialDocumentTypeCode) {
456            this.financialDocumentTypeCode = financialDocumentTypeCode;
457        }
458    
459        public String getTransactionEncumbranceUpdateCode() {
460            return transactionEncumbranceUpdateCode;
461        }
462    
463        public void setTransactionEncumbranceUpdateCode(String transactionEncumbranceUpdateCode) {
464            this.transactionEncumbranceUpdateCode = transactionEncumbranceUpdateCode;
465        }
466    
467        public Integer getEntryGroupId() {
468            return entryGroupId;
469        }
470    
471        public void setEntryGroupId(Integer entryGroupId) {
472            this.entryGroupId = entryGroupId;
473        }
474    
475        public Integer getEntryId() {
476            return entryId;
477        }
478    
479        public void setEntryId(Integer entryId) {
480            this.entryId = entryId;
481        }
482    
483        public void resetEntryId() {
484            this.entryId = null;
485            this.versionNumber = null;
486        }
487    
488        public String getFinancialObjectCode() {
489            return financialObjectCode;
490        }
491    
492        public void setFinancialObjectCode(String financialObjectCode) {
493            this.financialObjectCode = financialObjectCode;
494        }
495    
496        public String getFinancialObjectTypeCode() {
497            return financialObjectTypeCode;
498        }
499    
500        public void setFinancialObjectTypeCode(String financialObjectTypeCode) {
501            this.financialObjectTypeCode = financialObjectTypeCode;
502        }
503    
504        public String getOrganizationDocumentNumber() {
505            return organizationDocumentNumber;
506        }
507    
508        public void setOrganizationDocumentNumber(String organizationDocumentNumber) {
509            this.organizationDocumentNumber = organizationDocumentNumber;
510        }
511    
512        public String getOrganizationReferenceId() {
513            return organizationReferenceId;
514        }
515    
516        public void setOrganizationReferenceId(String organizationReferenceId) {
517            this.organizationReferenceId = organizationReferenceId;
518        }
519    
520        public String getFinancialSystemOriginationCode() {
521            return financialSystemOriginationCode;
522        }
523    
524        public void setFinancialSystemOriginationCode(String financialSystemOriginationCode) {
525            this.financialSystemOriginationCode = financialSystemOriginationCode;
526        }
527    
528        public String getProjectCode() {
529            if (StringUtils.isBlank(projectCode)) {
530                projectCode = KFSConstants.getDashProjectCode();
531            }
532            return projectCode;
533        }
534    
535        public void setProjectCode(String projectCode) {
536            this.projectCode = projectCode;
537        }
538    
539        public String getReferenceFinancialDocumentNumber() {
540            return referenceFinancialDocumentNumber;
541        }
542    
543        public void setReferenceFinancialDocumentNumber(String referenceFinancialDocumentNumber) {
544            this.referenceFinancialDocumentNumber = referenceFinancialDocumentNumber;
545        }
546    
547        public String getReferenceFinancialDocumentTypeCode() {
548            return referenceFinancialDocumentTypeCode;
549        }
550    
551        public void setReferenceFinancialDocumentTypeCode(String referenceFinancialDocumentTypeCode) {
552            this.referenceFinancialDocumentTypeCode = referenceFinancialDocumentTypeCode;
553        }
554    
555        public String getReferenceFinancialSystemOriginationCode() {
556            return referenceFinancialSystemOriginationCode;
557        }
558    
559        public void setReferenceFinancialSystemOriginationCode(String referenceFinancialSystemOriginationCode) {
560            this.referenceFinancialSystemOriginationCode = referenceFinancialSystemOriginationCode;
561        }
562    
563        public String getSubAccountNumber() {
564            if (StringUtils.isBlank(subAccountNumber)) {
565                subAccountNumber = KFSConstants.getDashSubAccountNumber();
566            }
567            return subAccountNumber;
568        }
569    
570        public void setSubAccountNumber(String subAccountNumber) {
571            this.subAccountNumber = subAccountNumber;
572        }
573    
574        public String getFinancialSubObjectCode() {
575            if (StringUtils.isBlank(financialSubObjectCode)) {
576                financialSubObjectCode = KFSConstants.getDashFinancialSubObjectCode();
577            }
578            return financialSubObjectCode;
579        }
580    
581        public void setFinancialSubObjectCode(String financialSubObjectCode) {
582            this.financialSubObjectCode = financialSubObjectCode;
583        }
584    
585        public Date getTransactionDate() {
586            return transactionDate;
587        }
588    
589        public void setTransactionDate(Date transactionDate) {
590            this.transactionDate = transactionDate;
591        }
592    
593        public Integer getTransactionLedgerEntrySequenceNumber() {
594            return transactionLedgerEntrySequenceNumber;
595        }
596    
597        public void setTransactionLedgerEntrySequenceNumber(Integer transactionLedgerEntrySequenceNumber) {
598            this.transactionLedgerEntrySequenceNumber = transactionLedgerEntrySequenceNumber;
599        }
600    
601        public KualiDecimal getTransactionLedgerEntryAmount() {
602            return transactionLedgerEntryAmount;
603        }
604    
605        public void setTransactionLedgerEntryAmount(KualiDecimal transactionLedgerEntryAmount) {
606            this.transactionLedgerEntryAmount = transactionLedgerEntryAmount;
607        }
608    
609        public void setTransactionLedgerEntryAmount(String transactionLedgerEntryAmount) {
610            this.transactionLedgerEntryAmount = new KualiDecimal(transactionLedgerEntryAmount);
611        }
612    
613        public void clearTransactionLedgerEntryAmount() {
614            this.transactionLedgerEntryAmount = null;
615        }
616    
617        public String getTransactionLedgerEntryDescription() {
618            return transactionLedgerEntryDescription;
619        }
620    
621        public void setTransactionLedgerEntryDescription(String transactionLedgerEntryDescription) {
622            this.transactionLedgerEntryDescription = transactionLedgerEntryDescription;
623        }
624    
625        public String getUniversityFiscalPeriodCode() {
626            return universityFiscalPeriodCode;
627        }
628    
629        public void setUniversityFiscalPeriodCode(String universityFiscalPeriodCode) {
630            this.universityFiscalPeriodCode = universityFiscalPeriodCode;
631        }
632    
633        public Integer getUniversityFiscalYear() {
634            return universityFiscalYear;
635        }
636    
637        public void setUniversityFiscalYear(Integer universityFiscalYear) {
638            this.universityFiscalYear = universityFiscalYear;
639        }
640    
641        public boolean isDebit() {
642            return KFSConstants.GL_DEBIT_CODE.equals(this.transactionDebitCreditCode);
643        }
644    
645        public boolean isCredit() {
646            return KFSConstants.GL_CREDIT_CODE.equals(this.transactionDebitCreditCode);
647        }
648    
649        public void setFieldValue(String fieldName, String fieldValue) {
650            if ("universityFiscalYear".equals(fieldName)) {
651                if (StringUtils.isNotBlank(fieldValue)) {
652                    setUniversityFiscalYear(Integer.parseInt(fieldValue));
653                }
654                else {
655                    setUniversityFiscalYear(null);
656                }
657            }
658            else if ("chartOfAccountsCode".equals(fieldName)) {
659                setChartOfAccountsCode(fieldValue);
660            }
661            else if ("accountNumber".equals(fieldName)) {
662                setAccountNumber(fieldValue);
663            }
664            else if ("subAccountNumber".equals(fieldName)) {
665                setSubAccountNumber(fieldValue);
666            }
667            else if ("financialObjectCode".equals(fieldName)) {
668                setFinancialObjectCode(fieldValue);
669            }
670            else if ("financialSubObjectCode".equals(fieldName)) {
671                setFinancialSubObjectCode(fieldValue);
672            }
673            else if ("financialBalanceTypeCode".equals(fieldName)) {
674                setFinancialBalanceTypeCode(fieldValue);
675            }
676            else if ("financialObjectTypeCode".equals(fieldName)) {
677                setFinancialObjectTypeCode(fieldValue);
678            }
679            else if ("universityFiscalPeriodCode".equals(fieldName)) {
680                setUniversityFiscalPeriodCode(fieldValue);
681            }
682            else if ("financialDocumentTypeCode".equals(fieldName)) {
683                setFinancialDocumentTypeCode(fieldValue);
684            }
685            else if ("financialSystemOriginationCode".equals(fieldName)) {
686                setFinancialSystemOriginationCode(fieldValue);
687            }
688            else if (KFSPropertyConstants.DOCUMENT_NUMBER.equals(fieldName)) {
689                setDocumentNumber(fieldValue);
690            }
691            else if ("transactionLedgerEntrySequenceNumber".equals(fieldName)) {
692                if (StringUtils.isNotBlank(fieldValue)) {
693                    setTransactionLedgerEntrySequenceNumber(Integer.parseInt(fieldValue));
694                }
695                else {
696                    setTransactionLedgerEntrySequenceNumber(null);
697                }
698            }
699            else if ("transactionLedgerEntryDescription".equals(fieldName)) {
700                setTransactionLedgerEntryDescription(fieldValue);
701            }
702            else if ("transactionLedgerEntryAmount".equals(fieldName)) {
703                if (StringUtils.isNotBlank(fieldValue)) {
704                    setTransactionLedgerEntryAmount(new KualiDecimal(fieldValue));
705                }
706                else {
707                    clearTransactionLedgerEntryAmount();
708                }
709            }
710            else if ("transactionDebitCreditCode".equals(fieldName)) {
711                setTransactionDebitCreditCode(fieldValue);
712            }
713            else if ("transactionDate".equals(fieldName)) {
714                if (StringUtils.isNotBlank(fieldValue)) {
715                    try {
716                        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
717                        setTransactionDate(new java.sql.Date((df.parse(fieldValue)).getTime()));
718                    }
719                    catch (ParseException e) {
720                        setTransactionDate(null);
721                    }
722                }
723                else {
724                    setTransactionDate(null);
725                }
726            }
727            else if ("organizationDocumentNumber".equals(fieldName)) {
728                setOrganizationDocumentNumber(fieldValue);
729            }
730            else if ("projectCode".equals(fieldName)) {
731                setProjectCode(fieldValue);
732            }
733            else if ("organizationReferenceId".equals(fieldName)) {
734                setOrganizationReferenceId(fieldValue);
735            }
736            else if ("referenceFinancialDocumentTypeCode".equals(fieldName)) {
737                setReferenceFinancialDocumentTypeCode(fieldValue);
738            }
739            else if ("referenceFinancialSystemOriginationCode".equals(fieldName)) {
740                setReferenceFinancialSystemOriginationCode(fieldValue);
741            }
742            else if ("referenceFinancialDocumentNumber".equals(fieldName)) {
743                setReferenceFinancialDocumentNumber(fieldValue);
744            }
745            else if ("financialDocumentReversalDate".equals(fieldName)) {
746                if (StringUtils.isNotBlank(fieldValue)) {
747                    try {
748                        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
749                        setFinancialDocumentReversalDate(new java.sql.Date((df.parse(fieldValue)).getTime()));
750                    }
751                    catch (ParseException e) {
752                        setFinancialDocumentReversalDate(null);
753                    }
754                }
755                else {
756                    setFinancialDocumentReversalDate(null);
757                }
758            }
759            else if ("transactionEncumbranceUpdateCode".equals(fieldName)) {
760                setTransactionEncumbranceUpdateCode(fieldValue);
761            }
762            else {
763                throw new IllegalArgumentException("Invalid Field Name " + fieldName);
764            }
765        }
766    
767        public Object getFieldValue(String fieldName) {
768            if ("universityFiscalYear".equals(fieldName)) {
769                return getUniversityFiscalYear();
770            }
771            else if ("chartOfAccountsCode".equals(fieldName)) {
772                return getChartOfAccountsCode();
773            }
774            else if ("accountNumber".equals(fieldName)) {
775                return getAccountNumber();
776            }
777            else if ("subAccountNumber".equals(fieldName)) {
778                return getSubAccountNumber();
779            }
780            else if ("financialObjectCode".equals(fieldName)) {
781                return getFinancialObjectCode();
782            }
783            else if ("financialSubObjectCode".equals(fieldName)) {
784                return getFinancialSubObjectCode();
785            }
786            else if ("financialBalanceTypeCode".equals(fieldName)) {
787                return getFinancialBalanceTypeCode();
788            }
789            else if ("financialObjectTypeCode".equals(fieldName)) {
790                return getFinancialObjectTypeCode();
791            }
792            else if ("universityFiscalPeriodCode".equals(fieldName)) {
793                return getUniversityFiscalPeriodCode();
794            }
795            else if ("financialDocumentTypeCode".equals(fieldName)) {
796                return getFinancialDocumentTypeCode();
797            }
798            else if ("financialSystemOriginationCode".equals(fieldName)) {
799                return getFinancialSystemOriginationCode();
800            }
801            else if (KFSPropertyConstants.DOCUMENT_NUMBER.equals(fieldName)) {
802                return getDocumentNumber();
803            }
804            else if ("transactionLedgerEntrySequenceNumber".equals(fieldName)) {
805                return getTransactionLedgerEntrySequenceNumber();
806            }
807            else if ("transactionLedgerEntryDescription".equals(fieldName)) {
808                return getTransactionLedgerEntryDescription();
809            }
810            else if ("transactionLedgerEntryAmount".equals(fieldName)) {
811                return getTransactionLedgerEntryAmount();
812            }
813            else if ("transactionDebitCreditCode".equals(fieldName)) {
814                return getTransactionDebitCreditCode();
815            }
816            else if ("transactionDate".equals(fieldName)) {
817                return getTransactionDate();
818            }
819            else if ("organizationDocumentNumber".equals(fieldName)) {
820                return getOrganizationDocumentNumber();
821            }
822            else if ("projectCode".equals(fieldName)) {
823                return getProjectCode();
824            }
825            else if ("organizationReferenceId".equals(fieldName)) {
826                return getOrganizationReferenceId();
827            }
828            else if ("referenceFinancialDocumentTypeCode".equals(fieldName)) {
829                return getReferenceFinancialDocumentTypeCode();
830            }
831            else if ("referenceFinancialSystemOriginationCode".equals(fieldName)) {
832                return getReferenceFinancialSystemOriginationCode();
833            }
834            else if ("referenceFinancialDocumentNumber".equals(fieldName)) {
835                return getReferenceFinancialDocumentNumber();
836            }
837            else if ("financialDocumentReversalDate".equals(fieldName)) {
838                return getFinancialDocumentReversalDate();
839            }
840            else if ("transactionEncumbranceUpdateCode".equals(fieldName)) {
841                return getTransactionEncumbranceUpdateCode();
842            }
843            else {
844                throw new IllegalArgumentException("Invalid Field Name " + fieldName);
845            }
846        }
847    
848        public OriginEntryFull(GeneralLedgerPendingEntry glpe) {
849            accountNumber = glpe.getAccountNumber();
850            documentNumber = glpe.getDocumentNumber();
851            referenceFinancialDocumentNumber = glpe.getReferenceFinancialDocumentNumber();
852            referenceFinancialDocumentTypeCode = glpe.getReferenceFinancialDocumentTypeCode();
853            financialDocumentReversalDate = glpe.getFinancialDocumentReversalDate();
854            financialDocumentTypeCode = glpe.getFinancialDocumentTypeCode();
855            financialBalanceTypeCode = glpe.getFinancialBalanceTypeCode();
856            chartOfAccountsCode = glpe.getChartOfAccountsCode();
857            financialObjectTypeCode = glpe.getFinancialObjectTypeCode();
858            financialObjectCode = glpe.getFinancialObjectCode();
859            financialSubObjectCode = glpe.getFinancialSubObjectCode();
860            financialSystemOriginationCode = glpe.getFinancialSystemOriginationCode();
861            referenceFinancialSystemOriginationCode = glpe.getReferenceFinancialSystemOriginationCode();
862            organizationDocumentNumber = glpe.getOrganizationDocumentNumber();
863            organizationReferenceId = glpe.getOrganizationReferenceId();
864            projectCode = glpe.getProjectCode();
865            subAccountNumber = glpe.getSubAccountNumber();
866            transactionDate = glpe.getTransactionDate();
867            transactionDebitCreditCode = glpe.getTransactionDebitCreditCode();
868            transactionEncumbranceUpdateCode = glpe.getTransactionEncumbranceUpdateCode();
869            transactionLedgerEntrySequenceNumber = glpe.getTransactionLedgerEntrySequenceNumber();
870            transactionLedgerEntryAmount = glpe.getTransactionLedgerEntryAmount();
871            transactionLedgerEntryDescription = glpe.getTransactionLedgerEntryDescription();
872            universityFiscalPeriodCode = glpe.getUniversityFiscalPeriodCode();
873            universityFiscalYear = glpe.getUniversityFiscalYear();
874        }
875    
876        /**
877         * 
878         */
879        public OriginEntryFull(String financialDocumentTypeCode, String financialSystemOriginationCode) {
880            super();
881    
882            setChartOfAccountsCode(KFSConstants.EMPTY_STRING);
883            setAccountNumber(KFSConstants.EMPTY_STRING);
884    
885            setFinancialDocumentTypeCode(financialDocumentTypeCode);
886            setFinancialSystemOriginationCode(financialSystemOriginationCode);
887    
888            setFinancialObjectCode(KFSConstants.EMPTY_STRING);
889            setFinancialBalanceTypeCode(KFSConstants.EMPTY_STRING);
890            setFinancialObjectTypeCode(KFSConstants.EMPTY_STRING);
891            setDocumentNumber(KFSConstants.EMPTY_STRING);
892            setFinancialDocumentReversalDate(null);
893    
894            setUniversityFiscalYear(new Integer(0));
895            setUniversityFiscalPeriodCode(KFSConstants.EMPTY_STRING);
896    
897            setTransactionLedgerEntrySequenceNumber(new Integer(1));
898            setTransactionLedgerEntryAmount(KualiDecimal.ZERO);
899            setTransactionLedgerEntryDescription(KFSConstants.EMPTY_STRING);
900            setTransactionDate(null);
901            setTransactionDebitCreditCode(KFSConstants.EMPTY_STRING);
902            setTransactionEncumbranceUpdateCode(null);
903    
904            setOrganizationDocumentNumber(KFSConstants.EMPTY_STRING);
905            setOrganizationReferenceId(KFSConstants.EMPTY_STRING);
906    
907            setReferenceFinancialDocumentTypeCode(KFSConstants.EMPTY_STRING);
908            setReferenceFinancialSystemOriginationCode(KFSConstants.EMPTY_STRING);
909            setReferenceFinancialDocumentNumber(KFSConstants.EMPTY_STRING);
910        }
911    
912        /**
913         * 
914         */
915        public OriginEntryFull() {
916            this(null, null);
917        }
918    
919        public OriginEntryFull(Transaction t) {
920            this();
921            copyFieldsFromTransaction(t);
922        }
923    
924        public OriginEntryFull(String line) {
925            try {
926                setFromTextFileForBatch(line, 0);
927            }
928            catch (LoadException e) {
929                LOG.error("OriginEntryFull() Error loading line", e);
930            }
931        }
932    
933        protected LinkedHashMap toStringMapper() {
934            LinkedHashMap map = new LinkedHashMap();
935            map.put("entryId", getEntryId());
936            map.put("entryGroupId", getEntryGroupId());
937            map.put("universityFiscalYear", getUniversityFiscalYear());
938            map.put("universityFiscalPeriodCode", getUniversityFiscalPeriodCode());
939            map.put("chartOfAccountsCode", getChartOfAccountsCode());
940            map.put("accountNumber", getAccountNumber());
941            map.put("subAccountNumber", getSubAccountNumber());
942            map.put("financialObjectCode", getFinancialObjectCode());
943            map.put("financialObjectTypeCode", getFinancialObjectTypeCode());
944            map.put("financialSubObjectCode", getFinancialSubObjectCode());
945            map.put("financialBalanceTypeCode", getFinancialBalanceTypeCode());
946            map.put(KFSPropertyConstants.DOCUMENT_NUMBER, getDocumentNumber());
947            map.put("financialDocumentTypeCode", getFinancialDocumentTypeCode());
948            map.put("financialSystemOriginationCode", getFinancialSystemOriginationCode());
949            map.put("transactionLedgerEntrySequenceNumber", getTransactionLedgerEntrySequenceNumber());
950            map.put("transactionLedgerEntryDescription", getTransactionLedgerEntryDescription());
951            return map;
952        }
953    
954        public OriginEntryGroup getGroup() {
955            return group;
956        }
957    
958        public void setGroup(OriginEntryGroup oeg) {
959            if (oeg != null) {
960                setEntryGroupId(oeg.getId());
961                group = oeg;
962            }
963            else {
964                setEntryGroupId(null);
965                group = null;
966            }
967        }
968    
969        public A21SubAccount getA21SubAccount() {
970            return a21SubAccount;
971        }
972    
973        public void setA21SubAccount(A21SubAccount subAccount) {
974            a21SubAccount = subAccount;
975        }
976    
977        public Account getAccount() {
978            return account;
979        }
980    
981        public void setAccount(Account account) {
982            this.account = account;
983        }
984    
985        public BalanceType getBalanceType() {
986            return balanceType;
987        }
988    
989        public void setBalanceType(BalanceType balanceType) {
990            this.balanceType = balanceType;
991        }
992    
993        public Chart getChart() {
994            return chart;
995        }
996    
997        public void setChart(Chart chart) {
998            this.chart = chart;
999        }
1000    
1001        public DocumentTypeEBO getFinancialSystemDocumentTypeCode() {
1002            return financialSystemDocumentTypeCode = SpringContext.getBean(KEWModuleService.class).retrieveExternalizableBusinessObjectIfNecessary(this, financialSystemDocumentTypeCode, "financialSystemDocumentTypeCode");
1003        }
1004    
1005        public ObjectCode getFinancialObject() {
1006            return financialObject;
1007        }
1008    
1009        public void setFinancialObject(ObjectCode financialObject) {
1010            this.financialObject = financialObject;
1011        }
1012    
1013        public SubObjectCode getFinancialSubObject() {
1014            return financialSubObject;
1015        }
1016    
1017        public void setFinancialSubObject(SubObjectCode financialSubObject) {
1018            this.financialSubObject = financialSubObject;
1019        }
1020    
1021        public ObjectType getObjectType() {
1022            return objectType;
1023        }
1024    
1025        public void setObjectType(ObjectType objectType) {
1026            this.objectType = objectType;
1027        }
1028    
1029        public SystemOptions getOption() {
1030            return option;
1031        }
1032    
1033        public void setOption(SystemOptions option) {
1034            this.option = option;
1035        }
1036    
1037        public ProjectCode getProject() {
1038            return project;
1039        }
1040    
1041        public void setProject(ProjectCode project) {
1042            this.project = project;
1043        }
1044    
1045        public SubAccount getSubAccount() {
1046            return subAccount;
1047        }
1048    
1049        public void setSubAccount(SubAccount subAccount) {
1050            this.subAccount = subAccount;
1051        }
1052    
1053        public UniversityDate getUniversityDate() {
1054            return universityDate;
1055        }
1056    
1057        public void setUniversityDate(UniversityDate universityDate) {
1058            this.universityDate = universityDate;
1059        }
1060    
1061        public AccountingPeriod getAccountingPeriod() {
1062            return accountingPeriod;
1063        }
1064    
1065        public void setAccountingPeriod(AccountingPeriod accountingPeriod) {
1066            this.accountingPeriod = accountingPeriod;
1067        }
1068    
1069        public UniversityDate getReversalDate() {
1070            return reversalDate;
1071        }
1072    
1073        public void setReversalDate(UniversityDate reversalDate) {
1074            this.reversalDate = reversalDate;
1075        }
1076    
1077        public OriginationCode getOrigination() {
1078            return origination;
1079        }
1080    
1081        public void setOrigination(OriginationCode origination) {
1082            this.origination = origination;
1083        }
1084    
1085        public DocumentTypeEBO getReferenceFinancialSystemDocumentTypeCode() {
1086            return referenceFinancialSystemDocumentTypeCode = SpringContext.getBean(KEWModuleService.class).retrieveExternalizableBusinessObjectIfNecessary(this, referenceFinancialSystemDocumentTypeCode, "referenceFinancialSystemDocumentTypeCode");
1087        }
1088    
1089        public static OriginEntryFull copyFromOriginEntryable(OriginEntryInformation oe) {
1090            OriginEntryFull newOriginEntry = new OriginEntryFull();
1091            newOriginEntry.setAccountNumber(oe.getAccountNumber());
1092            newOriginEntry.setDocumentNumber(oe.getDocumentNumber());
1093            newOriginEntry.setReferenceFinancialDocumentNumber(oe.getReferenceFinancialDocumentNumber());
1094            newOriginEntry.setReferenceFinancialDocumentTypeCode(oe.getReferenceFinancialDocumentTypeCode());
1095            newOriginEntry.setFinancialDocumentReversalDate(oe.getFinancialDocumentReversalDate());
1096            newOriginEntry.setFinancialDocumentTypeCode(oe.getFinancialDocumentTypeCode());
1097            newOriginEntry.setFinancialBalanceTypeCode(oe.getFinancialBalanceTypeCode());
1098            newOriginEntry.setChartOfAccountsCode(oe.getChartOfAccountsCode());
1099            newOriginEntry.setFinancialObjectTypeCode(oe.getFinancialObjectTypeCode());
1100            newOriginEntry.setFinancialObjectCode(oe.getFinancialObjectCode());
1101            newOriginEntry.setFinancialSubObjectCode(oe.getFinancialSubObjectCode());
1102            newOriginEntry.setFinancialSystemOriginationCode(oe.getFinancialSystemOriginationCode());
1103            newOriginEntry.setReferenceFinancialSystemOriginationCode(oe.getReferenceFinancialSystemOriginationCode());
1104            newOriginEntry.setOrganizationDocumentNumber(oe.getOrganizationDocumentNumber());
1105            newOriginEntry.setOrganizationReferenceId(oe.getOrganizationReferenceId());
1106            newOriginEntry.setProjectCode(oe.getProjectCode());
1107            newOriginEntry.setSubAccountNumber(oe.getSubAccountNumber());
1108            newOriginEntry.setTransactionDate(oe.getTransactionDate());
1109            newOriginEntry.setTransactionDebitCreditCode(oe.getTransactionDebitCreditCode());
1110            newOriginEntry.setTransactionEncumbranceUpdateCode(oe.getTransactionEncumbranceUpdateCode());
1111            newOriginEntry.setTransactionLedgerEntrySequenceNumber(oe.getTransactionLedgerEntrySequenceNumber());
1112            newOriginEntry.setTransactionLedgerEntryAmount(oe.getTransactionLedgerEntryAmount());
1113            newOriginEntry.setTransactionLedgerEntryDescription(oe.getTransactionLedgerEntryDescription());
1114            newOriginEntry.setUniversityFiscalPeriodCode(oe.getUniversityFiscalPeriodCode());
1115            newOriginEntry.setUniversityFiscalYear(oe.getUniversityFiscalYear());
1116            return newOriginEntry;
1117        }
1118        
1119        /**
1120         * @return the static instance of the OriginEntryFieldUtil
1121         */
1122        protected static OriginEntryFieldUtil getOriginEntryFieldUtil() {
1123            if (originEntryFieldUtil == null) {
1124                originEntryFieldUtil = new OriginEntryFieldUtil();
1125            }
1126            return originEntryFieldUtil;
1127        }
1128    }