001    /*
002     * Copyright 2011 The Kuali Foundation.
003     * 
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     * http://www.opensource.org/licenses/ecl2.php
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.kfs.module.ld.businessobject.options;
017    
018    import java.math.BigDecimal;
019    import java.text.ParseException;
020    import java.text.SimpleDateFormat;
021    import java.util.ArrayList;
022    import java.util.Date;
023    import java.util.Iterator;
024    import java.util.List;
025    
026    import org.apache.commons.lang.StringUtils;
027    import org.kuali.kfs.module.ld.LaborPropertyConstants;
028    import org.kuali.kfs.sys.KFSPropertyConstants;
029    import org.kuali.rice.core.util.KeyLabelPair;
030    import org.kuali.rice.kns.lookup.keyvalues.KeyValuesBase;
031    import org.kuali.rice.kns.util.KualiDecimal;
032    
033    /**
034     * Field Finder for Labor Origin Entry.
035     */
036    public class LaborOriginEntryFieldFinder extends KeyValuesBase {
037    
038        /**
039         * @see org.kuali.rice.kns.lookup.keyvalues.KeyValuesFinder#getKeyValues()
040         */
041        public List getKeyValues() {
042            List activeLabels = new ArrayList();
043            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, "Fiscal Year"));
044            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, "Chart Code"));
045            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.ACCOUNT_NUMBER, "Account Number"));
046            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, "Sub-Account Number"));
047            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, "Object Code"));
048            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE, "Sub-Object Code"));
049            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE, "Balance Type"));
050            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE, "Object Type"));
051            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.UNIVERSITY_FISCAL_PERIOD_CODE, "Fiscal Period"));
052            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.FINANCIAL_DOCUMENT_TYPE_CODE, "Document Type"));
053            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.FINANCIAL_SYSTEM_ORIGINATION_CODE, "Origin code"));
054            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.DOCUMENT_NUMBER, "Document Number"));
055            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.TRANSACTION_ENTRY_SEQUENCE_NUMBER, "Sequence Number"));
056            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.POSITION_NUMBER, "Position Number"));
057            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.PROJECT_CODE, "Project Code"));
058            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_DESC, "Description"));
059            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT, "Amount"));
060            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.TRANSACTION_DEBIT_CREDIT_CODE, "Debit Credit Indicator"));
061            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.TRANSACTION_DATE, "Transaction Date"));
062            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.ORGANIZATION_DOCUMENT_NUMBER, "Org Doc Number"));
063            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.ORGANIZATION_REFERENCE_ID, "Org Ref ID"));
064            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.REFERENCE_FIN_DOCUMENT_TYPE_CODE, "Ref Doc Type"));
065            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.FIN_SYSTEM_REF_ORIGINATION_CODE, "Ref Origin code"));
066            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.FINANCIAL_DOCUMENT_REFERENCE_NBR, "Ref Doc Number"));
067            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.FINANCIAL_DOCUMENT_REVERSAL_DATE, "Reversal Date"));
068            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.TRANSACTION_ENCUMBRANCE_UPDT_CD, "Enc Update Code"));
069            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.TRANSACTION_POSTING_DATE, "Transaction Posting Date"));
070            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.PAY_PERIOD_END_DATE, "Pay Period End Date"));
071            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.TRANSACTION_TOTAL_HOURS, "Trn Total Hours"));
072            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.PAYROLL_END_DATE_FISCAL_YEAR, "Payroll EndDate Fiscal Year"));
073            activeLabels.add(new KeyLabelPair(LaborPropertyConstants.PAYROLL_END_DATE_FISCAL_PERIOD_CODE, "Payroll EndDate Fiscal Period Code"));
074            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.EMPLID, "Empl Id"));
075            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.EMPLOYEE_RECORD, "Empl Record"));
076            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.EARN_CODE, "Earn Code"));
077            activeLabels.add(new KeyLabelPair(KFSPropertyConstants.PAY_GROUP, "Pay Group"));
078            activeLabels.add(new KeyLabelPair(LaborPropertyConstants.SALARY_ADMINISTRATION_PLAN, "Salary Admin Plan"));
079            activeLabels.add(new KeyLabelPair(LaborPropertyConstants.GRADE, "Grade"));
080            activeLabels.add(new KeyLabelPair(LaborPropertyConstants.RUN_IDENTIFIER, "Run Id"));
081            activeLabels.add(new KeyLabelPair(LaborPropertyConstants.LABORLEDGER_ORIGINAL_CHART_OF_ACCOUNTS_CODE, "Original Chart Code"));
082            activeLabels.add(new KeyLabelPair(LaborPropertyConstants.LABORLEDGER_ORIGINAL_ACCOUNT_NUMBER, "Original Account Number"));
083            activeLabels.add(new KeyLabelPair(LaborPropertyConstants.LABORLEDGER_ORIGINAL_SUB_ACCOUNT_NUMBER, "Original Sub-Account Numbere"));
084            activeLabels.add(new KeyLabelPair(LaborPropertyConstants.LABORLEDGER_ORIGINAL_FINANCIAL_OBJECT_CODE, "Original Object Code"));
085            activeLabels.add(new KeyLabelPair(LaborPropertyConstants.LABORLEDGER_ORIGINAL_FINANCIAL_SUB_OBJECT_CODE, "Original Sub-Object Code"));
086            activeLabels.add(new KeyLabelPair(LaborPropertyConstants.HRMS_COMPANY, "Company"));
087            activeLabels.add(new KeyLabelPair(LaborPropertyConstants.SET_ID, "SetId"));
088    
089            return activeLabels;
090        }
091    
092        /**
093         * Get field display name.
094         * 
095         * @param fieldName
096         * @return Returns the label
097         */
098        public String getFieldDisplayName(String fieldName) {
099            for (Iterator iter = getKeyValues().iterator(); iter.hasNext();) {
100                KeyLabelPair klp = (KeyLabelPair) iter.next();
101                if (klp.getKey().equals(fieldName)) {
102                    return klp.getLabel();
103                }
104            }
105    
106            return "Error";
107        }
108    
109        /**
110         * Get field name
111         * 
112         * @param fieldDisplayName
113         * @return Returns the key
114         */
115        public String getFieldName(String fieldDisplayName) {
116            for (Iterator iter = getKeyValues().iterator(); iter.hasNext();) {
117                KeyLabelPair klp = (KeyLabelPair) iter.next();
118                if (klp.getLabel().equals(fieldDisplayName)) {
119                    return (String) klp.getKey();
120                }
121            }
122    
123            return "Error";
124        }
125    
126        /**
127         * Check each field for valid value.
128         * 
129         * @param fieldName
130         * @param value
131         * @return Returns a boolean
132         */
133        public boolean isValidValue(String fieldName, String value) {
134            if (StringUtils.isBlank(fieldName)) {
135                return false;
136            }
137            String fieldType = getFieldType(fieldName);
138            int fieldLength = getFieldLength(fieldName);
139    
140            if (allowNull(fieldName) && (value == null || value.length() == 0)) {
141                return true;
142            }
143            if (!allowNull(fieldName) && (value == null || value.length() == 0)) {
144                return false;
145            }
146            if (value.length() > fieldLength) {
147                return false;
148            }
149            if ("BigDecimal".equals(fieldType)) {
150                try {
151                    BigDecimal d = new BigDecimal(value);
152                    return true;
153                }
154                catch (NumberFormatException nfe) {
155                    return false;
156                }
157            } 
158            if ("KualiDecimal".equals(fieldType)) {
159                try {
160                    KualiDecimal d = new KualiDecimal(value);
161                    return true;
162                }
163                catch (NumberFormatException nfe) {
164                    return false;
165                }
166            }
167            else if ("Integer".equals(fieldType)) {
168                try {
169                    Integer d = new Integer(value);
170                    return true;
171                }
172                catch (NumberFormatException nfe) {
173                    return false;
174                }
175            }
176            else if ("Date".equals(fieldType)) {
177                SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
178                try {
179                    Date d = df.parse(value);
180                    return true;
181                }
182                catch (ParseException e) {
183                    return false;
184                }
185            }
186    
187            return true;
188        }
189    
190        /**
191         * Get field type.
192         * 
193         * @param fieldName
194         * @return Returns the fieldType
195         */
196        public String getFieldType(String fieldName) {
197            if (fieldName.equals("universityFiscalYear")) {
198                return "Integer";
199            }
200            if (fieldName.equals("transactionLedgerEntrySequenceNumber")) {
201                return "Integer";
202            }
203            if (fieldName.equals("transactionLedgerEntryAmount")) {
204                return "KualiDecimal";
205            }
206            if (fieldName.equals("transactionDate")) {
207                return "Date";
208            }
209            if (fieldName.equals("financialDocumentReversalDate")) {
210                return "Date";
211            }
212            if (fieldName.equals("transactionPostingDate")) {
213                return "Date";
214            }
215            if (fieldName.equals("payPeriodEndDate")) {
216                return "Date";
217            }
218            if (fieldName.equals("transactionTotalHours")) {
219                return "BigDecimal";
220            }
221            if (fieldName.equals("payrollEndDateFiscalYear")) {
222                return "Integer";
223            }
224            if (fieldName.equals("transactionEntryProcessedTimestamp")) {
225                return "Date";
226            }
227            if (fieldName.equals("employeeRecord")) {
228                return "Integer";
229            }
230            if (fieldName.equals("transactionDateTimeStamp")) {
231                return "Date";
232            }
233            return "String";
234        }
235    
236        /**
237         * Check if field allows null value
238         * 
239         * @param fieldName
240         * @return Returns a boolean
241         */
242        public boolean allowNull(String fieldName) {
243            if (fieldName.equals("transactionLedgerEntryAmount")) {
244                return false;
245            }
246            return true;
247        }
248    
249        /**
250         * Get length of field from fieldName
251         * 
252         * @param fieldName
253         * @return Returns an int
254         */
255        public int getFieldLength(String fieldName) {
256            if (fieldName.equals("universityFiscalYear")) {
257                return 4;
258            }
259            else if (fieldName.equals("transactionLedgerEntrySequenceNumber")) {
260                return 5;
261            }
262            else if (fieldName.equals("transactionLedgerEntryAmount")) {
263                return 20;
264            }
265            else if (fieldName.equals("transactionDate")) {
266                return 10;
267            }
268            else if (fieldName.equals("financialDocumentReversalDate")) {
269                return 10;
270            }
271            else if (fieldName.equals("chartOfAccountsCode")) {
272                return 2;
273            }
274            else if (fieldName.equals("accountNumber")) {
275                return 7;
276            }
277            else if (fieldName.equals("subAccountNumber")) {
278                return 5;
279            }
280            else if (fieldName.equals("financialObjectCode")) {
281                return 4;
282            }
283            else if (fieldName.equals("financialSubObjectCode")) {
284                return 3;
285            }
286            else if (fieldName.equals("financialBalanceTypeCode")) {
287                return 2;
288            }
289            else if (fieldName.equals("financialObjectTypeCode")) {
290                return 2;
291            }
292            else if (fieldName.equals("universityFiscalPeriodCode")) {
293                return 2;
294            }
295            else if (fieldName.equals("financialDocumentTypeCode")) {
296                return 4;
297            }
298            else if (fieldName.equals("financialSystemOriginationCode")) {
299                return 2;
300            }
301            else if (fieldName.equals(KFSPropertyConstants.DOCUMENT_NUMBER)) {
302                return 14;
303            }
304            else if (fieldName.equals("transactionLedgerEntryDescription")) {
305                return 40;
306            }
307            else if (fieldName.equals("transactionDebitCreditCode")) {
308                return 1;
309            }
310            else if (fieldName.equals("organizationDocumentNumber")) {
311                return 10;
312            }
313            else if (fieldName.equals("projectCode")) {
314                return 10;
315            }
316            else if (fieldName.equals("organizationReferenceId")) {
317                return 8;
318            }
319            else if (fieldName.equals("referenceFinancialDocumentTypeCode")) {
320                return 4;
321            }
322            else if (fieldName.equals("referenceFinancialSystemOriginationCode")) {
323                return 2;
324            }
325            else if (fieldName.equals("referenceFinancialDocumentNumber")) {
326                return 14;
327            }
328            else if (fieldName.equals("transactionEncumbranceUpdateCode")) {
329                return 1;
330            }
331            else if (fieldName.equals("positionNumber")) {
332                return 8;
333            }
334            else if (fieldName.equals("transactionPostingDate")) {
335                return 10;
336            }
337            else if (fieldName.equals("payPeriodEndDate")) {
338                return 10;
339            }
340            else if (fieldName.equals("transactionTotalHours")) {
341                return 22;
342            }
343            else if (fieldName.equals("payrollEndDateFiscalYear")) {
344                return 4;
345            }
346            else if (fieldName.equals("payrollEndDateFiscalPeriodCode")) {
347                return 2;
348            }
349            else if (fieldName.equals("emplid")) {
350                return 11;
351            }
352            else if (fieldName.equals("employeeRecord")) {
353                return 3;
354            }
355            else if (fieldName.equals("earnCode")) {
356                return 3;
357            }
358            else if (fieldName.equals("payGroup")) {
359                return 3;
360            }
361            else if (fieldName.equals("salaryAdministrationPlan")) {
362                return 4;
363            }
364            else if (fieldName.equals("grade")) {
365                return 3;
366            }
367            else if (fieldName.equals("runIdentifier")) {
368                return 10;
369            }
370            else if (fieldName.equals("laborLedgerOriginalChartOfAccountsCode")) {
371                return 2;
372            }
373            else if (fieldName.equals("laborLedgerOriginalAccountNumber")) {
374                return 7;
375            }
376            else if (fieldName.equals("laborLedgerOriginalSubAccountNumber")) {
377                return 5;
378            }
379            else if (fieldName.equals("laborLedgerOriginalFinancialObjectCode")) {
380                return 4;
381            }
382            else if (fieldName.equals("laborLedgerOriginalFinancialSubObjectCode")) {
383                return 3;
384            }
385            else if (fieldName.equals("hrmsCompany")) {
386                return 3;
387            }
388            else if (fieldName.equals("setid")) {
389                return 5;
390            }
391    
392            return 0;
393        }
394    }