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