001    /**
002     * Copyright 2004-2014 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.kpme.core.util;
017    
018    import java.math.BigDecimal;
019    import java.math.MathContext;
020    import java.math.RoundingMode;
021    import java.util.ArrayList;
022    import java.util.HashMap;
023    import java.util.HashSet;
024    import java.util.LinkedHashMap;
025    import java.util.List;
026    import java.util.Map;
027    import java.util.Set;
028    
029    import org.joda.time.format.DateTimeFormat;
030    import org.joda.time.format.DateTimeFormatter;
031    import org.kuali.kpme.core.KPMEConstants;
032    import org.kuali.kpme.core.accrualcategory.AccrualCategory;
033    import org.kuali.kpme.core.earncode.EarnCode;
034    import org.kuali.kpme.core.earncode.security.EarnCodeType;
035    import org.kuali.kpme.core.leaveplan.LeavePlan;
036    import org.kuali.rice.kew.api.KewApiConstants;
037    import org.kuali.rice.kew.api.document.DocumentStatus;
038    
039    public class HrConstants {
040            
041            /**
042             * The following were moved up from TkConstants
043             * @author dgodfrey
044             *
045             */
046            
047        public static final int DEFAULT_CACHE_TIME = 900;
048        public static final String TK_TARGET_USER_PERSON = "tkTargetPerson";
049    
050            public static final class DOCUMENT_ACTIONS {
051                    public static final String ROUTE = "R";
052                    public static final String APPROVE = "A";
053                    public static final String DISAPPROVE = "D";
054                    public static final String REFRESH = "H";
055            }
056    
057            public static final class BATCH_JOB_ACTIONS {
058                    public static final String BATCH_JOB_INITIATE = "BI";
059                    public static final String BATCH_JOB_ROUTE = "BR";
060                    public static final String BATCH_JOB_APPROVE = "BA";
061            }
062    
063            public static final class ROUTE_STATUS {
064                    public static final String INITIATED = DocumentStatus.INITIATED.getCode();
065                    public static final String ENROUTE = DocumentStatus.ENROUTE.getCode();
066                    public static final String FINAL = DocumentStatus.FINAL.getCode();
067                    public static final String CANCEL = DocumentStatus.CANCELED.getCode();
068                    public static final String SAVED = DocumentStatus.SAVED.getCode();
069                    public static final String DISAPPROVED = DocumentStatus.DISAPPROVED.getCode();
070                    public static final String EXCEPTION = DocumentStatus.EXCEPTION.getCode();
071            }
072    
073        // Pay Frequency Type
074        public static final class PAY_FREQUENCY {
075            public static final String PAY_FREQUENCY_WEEK = "W";
076            public static final String PAY_FREQUENCY_BI_WEEK = "BW";
077            public static final String PAY_FREQUENCY_SEMI_MONTH = "SM";
078            public static final String PAY_FREQUENCY_MONTH = "M";
079        }
080    
081            public static final Map<String, String> DOC_ROUTE_STATUS = new LinkedHashMap<String, String>(8);
082    
083            static {
084                    DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_INITIATED_CD, KewApiConstants.ROUTE_HEADER_INITIATED_LABEL);
085            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_SAVED_CD, KewApiConstants.ROUTE_HEADER_SAVED_LABEL);
086            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_ENROUTE_CD, KewApiConstants.ROUTE_HEADER_ENROUTE_LABEL);
087            DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_FINAL_CD, KewApiConstants.ROUTE_HEADER_FINAL_LABEL);
088                    DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_CANCEL_CD, KewApiConstants.ROUTE_HEADER_CANCEL_LABEL);
089                    DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_DISAPPROVED_CD, KewApiConstants.ROUTE_HEADER_DISAPPROVED_LABEL);
090                    DOC_ROUTE_STATUS.put(KewApiConstants.ROUTE_HEADER_EXCEPTION_CD, KewApiConstants.ROUTE_HEADER_EXCEPTION_LABEL);
091    
092            }
093    
094            public static final class BATCH_JOB_NAMES {
095                    public static final String INITIATE = "Initiate";
096                    public static final String END_PAY_PERIOD = "End Pay Period";
097                    public static final String END_REPORTING_PERIOD = "End Reporting Period";
098                    public static final String EMPLOYEE_APPROVAL = "Employee Approval";
099                    public static final String MISSED_PUNCH_APPROVAL = "Missed Punch Approval";
100                    public static final String SUPERVISOR_APPROVAL = "Supervisor Approval";
101                    public static final String PAYROLL_APPROVAL = "Payroll Approval";
102                    public static final String LEAVE_CALENDAR_DELINQUENCY = "Leave Calendar Delinquency";
103            }
104    
105            public static final List<String> TIME_ZONES = new ArrayList<String>();
106    
107            static {
108                    TIME_ZONES.add("America/Chicago");
109                    TIME_ZONES.add("America/Denver");
110                    TIME_ZONES.add("America/Detroit");
111                    TIME_ZONES.add("America/Indiana/Indianapolis");
112                    TIME_ZONES.add("America/Phoenix");
113            }
114    
115            /**
116             * 
117             * Refactoring starts here from TkConstants...
118             * 
119             */
120            public static final Map<String, String> SERVICE_UNIT_OF_TIME = new LinkedHashMap<String, String>(3);
121    
122            static {
123                    SERVICE_UNIT_OF_TIME.put("Y", "Years");
124                    SERVICE_UNIT_OF_TIME.put("M", "Months");
125                    //SERVICE_UNIT_OF_TIME.put("H", "Hours");
126            }
127    
128            public static final Map<String, String> UNIT_OF_TIME = new LinkedHashMap<String, String>(2);
129    
130            static {
131                    UNIT_OF_TIME.put("D", "Days");
132                    UNIT_OF_TIME.put("H", "Hours");
133            }
134    
135            public static final Map<String, String> MAX_BAL_FLAG = new LinkedHashMap<String, String>(2);
136    
137            static {
138                    MAX_BAL_FLAG.put("Y", "Yes");
139                    MAX_BAL_FLAG.put("N", "No");
140            }
141    
142            public static final Map<String, String> MAX_BALANCE_ACTION_FREQUENCY = new LinkedHashMap<String, String>(3);
143    
144            static {
145                    MAX_BALANCE_ACTION_FREQUENCY.put("LA", "Leave Approve");
146                    MAX_BALANCE_ACTION_FREQUENCY.put("YE", "Year End");
147                    MAX_BALANCE_ACTION_FREQUENCY.put("OD", "On Demand");
148                    //MAX_BALANCE_ACTION_FREQUENCY.put("NA", "Not Applicable");
149            }
150    
151            public static final String ASSIGNMENT_KEY_DELIMITER = "_";
152            public static final String HOLIDAY_EARN_CODE = "HOL";
153            // Special System earn code to represent lunch deductions.
154            public static final String LUNCH_EARN_CODE = "LUN";
155    
156        /* these are quick hacks to allow these values to be checked in jsp/tag files */
157        public String getLUNCH_EARN_CODE() {
158            return LUNCH_EARN_CODE;
159        }
160    
161        public String getEARN_CODE_AMOUNT() {
162            return EARN_CODE_AMOUNT;
163        }
164    
165        public String getHOLIDAY_EARN_CODE() {
166            return HOLIDAY_EARN_CODE;
167        }
168        /* end hack */
169    
170            public static final String TK_TARGET_USER_RETURN = "tkTargetReturn";
171    
172            public static final String WILDCARD_CHARACTER = "%";
173            public static final Long WILDCARD_LONG = -1L;
174    
175            public static final DateTimeFormatter DT_BASIC_DATE_FORMAT = DateTimeFormat.forPattern("MM/dd/yyyy");
176    
177            public static final String FLSA_STATUS_NON_EXEMPT ="NE";
178        public static final String FLSA_STATUS_EXEMPT ="E";
179    
180            // Timesheet document ID request parameter name
181            public static final String TIMESHEET_DOCUMENT_ID_REQUEST_NAME = "tdocid";
182    
183            // earn code type
184            public static final String EARN_CODE_HOUR = "H";
185            public static final String EARN_CODE_TIME = "T";
186            public static final String EARN_CODE_AMOUNT = "A";
187            public static final String EARN_CODE_OVT = "OVT";
188    
189            public static final String EARN_CODE_DAY = "D";
190    
191        public static final String EFFECTIVE_DATE_FIELD = "effectiveDate";
192    
193            public static final Map<String, Set<String>> CLASS_INQUIRY_KEY_MAP = new HashMap<String, Set<String>>(4);
194    
195            static {
196                    Set<String> keys = new HashSet<String>();
197                    keys.add("leavePlan");
198                    keys.add("effectiveDate");
199                    CLASS_INQUIRY_KEY_MAP.put(LeavePlan.class.getName(), keys);
200    
201                    keys = new HashSet<String>();
202                    keys.add("accrualCategory");
203                    keys.add("effectiveDate");
204                    CLASS_INQUIRY_KEY_MAP.put(AccrualCategory.class.getName(), keys);
205    
206                    keys = new HashSet<String>();
207                    keys.add("earnCode");
208                    keys.add("effectiveDate");
209                    CLASS_INQUIRY_KEY_MAP.put(EarnCode.class.getName(), keys);
210            }
211    
212            public static final Map<String, String> EARN_CODE_SECURITY_TYPE = new HashMap<String, String>();
213            
214            static {
215                    EARN_CODE_SECURITY_TYPE.put(EarnCodeType.LEAVE.getCode(), "Leave");
216                    EARN_CODE_SECURITY_TYPE.put(EarnCodeType.TIME.getCode(), "Time");
217                    EARN_CODE_SECURITY_TYPE.put(EarnCodeType.BOTH.getCode(), "Time and Leave");
218            }
219            /**
220             * 
221             * The following were moved up from LMConstants
222             * 
223             * @author dgodfrey
224             *
225             */
226    
227            public static final String SERVICE_TIME_YEAR = "year";
228            public static final String SERVICE_TIME_MONTHS = "month";
229    
230    
231            // Action history
232            public static final class ACTION {
233                    public static final String DELETE = "D";
234                    public static final String ADD = "A";
235                    public static final String MODIFIED = "M";
236            }
237    
238            public static final class ACTION_AT_MAX_BALANCE {
239                    public static final String LOSE = "L";
240                    public static final String TRANSFER = "T";
241                    public static final String PAYOUT = "P";
242            }
243    
244            public static final Map<String, String> ACTION_AT_MAX_BALANCE_MAP = new LinkedHashMap<String, String>(3);
245    
246            static {
247                    ACTION_AT_MAX_BALANCE_MAP.put(ACTION_AT_MAX_BALANCE.TRANSFER, "Transfer");
248                    ACTION_AT_MAX_BALANCE_MAP.put(ACTION_AT_MAX_BALANCE.PAYOUT, "Payout");
249                    ACTION_AT_MAX_BALANCE_MAP.put(ACTION_AT_MAX_BALANCE.LOSE, "Lose");
250                    //ACTION_AT_MAX_BALANCE.put("NA", "Not Applicable");
251            }
252    
253            public static final class MAX_BAL_ACTION_FREQ {
254                    public static final String LEAVE_APPROVE = "LA";
255                    public static final String YEAR_END = "YE";
256                    public static final String ON_DEMAND = "OD";
257            }
258    
259            // Request status
260            public static final class REQUEST_STATUS{
261                    public static final String PLANNED="P";
262                    public static final String REQUESTED="R";
263                    public static final String APPROVED="A";
264                    public static final String DISAPPROVED = "D";
265                    public static final String DEFERRED="F";
266                    public static final String USAGE = "U";
267            }
268    
269            public static final Map<String, String> ROUND_OPTION_MAP = new HashMap<String, String>(2);
270            static {
271                    ROUND_OPTION_MAP.put("T", "Traditional");
272                    ROUND_OPTION_MAP.put("R", "Truncate");
273            }
274    
275    
276            public static final Map<String, String> REQUEST_STATUS_STRINGS = new HashMap<String, String>(6);
277    
278            static {
279                    REQUEST_STATUS_STRINGS.put(HrConstants.REQUEST_STATUS.PLANNED, "Planned");
280                    REQUEST_STATUS_STRINGS.put(HrConstants.REQUEST_STATUS.REQUESTED, "Requested");
281                    REQUEST_STATUS_STRINGS.put(HrConstants.REQUEST_STATUS.APPROVED, "Approved"); 
282                    REQUEST_STATUS_STRINGS.put(HrConstants.REQUEST_STATUS.DISAPPROVED, "Disapproved");
283                    REQUEST_STATUS_STRINGS.put(HrConstants.REQUEST_STATUS.DEFERRED, "Deferred");
284                    REQUEST_STATUS_STRINGS.put(HrConstants.REQUEST_STATUS.USAGE, "Usage");
285            }
286    
287            public static final class RECORD_METHOD {
288                    public static final String TIME = "T";
289                    public static final String HOUR = "H";
290                    public static final String AMOUNT = "A";
291                    public static final String DAY = "D";
292            }
293    
294            public static final Map<String, String> RECORD_METHOD_MAP = new HashMap<String, String>(2);
295            static {
296                    RECORD_METHOD_MAP.put(RECORD_METHOD.TIME, "Time");
297                    RECORD_METHOD_MAP.put(RECORD_METHOD.HOUR, "Hours");
298                    RECORD_METHOD_MAP.put(RECORD_METHOD.AMOUNT, "Amount");
299                    RECORD_METHOD_MAP.put(RECORD_METHOD.DAY, "Days");
300            }
301    
302            public static final Map<String, String> ACCRUAL_BALANCE_ACTION_MAP = new LinkedHashMap<String, String>(2);
303            static {
304                    ACCRUAL_BALANCE_ACTION_MAP.put(ACCRUAL_BALANCE_ACTION.NONE, "None");
305                    ACCRUAL_BALANCE_ACTION_MAP.put(ACCRUAL_BALANCE_ACTION.USAGE, "Usage");
306                    ACCRUAL_BALANCE_ACTION_MAP.put(ACCRUAL_BALANCE_ACTION.ADJUSTMENT, "Adjustment");
307            }
308    
309            //No occurrences found in workspace
310            public static final class ACCRUAL_BALANCE_ACTION {
311                    public static final String NONE = "N";
312                    public static final String USAGE = "U";
313                    public static final String ADJUSTMENT = "A";
314            }
315    
316            public static final Map<String, String> EARN_CODE_USAGE_LIMIT_MAP = new LinkedHashMap<String, String>(2);
317            static {
318                    EARN_CODE_USAGE_LIMIT_MAP.put("I", "Include");
319                    EARN_CODE_USAGE_LIMIT_MAP.put("E", "Exclude");
320            }
321    
322            public static final String LEAVE_CALENDAR_TYPE = "leaveCalendar";
323            public static final String PAY_CALENDAR_TYPE = "payCalendar";
324            public static final Integer PAGE_SIZE = 20;
325            public static final String APPROVAL_TABLE_ID = "row";
326            public static final String TASK_DEFAULT_DESP = "Default";
327            public static final int BIG_DECIMAL_SCALE = 2;
328            public static final RoundingMode BIG_DECIMAL_SCALE_ROUNDING = RoundingMode.HALF_EVEN;
329            public static final BigDecimal BIG_DECIMAL_SCALED_ZERO = BigDecimal.ZERO.setScale(HrConstants.BIG_DECIMAL_SCALE, HrConstants.BIG_DECIMAL_SCALE_ROUNDING);
330        public static final MathContext MATH_CONTEXT = new MathContext(5, BIG_DECIMAL_SCALE_ROUNDING);
331    
332        public static final BigDecimal BIG_DECIMAL_NEGATIVE_ONE = new BigDecimal("-1");
333        public static final BigDecimal BIG_DECIMAL_1000 = BigDecimal.TEN.multiply(BigDecimal.TEN).multiply(BigDecimal.TEN);
334        public static final BigDecimal BIG_DECIMAL_60 = BigDecimal.TEN.multiply(new BigDecimal("6"));
335        public static final BigDecimal BIG_DECIMAL_MS_IN_H = BIG_DECIMAL_1000.multiply(BIG_DECIMAL_60).multiply(BIG_DECIMAL_60);
336        public static final BigDecimal BIG_DECIMAL_MS_IN_M = BIG_DECIMAL_1000.multiply(BIG_DECIMAL_60);
337        public static final BigDecimal BIG_DECIMAL_HRS_IN_DAY = new BigDecimal(24);
338    
339        public static final class CacheNamespace {
340            public static final String MODULE_NAME = "core";
341            public static final String NAMESPACE_PREFIX = KPMEConstants.CacheNamespace.ROOT_NAMESPACE_PREFIX + "/"
342                    + MODULE_NAME + "/";
343            public static final String KPME_GLOBAL_CACHE_NAME = NAMESPACE_PREFIX + "Global";
344        }
345    }