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.fp.document;
017    
018    import java.util.ArrayList;
019    import java.util.Arrays;
020    import java.util.List;
021    
022    import org.apache.commons.beanutils.PropertyUtils;
023    import org.kuali.kfs.sys.KFSKeyConstants;
024    import org.kuali.kfs.sys.KFSPropertyConstants;
025    import org.kuali.kfs.sys.ParameterKeyConstants;
026    import org.kuali.kfs.sys.context.SpringContext;
027    import org.kuali.rice.kim.util.KimConstants;
028    import org.kuali.rice.kns.service.ParameterService;
029    
030    /**
031     * Holds constants for disbursement voucher and payee documents.
032     */
033    // TODO: after DisbursementVoucherDocumentRule is remove, it is good to change this interface into a class
034    public interface DisbursementVoucherConstants extends ParameterKeyConstants {
035    
036        // Text limits
037        public static final int MAX_NOTE_LINE_SIZE = 90;
038        
039        // payment methods
040        public static String PAYMENT_METHOD_CHECK = "P";
041        public static String PAYMENT_METHOD_WIRE = "W";
042        public static String PAYMENT_METHOD_DRAFT = "F";
043    
044        // payee types
045        public static final String DV_PAYEE_TYPE_EMPLOYEE = "E";
046        public static final String DV_PAYEE_TYPE_VENDOR = "V";
047        public static final String DV_PAYEE_TYPE_SUBJECT_PAYMENT_VENDOR = "VSP";
048        public static final String DV_PAYEE_TYPE_REVOLVING_FUND_VENDOR = "VRF";
049        
050        public static final List<String> VENDOR_PAYEE_TYPE_CODES = Arrays.asList(DV_PAYEE_TYPE_VENDOR, DV_PAYEE_TYPE_SUBJECT_PAYMENT_VENDOR, DV_PAYEE_TYPE_REVOLVING_FUND_VENDOR);
051    
052        // document location
053        public static final String NO_DOCUMENTATION_LOCATION = "N";
054    
055        public static final String TAX_CONTROL_CODE_ALLOWS_EMPLOYEES = "A";
056        public static final String TAX_CONTROL_CODE_BEGIN_WITHHOLDING = "B";
057        public static final String TAX_CONTROL_CODE_HOLD_PAYMENT = "H";
058    
059        public static class DocumentStatusCodes {
060            public static final String APPROVED = "A";
061            public static final String EXTRACTED = "E";
062        }
063    
064        public static class PaymentReasonCodes {
065            public static final String ROYALTIES = "R";
066            public static final String RENTAL_PAYMENT = "T";
067            public static final String TRAVEL_HONORARIUM = "X";
068        }
069    
070        public static class DvPdpExtractGroup {
071            public static final String DV_PDP_ORG_CODE = "PRE_DISBURSEMENT_EXTRACT_ORGANIZATION";
072            public static final String DV_PDP_SBUNT_CODE = "PRE_DISBURSEMENT_EXTRACT_SUB_UNIT";
073        }
074        
075        public static class TabKey {
076            public static final String NON_EMPLOYEE_TRAVEL_EXPENSE = "NonEmployeeTravelExpense";
077            public static final String PRE_PAID_TRAVEL_EXPENSES = "PrePaidTravelExpenses";
078        }
079        
080        public enum TabByReasonCode{
081            NON_EMPLOYEE_TRAVEL_TAB(NONEMPLOYEE_TRAVEL_PAY_REASONS_PARM_NM, TabKey.NON_EMPLOYEE_TRAVEL_EXPENSE, KFSPropertyConstants.DV_NON_EMPLOYEE_TRAVEL, 
082                    KFSPropertyConstants.DISB_VCHR_NON_EMP_TRAVELER_NAME,KFSKeyConstants.WARNING_DV_NON_EMPLOYEE_TRAVEL_TAB),
083            PREPAID_TRAVEL_TAB(PREPAID_TRAVEL_PAYMENT_REASONS_PARM_NM, TabKey.PRE_PAID_TRAVEL_EXPENSES, KFSPropertyConstants.DV_PRE_CONFERENCE_DETAIL, 
084                    KFSPropertyConstants.DV_CONFERENCE_DESTINATION_NAME,KFSKeyConstants.WARNING_DV_PREPAID_TRAVEL_TAB);
085            
086            public String paymentReasonParameterName;
087            public String tabKey;
088            public String propertyName;
089            public String reprentingFieldName;
090            public String messageKey;
091    
092            private TabByReasonCode(String paymentReasonParameterName, String tabKey, String propertyName, String reprentingFieldName, String messageKey) {
093                this.paymentReasonParameterName = paymentReasonParameterName;
094                this.tabKey = tabKey;
095                this.propertyName = propertyName;
096                this.reprentingFieldName = reprentingFieldName;
097                this.messageKey = messageKey;
098            }
099            
100            private static ParameterService parameterService;
101            private static ParameterService getParameterService() {
102                if (parameterService == null) {
103                    parameterService = SpringContext.getBean(ParameterService.class);
104                }
105                return parameterService;
106            }
107            
108            public static TabByReasonCode getTabByReasonCode(String paymentReasonCode) {
109                for(TabByReasonCode tab : TabByReasonCode.values()) {
110                    if(getParameterService().getParameterEvaluator(DisbursementVoucherDocument.class, tab.paymentReasonParameterName, paymentReasonCode).evaluationSucceeds()){
111                        return tab;
112                    }
113                }            
114                return null;
115            }
116            
117            public static List<String> getAllTabKeys() {
118                List<String> tabKeys = new ArrayList<String>();
119                for(TabByReasonCode tab : TabByReasonCode.values()) {
120                    tabKeys.add(tab.tabKey);
121                }
122                return tabKeys;
123            } 
124            
125            public static List<String> getAllDocumentPropertyKeys(){
126                List<String> documentPropertyKeys = new ArrayList<String>();
127                
128                for(TabByReasonCode tab : TabByReasonCode.values()) {
129                    String propertyKey = tab.getDocumentPropertyKey();
130                    documentPropertyKeys.add(propertyKey);
131                }
132                
133                return documentPropertyKeys;
134            }
135            
136            public String getDocumentPropertyKey() {
137                return KFSPropertyConstants.DOCUMENT + PropertyUtils.NESTED_DELIM + this.propertyName + PropertyUtils.NESTED_DELIM + this.reprentingFieldName;
138            }
139        }
140    
141        // system parameter parameter constants
142        public static final String OBJECT_TYPE_GLOBAL_RESTRICTION_PARM_NM = "OBJECT_TYPES";
143        public static final String OBJECT_LEVEL_GLOBAL_RESTRICTION_PARM_NM = "OBJECT_LEVELS";
144        public static final String OBJECT_SUB_TYPE_GLOBAL_RESTRICTION_PARM_NM = "OBJECT_SUB_TYPES";
145        public static final String SUB_FUND_GLOBAL_RESTRICTION_PARM_NM = "SUB_FUND_GROUPS";
146        public static final String FUNCTION_CODE_GLOBAL_RESTRICTION_PARM_NM = "HIGHER_ED_FUNCTIONS";
147    
148        public static final String VALID_DOC_LOC_BY_PAYMENT_REASON_PARM = "VALID_DOCUMENTATION_LOCATIONS_BY_PAYMENT_REASON";
149        public static final String VALID_DOC_LOC_BY_CAMPUS_PARM = "VALID_DOCUMENTATION_LOCATIONS_BY_CAMPUS";
150        public static final String VALID_OBJ_LEVEL_BY_PAYMENT_REASON_PARM = "VALID_OBJECT_LEVELS_BY_PAYMENT_REASON";
151        public static final String VALID_OBJ_CODE_BY_PAYMENT_REASON_PARM = "VALID_OBJECT_CODES_BY_PAYMENT_REASON";
152        public static final String VALID_OBJECT_SUB_TYPES_BY_SUB_FUND_GROUP_PARM = "VALID_OBJECT_SUB_TYPES_BY_SUB_FUND_GROUP";
153        public static final String VALID_SUB_FUND_GROUPS_BY_PAYMENT_REASON_PARM = "VALID_SUB_FUND_GROUPS_BY_PAYMENT_REASON";
154        public static final String VALID_PAYEE_TYPES_BY_PAYMENT_REASON_PARM = "VALID_PAYEE_TYPES_BY_PAYMENT_REASON";
155        public static final String VALID_VENDOR_OWNERSHIP_TYPES_BY_PAYMENT_REASON = "VALID_VENDOR_OWNERSHIP_TYPES_BY_PAYMENT_REASON";
156    
157        public static final String INVALID_DOC_LOC_BY_PAYMENT_REASON_PARM = "INVALID_DOCUMENTATION_LOCATIONS_BY_PAYMENT_REASON";
158        public static final String INVALID_DOC_LOC_BY_CAMPUS_PARM = "INVALID_DOCUMENTATION_LOCATIONS_BY_CAMPUS";
159        public static final String INVALID_OBJ_LEVEL_BY_PAYMENT_REASON_PARM = "INVALID_OBJECT_LEVELS_BY_PAYMENT_REASON";
160        public static final String INVALID_OBJ_CODE_BY_PAYMENT_REASON_PARM = "INVALID_OBJECT_CODES_BY_PAYMENT_REASON";
161        public static final String INVALID_OBJECT_SUB_TYPES_BY_SUB_FUND_GROUP_PARM = "INVALID_OBJECT_SUB_TYPES_BY_SUB_FUND_GROUP";
162        public static final String INVALID_SUB_FUND_GROUPS_BY_PAYMENT_REASON_PARM = "INVALID_SUB_FUND_GROUPS_BY_PAYMENT_REASON";
163        public static final String INVALID_PAYEE_TYPES_BY_PAYMENT_REASON_PARM = "INVALID_PAYEE_TYPES_BY_PAYMENT_REASON";
164    
165        public static final String FEDERAL_TAX_PARM_PREFIX = "NON_RESIDENT_ALIEN_TAX_FEDERAL_";
166        public static final String STATE_TAX_PARM_PREFIX = "NON_RESIDENT_ALIEN_TAX_STATE_";
167        public static final String TAX_PARM_ACCOUNT_SUFFIX = "ACCOUNT";
168        public static final String TAX_PARM_CHART_SUFFIX = "CHART";
169        public static final String TAX_PARM_OBJECT_BY_INCOME_CLASS_SUFFIX = "OBJECT_CODE_BY_INCOME_CLASS";
170        public static final String ALIEN_INDICATOR_CHECKED_PARM_NM = "NON_RESIDENT_ALIEN_DOCUMENTATION_LOCATIONS";
171        public static final String ALIEN_PAYMENT_REASONS_PARM_NM = "NON_RESIDENT_ALIEN_PAYMENT_REASONS";
172        public static final String TRAVEL_PER_DIEM_MESSAGE_PARM_NM = "TRAVEL_PER_DIEM_LINK_PAGE_MESSAGE";
173        public static final String DEFAULT_DOC_LOCATION_PARM_NM = "DEFAULT_DOCUMENTATION_LOCATION";
174        public static final String ALLOW_OBJECT_CODE_EDITS = "ALLOW_ENROUTE_EDIT_OBJECT_CODES_IND";
175        public static final String TAX_DOCUMENTATION_LOCATION_CODE_PARM_NM = "TAX_DOCUMENTATION_LOCATION";
176        public static final String NONEMPLOYEE_TRAVEL_PAY_REASONS_PARM_NM = "NONEMPLOYEE_TRAVEL_PAYMENT_REASONS";
177        public static final String NONEMPLOYEE_TRAVEL_ACTUAL_MILEAGE_LIMIT_PARM_NM = "NONEMPLOYEE_TRAVEL_ACTUAL_MILEAGE_LIMIT_IND";
178        public static final String PREPAID_TRAVEL_PAYMENT_REASONS_PARM_NM = "PREPAID_TRAVEL_PAYMENT_REASONS";
179        public static final String REVOLVING_FUND_PAYMENT_REASONS_PARM_NM = "REVOLVING_FUND_PAYMENT_REASONS";
180        public static final String RESEARCH_PAYMENT_REASONS_PARM_NM = "RESEARCH_PAYMENT_REASONS";
181        public static final String RESEARCH_NON_VENDOR_PAY_LIMIT_AMOUNT_PARM_NM = "RESEARCH_NON_VENDOR_PAY_LIMIT_AMOUNT";
182        public static final String PERFORM_PREPAID_EMPL_PARM_NM = "CHECK_PREPAID_ACTIVE_EMPLOYEE_IND";
183        public static final String CHECK_EMPLOYEE_PAID_OUTSIDE_PAYROLL_PARM_NM = "CHECK_EMPLOYEE_PAID_OUTSIDE_PAYROLL_IND";
184        public static final String MOVING_PAYMENT_REASONS_PARM_NM = "MOVING_PAYMENT_REASONS";
185        public static final String DECEDENT_COMPENSATION_PAYMENT_REASONS_PARM_NM = "DECEDENT_COMPENSATION_PAYMENT_REASONS";
186        
187        public static final String NON_VENDOR_EMPLOYEE_PAYEE_TYPE_LABEL_PARM_NM = "NON_VENDOR_EMPLOYEE_PAYEE_TYPE_LABEL";
188        public static final String PO_AND_DV_PAYEE_TYPE_LABEL_PARM_NM = "PO_AND_DV_PAYEE_TYPE_LABEL";
189        public static final String INDIVIDUAL_OWNERSHIP_TYPES_PARM_NM = "INDIVIDUAL_OWNERSHIP_TYPES";
190        public static final String PAYMENT_REASONS_REQUIRING_TAX_REVIEW_PARM_NM = "PAYMENT_REASONS_REQUIRING_TAX_REVIEW";
191        public static final String CAMPUSES_TAXED_FOR_MOVING_REIMBURSEMENTS_PARM_NM = "CAMPUSES_TAXED_FOR_MOVING_REIMBURSEMENTS";
192    
193        public static final String TAX_TYPE_SSN = "1";
194        public static final String TAX_TYPE_FEIN = "0";
195        
196        public static final String TAX_ID_TYPE_SSN = KimConstants.PersonExternalIdentifierTypes.TAX;
197        //public static final String TAX_ID_TYPE_FEIN = "F";
198    
199        public static final String NRA_TAX_INCOME_CLASS_FELLOWSHIP = "F";
200        public static final String NRA_TAX_INCOME_CLASS_INDEPENDENT_CONTRACTOR = "I";
201        public static final String NRA_TAX_INCOME_CLASS_ROYALTIES = "R";
202        public static final String NRA_TAX_INCOME_CLASS_NON_REPORTABLE = "N";
203    
204        public static final String FEDERAL_TAX_TYPE_CODE = "F";
205        public static final String STATE_TAX_TYPE_CODE = "S";
206    
207        public static final String DOCUMENT_TYPE_CHECKACH = "DVCA";
208        public static final String DOCUMENT_TYPE_WTFD = "DVWF";
209        
210        public static final String DV_COVER_SHEET_TEMPLATE_LINES_PARM_NM = "COVER_SHEET_TEMPLATE_LINES";
211        public static final String DV_COVER_SHEET_TEMPLATE_RLINES_PARM_NM = "COVER_SHEET_TEMPLATE_RLINES";
212        public static final String DV_COVER_SHEET_TEMPLATE_ALIEN_PARM_NM = "COVER_SHEET_TEMPLATE_NON_RESIDENT_ALIEN";
213        public static final String DV_COVER_SHEET_TEMPLATE_ATTACHMENT_PARM_NM = "COVER_SHEET_TEMPLATE_ATTACHMENT";
214        public static final String DV_COVER_SHEET_TEMPLATE_HANDLING_PARM_NM = "COVER_SHEET_TEMPLATE_HANDLING";
215        public static final String DV_COVER_SHEET_TEMPLATE_BAR_PARM_NM = "COVER_SHEET_TEMPLATE_BAR";
216        public static final String DV_COVER_SHEET_TEMPLATE_NM = "disbursementVoucherCoverSheetTemplate.pdf";
217        
218        public static class RouteLevelNames {
219            public static final String PURCHASING = "Purchasing";
220            public static final String ACCOUNT = "Account";
221            public static final String ACCOUNTING_ORGANIZATION_HIERARCHY = "AccountingOrganizationHierarchy";
222            public static final String TAX = "Tax";
223            public static final String AWARD = "Award";
224            public static final String TRAVEL = "Travel";
225            public static final String CAMPUS = "Campus";
226            public static final String PAYMENT_METHOD = "PaymentMethod";
227        }
228    }