View Javadoc
1   /*
2    * The Kuali Financial System, a comprehensive financial management system for higher education.
3    * 
4    * Copyright 2005-2014 The Kuali Foundation
5    * 
6    * This program is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Affero General Public License as
8    * published by the Free Software Foundation, either version 3 of the
9    * License, or (at your option) any later version.
10   * 
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Affero General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Affero General Public License
17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package org.kuali.kfs.module.bc;
20  
21  import java.math.BigDecimal;
22  import java.util.ArrayList;
23  import java.util.Arrays;
24  import java.util.HashMap;
25  import java.util.List;
26  
27  import org.kuali.kfs.module.bc.document.web.struts.BudgetConstructionRequestImportAction;
28  import org.kuali.kfs.module.bc.document.web.struts.OrganizationSelectionTreeAction;
29  import org.kuali.kfs.sys.KFSConstants;
30  import org.kuali.kfs.sys.KFSPropertyConstants;
31  import org.kuali.kfs.sys.KFSConstants.ParameterValues;
32  
33  public class BCConstants {
34      public static final String BUDGET_CONSTRUCTION_NAMESPACE = "KFS-BC";
35  
36      // max depth to check runaway account organization hierarchy builds
37      public final static Integer MAXIMUM_ORGANIZATION_TREE_DEPTH = new Integer(1000);
38  
39      // formkey prefix to use for all screens we will store in session
40      public static final String FORMKEY_PREFIX = "BcDoc";
41      public static final String BC_IN_PROGRESS_SESSIONFLAG = FORMKEY_PREFIX + "BCInProgress";
42      public static final String BC_HEARTBEAT_SESSIONFLAG = FORMKEY_PREFIX + "BCHeartBeat";
43      public static final String BC_DOC_AUTHORIZATION_STATUS_SESSIONKEY = FORMKEY_PREFIX + "EditStatus";
44  
45      // this are used in expansion screen session security cleanup management
46      public static final String MAPPING_ATTRIBUTE_KUALI_FORM = "KualiForm";
47      public static final String MAPPING_SCOPE_SESSION = "session";
48  
49      public static final String MAPPING_SAVE = "save";
50  
51      // screen tab error keys
52      public static final String BUDGET_CONSTRUCTION_SALARY_SETTING_TAB_ERRORS = "document.budgetConstructionSalarySetting*";
53      public static final String BUDGET_CONSTRUCTION_REVENUE_TAB_ERRORS = "document.pendingBudgetConstructionGeneralLedgerRevenueLines*,newRevenueLine*";
54      public static final String BUDGET_CONSTRUCTION_EXPENDITURE_TAB_ERRORS = "document.pendingBudgetConstructionGeneralLedgerExpenditureLines*,newExpenditureLine*";
55      public static final String BUDGET_CONSTRUCTION_MONTHLY_BUDGET_ERRORS = "budgetConstructionMonthly*";
56      public static final String BUDGET_CONSTRUCTION_REPORTDUMP_TAB_ERRORS = "document.budgetConstructionDocumentReportModes*";
57      public static final String BUDGET_CONSTRUCTION_SYSTEM_INFORMATION_TAB_ERRORS = "accountOrgHierLevels*";
58      public static final String BUDGET_CONSTRUCTION_SELECTION_ERRORS = "budgetConstructionHeader*";
59  
60      public static final String NEW_EXPENDITURE_LINE_PROPERTY_NAME = "newExpenditureLine";
61      public static final String NEW_REVENUE_LINE_PROPERTY_NAME = "newRevenueLine";
62  
63      public static final String DISABLE_SALARY_SETTING_FLAG = "DISABLE_SALARY_SETTING_FLAG";
64      public static final String DISABLE_BENEFITS_CALCULATION_FLAG = "DISABLE_BENEFITS_CALCULATION_FLAG";
65  
66      public static final String BC_SELECTION_ACTION = "budgetBudgetConstructionSelection.do";
67      public static final String BC_SELECTION_REFRESH_METHOD = "refresh";
68  
69      public static final String ORG_SEL_TREE_REFRESH_CALLER = OrganizationSelectionTreeAction.class.getName();
70      public static final String ORG_SEL_TREE_ACTION = "budgetOrganizationSelectionTree.do";
71      public static final String ORG_SEL_TREE_METHOD = "loadExpansionScreen";
72      public static final String ORG_TEMP_LIST_LOOKUP = "budgetTempListLookup.do";
73      public static final String ORG_REPORT_SELECTION_ACTION = "budgetOrganizationReportSelection.do";
74      public static final String REPORT_EXPORT_ACTION = "budgetReportExport.do";
75      public static final String REPORT_EXPORT_PATH = "budgetReportExport";
76      public static final String REQUEST_IMPORT_ACTION = "budgetBudgetConstructionRequestImport.do";
77      public static final String PAYRATE_IMPORT_EXPORT_ACTION = "budgetPayrateImportExport.do";
78  
79      public static final String REQUEST_IMPORT_REFRESH_CALLER = BudgetConstructionRequestImportAction.class.getName();
80      public static final String REQUEST_IMPORT_FILE_PROCESSING_ERROR_MESSAGE_GENERIC = "Bad file format at line";
81  
82      public static final String REQUEST_IMPORT_OUTPUT_FILE = "budgetImportLog.pdf";
83      public static final String PAYRATE_IMPORT_LOG_FILE = "payrate_import_log.pdf";
84      public static final String PAYRATE_EXPORT_FILE = "payrate_export.txt";
85  
86      public static final String LABOR_OBJECT_FRINGE_CODE = "F";
87      public static final String MAPPING_IMPORT_EXPORT = "import_export";
88  
89      public static final String POSITION_NUMBER_NOT_FOUND = "NotFnd";
90  
91      public static final String IS_ORG_REPORT_REQUEST_PARAMETER = "orgReport";
92  
93      public enum OrgSelOpMode {
94          PULLUP, PUSHDOWN, REPORTS, SALSET, ACCOUNT
95      }
96  
97      /**
98       * This class represents Select control options mapping explicit Integer values to an enum value. The explicit values can then
99       * be used in a database stored procedure call in the event procedure calls are used instead of calls to a java method.
100      */
101     public enum OrgSelControlOption {
102         NO(0, "No"), YES(1, "Yes"), NOTSEL(0, "Not Sel"), ORG(1, "Org"), SUBORG(2, "Sub Org"), BOTH(3, "Both"), ORGLEV(1, "Org Lev"), MGRLEV(2, "Mgr Lev"), ORGMGRLEV(3, "Org+Mgr Lev"), LEVONE(4, "Lev One"), LEVZERO(5, "Lev Zero");
103         private String label;
104         private Integer key;
105 
106         private OrgSelControlOption(Integer key, String label) {
107             this.key = key;
108             this.label = label;
109         }
110 
111         public String getLabel() {
112             return label;
113         }
114 
115         public Integer getKey() {
116             return key;
117         }
118     }
119 
120     // type of month spread delete used in rules checking when deleting monthly spreads
121     public enum MonthSpreadDeleteType {
122         NONE, REVENUE, EXPENDITURE
123     }
124 
125     // the reason a document (account) is allowed only salary setting lines
126     public enum AccountSalarySettingOnlyCause {
127         MISSING_PARAM, NONE, FUND, SUBFUND, FUND_AND_SUBFUND
128     }
129 
130 
131     // some constants used in rule checking - may eventually move these to system parameters
132 
133     // latest period and number of fiscal years before active bcfy that an account becomes not budgetable
134     public static final String NO_BUDGET_ALLOWED_EXPIRE_ACCOUNTING_PERIOD = "06";
135     public static final Integer NO_BUDGET_ALLOWED_FY_OFFSET = Integer.valueOf(2);
136 
137     // latest period and number of fiscal years before active bcfy that an account expire warning message gets issued
138     public static final String ACCOUNT_EXPIRE_WARNING_ACCOUNTING_PERIOD = "12";
139     public static final Integer ACCOUNT_EXPIRE_WARNING_FY_OFFSET = Integer.valueOf(1);
140 
141     // account budgetRecordingLevelCode where no budget is allowed
142     public static final String BUDGET_RECORDING_LEVEL_N = "N";
143 
144     // by default employees are assumed to work the entire 12-month year
145     public static final Integer DEFAULT_NORMAL_WORK_MONTHS = 12;
146 
147     public static final String BC_DOCUMENT_REFRESH_CALLER = "BudgetConstruction";
148     public static final String BC_DOCUMENT_ACTION = "budgetBudgetConstruction.do";
149     public static final String BC_DOCUMENT_REFRESH_METHOD = "refresh";
150     public static final String BC_DOCUMENT_METHOD = "docHandler";
151     public static final String BC_DOCUMENT_PULLUP_METHOD = "performAccountPullup";
152     public static final String BC_DOCUMENT_PUSHDOWN_METHOD = "performAccountPushdown";
153 
154     public static final String MONTHLY_BUDGET_REFRESH_CALLER = "MonthlyBudgetAction";
155     public static final String MONTHLY_BUDGET_ACTION = "budgetMonthlyBudget.do";
156     public static final String MONTHLY_BUDGET_METHOD = "loadExpansionScreen";
157 
158     public static final String QUICK_SALARY_SETTING_REFRESH_CALLER = "QuickSalarySettingAction";
159     public static final String QUICK_SALARY_SETTING_ACTION = "budgetQuickSalarySetting.do";
160     public static final String QUICK_SALARY_SETTING_METHOD = "loadExpansionScreen";
161 
162     public static final String POSITION_SALARY_SETTING_REFRESH_CALLER = "PositionSalarySetting";
163     public static final String POSITION_SALARY_SETTING_ACTION = "budgetPositionSalarySetting.do";
164     public static final String POSITION_SALARY_SETTING_METHOD = "loadExpansionScreen";
165     public static final String POSITION_SALARY_SETTING_TITLE = "Salary Setting by Position";
166 
167     public static final String INCUMBENT_SALARY_SETTING_REFRESH_CALLER = "IncumbentSalarySetting";
168     public static final String INCUMBENT_SALARY_SETTING_ACTION = "budgetIncumbentSalarySetting.do";
169     public static final String INCUMBENT_SALARY_SETTING_METHOD = "loadExpansionScreen";
170     public static final String INCUMBENT_SALARY_SETTING_TITLE = "Salary Setting by Incumbent";
171 
172     public static final String LOAD_EXPANSION_SCREEN_METHOD = "loadExpansionScreen";
173     public static final String SECOND_WINDOW_TARGET_NAME = "BCSecondWindow";
174 
175     public static final String REPORT_RUNNER_ACTION = "budgetReportRunner.do";
176 
177     public static final String RETURN_ANCHOR = "returnAnchor";
178     public static final String RETURN_FORM_KEY = "returnFormKey";
179 
180     public static final String INSERT_REVENUE_LINE_METHOD = "insertRevenueLine";
181     public static final String INSERT_EXPENDITURE_LINE_METHOD = "insertExpenditureLine";
182 
183     public final static String SELECTION_SUB_TREE_ORGS = "selectionSubTreeOrgs";
184     public final static String SHOW_INITIAL_RESULTS = "showInitialResults";
185     public final static String CURRENT_POINT_OF_VIEW_KEYCODE = "currentPointOfViewKeyCode";
186     public final static String FORCE_TO_ACCOUNT_LIST_SCREEN = "forceToAccountListScreen";
187 
188     public final static String LOCK_STRING_DELIMITER = "!";
189 
190 
191     /*
192      * fund groups and subfund groups that are NOT loaded to the GL from budget construction (these are the constants used, not the
193      * ones in KFSConstants/BudgetConstructionConstants)
194      */
195     public final static List<String> NO_BC_GL_LOAD_SUBFUND_GROUPS = Arrays.asList("SIDC");
196     public final static List<String> NO_BC_GL_LOAD_FUND_GROUPS = Arrays.asList("CG");
197 
198     /*
199      * values for the CSF funding status flag
200      */
201     public enum csfFundingStatusFlag {
202         LEAVE("L"), VACANT("V"), UNFUNDED("U"), ACTIVE("-");
203 
204         private csfFundingStatusFlag(String flagValue) {
205             this.flagValue = flagValue;
206         }
207 
208         public String getFlagValue() {
209             return flagValue;
210         }
211 
212         private String flagValue;
213     }
214 
215     /*
216      * value of employee ID field in a vacant line in budget construction appointment funding or budget construction CSF
217      */
218     public final static String VACANT_EMPLID = "VACANT";
219 
220     // the transaction ledger description for the general ledger budget load
221     public final static String BC_TRN_LDGR_ENTR_DESC = "Beginning Budget Load";
222 
223     // this is a pairing of the OJB "property" for the monthly amount and its corresponding accounting period
224     public final static ArrayList<String[]> BC_MONTHLY_AMOUNTS = buildMonthlyProperties();
225 
226     private static ArrayList<String[]> buildMonthlyProperties() {
227         ArrayList<String[]> monthlyProperties = new ArrayList<String[]>(12);
228         monthlyProperties.add((new String[] { KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_1_LINE_AMOUNT, KFSConstants.MONTH1 }));
229         monthlyProperties.add((new String[] { KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_2_LINE_AMOUNT, KFSConstants.MONTH2 }));
230         monthlyProperties.add((new String[] { KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_3_LINE_AMOUNT, KFSConstants.MONTH3 }));
231         monthlyProperties.add((new String[] { KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_4_LINE_AMOUNT, KFSConstants.MONTH4 }));
232         monthlyProperties.add((new String[] { KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_5_LINE_AMOUNT, KFSConstants.MONTH5 }));
233         monthlyProperties.add((new String[] { KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_6_LINE_AMOUNT, KFSConstants.MONTH6 }));
234         monthlyProperties.add((new String[] { KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_7_LINE_AMOUNT, KFSConstants.MONTH7 }));
235         monthlyProperties.add((new String[] { KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_8_LINE_AMOUNT, KFSConstants.MONTH8 }));
236         monthlyProperties.add((new String[] { KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_9_LINE_AMOUNT, KFSConstants.MONTH9 }));
237         monthlyProperties.add((new String[] { KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_10_LINE_AMOUNT, KFSConstants.MONTH10 }));
238         monthlyProperties.add((new String[] { KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_11_LINE_AMOUNT, KFSConstants.MONTH11 }));
239         monthlyProperties.add((new String[] { KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_12_LINE_AMOUNT, KFSConstants.MONTH12 }));
240         return monthlyProperties;
241     }
242 
243     // budget construction report constants
244     public static class Report {
245         public final static String INCOME_EXP_TYPE_A = "A";
246         public final static String INCOME_EXP_TYPE_E = "E";
247         public final static String INCOME_EXP_TYPE_T = "T";
248         public final static String INCOME_EXP_TYPE_X = "X";
249         public final static String VACANT = VACANT_EMPLID;
250         public final static String BLANK = KFSConstants.EMPTY_STRING;
251         public final static String DELETE_MARK = "*";
252         public final static String DIVIDER = "/";
253         public final static String TOTAL_REVENUES = "Total Revenues";
254         public final static String TOTAL_EXPENDITURES_MARGIN = "Total Expenditures & Margin";
255         public final static String REVENUE = "REVENUE";
256         public final static String EXPENDITURE = "EXPENDITURE";
257         public final static String CONSOLIIDATED = "Consolidated";
258         public final static String NONE = "NONE";
259         public final static String PLUS = "+";
260         public final static String UNDF = "UnDf";
261         public final static String YES = "Y";
262         public final static String NO = "N";
263         public final static String THRESHOLD = "Threshold: ";
264         public final static String SELECTED_REASONS = "Selected Reasons: ";
265         public final static String THRESHOLD_GREATER = "greater then or equal to ";
266         public final static String THRESHOLD_LESS = "less than or equal to ";
267         public final static String PERCENT = "%";
268         public final static String MSG_REPORT_NO_DATA = "No data found.";
269         // selection screen
270         public final static String NONE_SELECTION_TITLE = "";
271         public final static String SUB_FUND_SELECTION_TITLE = "Sub-Fund List Selection";
272         public final static String OBJECT_CODE_SELECTION_TITLE = "Salary Object List Selection";
273         public final static String REASON_CODE_SELECTION_TITLE = "Reason Code Selection";
274         public final static String REPORT_MODE = "reportMode";
275         public final static String BUILD_CONTROL_LIST = "buildControlList";
276         public final static String REPORT_CONSOLIDATION = "reportConsolidation";
277         public final static String CONTROL_BUILD_HELPER_SESSION_NAME = "controlBuildHelper";
278         public final static String SUB_FUND_LIST_EMPTY_MESSAGE_KEY = "error.budget.report.emptySubFundList";
279         public final static String OBJECT_CODE_LIST_EMPTY_MESSAGE_KEY = "error.budget.report.emptyObjectCodeList";
280         public final static String REASON_CODE_LIST_EMPTY_MESSAGE_KEY = "error.budget.report.emptyReasonCodeList";
281         public final static String THRESHOLD_SELECTION_MESSAGE_KEY = "message.budget.thresholdSelection";
282         public final static String SELECTED_OBJECT_CODES_MESSAGE_KEY = "message.budget.selectedObjectCodes";
283         public final static String NOT_DEFINED = " not defined";
284         public final static String CHART = "Chart";
285         public final static String OBJECT = "Object";
286 
287         // report file name
288         public static final String REPORT_TEMPLATE_CLASSPATH = "org/kuali/kfs/module/bc/report/";
289         public static final String REPORT_MESSAGES_CLASSPATH = REPORT_TEMPLATE_CLASSPATH + "BudgetOrgReport";
290 
291         // Represents the three modes in which report data is restricted
292         public enum BuildMode {
293             PBGL(), MONTH(), BCAF();
294         }
295 
296         // Represents the varoius reports criteria selections
297         public enum ReportSelectMode {
298             ACCOUNT(), OBJECT_CODE(), SUBFUND(), REASON();
299         }
300     }
301 
302     // constants that represent a mode for the TempListLookupAction.
303     public static class TempListLookupMode {
304         public final static String TEMP_LIST_LOOKUP_MODE = "tempListLookupMode";
305 
306         public final static int DEFAULT_LOOKUP_MODE = 0;
307         public final static int INTENDED_INCUMBENT_SELECT = 1;
308         public final static int POSITION_SELECT = 2;
309         public final static int ACCOUNT_SELECT_ABOVE_POV = 3;
310         public final static int ACCOUNT_SELECT_BUDGETED_DOCUMENTS = 4;
311         public final static int LOCK_MONITOR = 5;
312         public final static int CSF_TRACKER_POSITION_LOOKUP = 6;
313         public final static int ACCOUNT_SELECT_PULLUP_DOCUMENTS = 7;
314         public final static int ACCOUNT_SELECT_PUSHDOWN_DOCUMENTS = 8;
315         public final static int ACCOUNT_SELECT_MANAGER_DELEGATE = 9;
316         public final static int BUDGET_POSITION_LOOKUP = 10;
317         public final static int INTENDED_INCUMBENT = 11;
318         public final static int SHOW_BENEFITS = 12;
319     }
320 
321     public final static String BC_BO_CLASSPATH = "org.kuali.kfs.module.bc.businessobject";
322     public final static String REQUEST_BENEFITS_BO = BC_BO_CLASSPATH+".RequestBenefits";
323 
324     public enum RequestImportFileType {
325         MONTHLY("MONTHLY"), ANNUAL("ANNUAL");
326 
327         private String fileType;
328 
329         private RequestImportFileType(String fileType) {
330             this.fileType = fileType;
331         }
332     }
333 
334     public enum RequestImportFieldSeparator {
335         COMMA("COMMA"), TAB("TAB"), OTHER("OTHER");
336 
337         private String separator;
338 
339         private RequestImportFieldSeparator(String separator) {
340             this.separator = separator;
341         }
342 
343         public String getSeparator() {
344             if (this.equals(COMMA)) {
345                 return ",";
346             }
347             if (this.equals(TAB)) {
348                 return "\t";
349             }
350 
351             return this.toString();
352         }
353 
354     }
355 
356     public enum RequestImportTextFieldDelimiter {
357         QUOTE("QUOTE"), NOTHING("NOTHING"), OTHER("OTHER");
358 
359         private String separator;
360 
361         private RequestImportTextFieldDelimiter(String separator) {
362             this.separator = separator;
363         }
364 
365         public String getDelimiter() {
366             if (this.equals(QUOTE)) {
367                 return "\"";
368             }
369             if (this.equals(NOTHING)) {
370                 return "";
371             }
372 
373             return this.toString();
374         }
375     }
376 
377     // budget construction request move data validation error codes
378     public enum RequestImportErrorCode {
379         DATA_VALIDATION_NO_BUDGETED_ACCOUNT_SUB_ACCOUNT_ERROR_CODE("ACSA", "Error: No budgeted account/sub-account found"), DATA_VALIDATION_ACCOUNT_CLOSED_ERROR_CODE("CLAC", "Error: Account is closed"), DATA_VALIDATION_ACCOUNT_EXPIRED_ERROR_CODE("EXAC", "Error: Account is expired"), DATA_VALIDATION_SUB_ACCOUNT_INVALID_ERROR_CODE("NOSA", "Error: Sub-account is invalid"), DATA_VALIDATION_SUB_ACCOUNT_INACTIVE_ERROR_CODE("INSA", "Error: Sub-account is inactive"), DATA_VALIDATION_OBJECT_TYPE_NULL_ERROR_CODE("NOOB", "Error: Null object code"), DATA_VALIDATION_OBJECT_TYPE_INVALID_ERROR_CODE("NOOB", "Error: Invalid object code"), DATA_VALIDATION_OBJECT_CODE_INACTIVE_ERROR_CODE("INOB", "Error: Inactive object code"), DATA_VALIDATION_SUB_OBJECT_INACTIVE_ERROR_CODE("INSO", "Error: Inactive sub-object code"), DATA_VALIDATION_SUB_OBJECT_INVALID_ERROR_CODE("NOSO", "Error: Invalid sub-object code"), DATA_VALIDATION_NO_WAGE_ACCOUNT_ERROR_CODE("CMPA", "Error: Wage object in no wages account"), DATA_VALIDATION_COMPENSATION_OBJECT_CODE_ERROR_CODE("COMP", "Error: Compensation object code"), UPDATE_ERROR_CODE_MONTHLY_BUDGET_DELETED(
380                 "MNTH", "Warning: Monthly budget deleted"), UPDATE_ERROR_CODE_BUDGET_ACCOUNT_LOCKED("LOCK", "Error: Budgeted account locked"), UPDATE_ERROR_CODE_NO_ACCESS_TO_BUDGET_ACCOUNT("ACCE", "Error: No update access to budgeted account");
381 
382         private String errorCode;
383         private String message;
384 
385         private RequestImportErrorCode(String errorCode, String message) {
386             this.errorCode = errorCode;
387             this.message = message;
388         }
389 
390         public String getErrorCode() {
391             return this.errorCode;
392         }
393 
394         public String getMessage() {
395             return this.message;
396         }
397     }
398 
399     public enum SalaryAdjustmentMeasurement {
400         PERCENT("Percent", "%"), AMOUNT("FlatAmount", "flat");
401 
402         public String measurement;
403         public String label;
404 
405         private SalaryAdjustmentMeasurement(String measurement, String label) {
406             this.measurement = measurement;
407             this.label = label;
408         }
409     }
410 
411     public final static String POSITION_CODE_INACTIVE = "I";
412     public final static String DOCUMENT_TYPE_CODE_ALL = "ALL";
413 
414     public static class LockTypes {
415         public final static String ACCOUNT_LOCK = "account lock";
416         public final static String FUNDING_LOCK = "orphan funding lock";
417         public final static String POSITION_FUNDING_LOCK = "position/funding lock";
418         public final static String POSITION_LOCK = "position lock";
419         public final static String TRANSACTION_LOCK = "transaction lock";
420     }
421 
422     public static final String PICK_LIST_MODE = "pickListMode";
423 
424     public static final BigDecimal ONE_HUNDRED = BigDecimal.valueOf(100);
425 
426     // constants for lock monitor
427     public static final String TEMP_LIST_UNLOCK_METHOD = "unlock";
428     public static final String UNLOCK_BUTTON_NAME = "tinybutton-unlock.gif";
429     public static final String UNLOCK_CONFIRMATION_QUESTION = "UnlockConfirmationQuestion";
430 
431     public static final String SHOW_SALARY_BY_POSITION_ACTION = "showSalaryByPositionAction";
432     public static final String REFRESH_POSITION_BEFORE_SALARY_SETTING = "refreshPositionBeforeSalarySetting";
433     public static final String TEMP_LIST_REFRESH_POSITION_METHOD = "refreshPosition";
434     public static final String REFRESH_POSITION_BUTTON_NAME = "tinybutton-sync.gif";
435 
436     public static final String SHOW_SALARY_BY_INCUMBENT_ACTION = "showSalaryByIncumbentAction";
437     public static final String REFRESH_INCUMBENT_BEFORE_SALARY_SETTING = "refreshIncumbentBeforeSalarySetting";
438     public static final String TEMP_LIST_REFRESH_INCUMBENT_METHOD = "refreshIncumbent";
439     public static final String REFRESH_INCUMBENT_BUTTON_NAME = "tinybutton-sync.gif";
440     public static final String MAPPING_ORGANIZATION_SALARY_SETTING_RETURNING = "organizationSalarySettingReturning";
441     public static final String MAPPING_LOST_SESSION_RETURNING = "lostSessionReturning";
442 
443 
444 
445     public enum LockStatus {
446         SUCCESS, BY_OTHER, NO_DOOR, OPTIMISTIC_EX, FLOCK_FOUND
447     }
448 
449     public static final int maxLockRetry = 20;
450 
451 
452     /* KFSConstants for the budget construction flag names */
453     private static int NUMBER_OF_CTRL_FLAGS = 8;
454 
455     /* state for current year budget construction flags after genesis */
456     private static HashMap<String, String> buildCurrentYear() {
457         HashMap<String, String> mapSLF;
458         mapSLF = new HashMap<String, String>(NUMBER_OF_CTRL_FLAGS, (float) 1.00);
459         mapSLF.put(KFSConstants.BudgetConstructionConstants.BUDGET_ADMINSTRATION_ACTIVE, ParameterValues.YES);
460         mapSLF.put(KFSConstants.BudgetConstructionConstants.BASE_BUDGET_UPDATES_OK, ParameterValues.YES);
461         mapSLF.put(KFSConstants.BudgetConstructionConstants.BUDGET_BATCH_SYNCHRONIZATION_OK, ParameterValues.NO);
462         mapSLF.put(KFSConstants.BudgetConstructionConstants.CSF_UPDATES_OK, ParameterValues.NO);
463         mapSLF.put(KFSConstants.BudgetConstructionConstants.BUDGET_CONSTRUCTION_ACTIVE, ParameterValues.NO);
464         mapSLF.put(KFSConstants.BudgetConstructionConstants.BUDGET_CONSTRUCTION_GENESIS_RUNNING, ParameterValues.NO);
465         mapSLF.put(KFSConstants.BudgetConstructionConstants.BUDGET_CONSTRUCTION_UPDATES_OK, ParameterValues.NO);
466         mapSLF.put(KFSConstants.BudgetConstructionConstants.BUDGET_ON_LINE_SYNCHRONIZATION_OK, ParameterValues.NO);
467         return mapSLF;
468     }
469 
470     public final static HashMap<String, String> CURRENT_FSCL_YR_CTRL_FLAGS = buildCurrentYear();
471 
472     /* state for next year budget construction flags after genesis */
473     private static HashMap<String, String> buildNextYear() {
474         HashMap<String, String> mapSLF;
475         mapSLF = new HashMap<String, String>(NUMBER_OF_CTRL_FLAGS, (float) 1.00);
476         mapSLF.put(KFSConstants.BudgetConstructionConstants.BUDGET_ADMINSTRATION_ACTIVE, ParameterValues.NO);
477         mapSLF.put(KFSConstants.BudgetConstructionConstants.BASE_BUDGET_UPDATES_OK, ParameterValues.NO);
478         mapSLF.put(KFSConstants.BudgetConstructionConstants.BUDGET_BATCH_SYNCHRONIZATION_OK, ParameterValues.YES);
479         mapSLF.put(KFSConstants.BudgetConstructionConstants.CSF_UPDATES_OK, ParameterValues.YES);
480         mapSLF.put(KFSConstants.BudgetConstructionConstants.BUDGET_CONSTRUCTION_ACTIVE, ParameterValues.YES);
481         mapSLF.put(KFSConstants.BudgetConstructionConstants.BUDGET_CONSTRUCTION_GENESIS_RUNNING, ParameterValues.NO);
482         mapSLF.put(KFSConstants.BudgetConstructionConstants.BUDGET_CONSTRUCTION_UPDATES_OK, ParameterValues.NO);
483         mapSLF.put(KFSConstants.BudgetConstructionConstants.BUDGET_ON_LINE_SYNCHRONIZATION_OK, ParameterValues.YES);
484         return mapSLF;
485     }
486 
487     public final static HashMap<String, String> NEXT_FSCL_YR_CTRL_FLAGS_AFTER_GENESIS = buildNextYear();
488 
489     /* constants for the budget construction header */
490     public final static String DEFAULT_BUDGET_HEADER_LOCK_IDS = null;
491     public final static Integer INITIAL_ORGANIZATION_LEVEL_CODE = new Integer(0);
492     public final static String INITIAL_ORGANIZATION_LEVEL_CHART_OF_ACCOUNTS_CODE = null;
493     public final static String INITIAL_ORGANIZATION_LEVEL_ORGANIZATION_CODE = null;
494 
495     /* Budget Construction document type */
496     public final static String BUDGET_CONSTRUCTION_DOCUMENT_TYPE = "BC";
497     public final static String BUDGET_CONSTRUCTION_BEGINNING_BALANCE_DOCUMENT_TYPE = "BCBB";
498     public final static String BUDGET_CONSTRUCTION_DOCUMENT_NAME = "BC";
499     public final static String BUDGET_CONSTRUCTION_DOCUMENT_DESCRIPTION = "Budget Construction";
500     public final static String BUDGET_CONSTRUCTION_DOCUMENT_INITIAL_STATUS = "$";
501     public final static String ORG_REVIEW_RULE_TEMPLATE = "KualiOrgReviewTemplate";
502 
503     /*
504      * initial sizes for hash maps used in genesis supposedly starting the map out with about the right amount of space makes
505      * look-ups more efficient these numbers shouldn't need to be very precise
506      */
507     public final static Integer AVERAGE_REPORTING_TREE_SIZE = 4;
508 
509     /**
510      *  value indicating that a CSF row is Active
511      */
512     public final static String ACTIVE_CSF_DELETE_CODE = "-";
513 
514 
515 
516     /**
517      * enumerate the leave duration code
518      */
519     public enum AppointmentFundingDurationCodes {
520         NONE("NONE", "No Leave"), LWP1("LWP1", "LWOP:  First Semester"), LWP2("LWP2", "LWOP:  Second Semester"), LWPA("LWPA", "LWOP:  10 months"), LWPF("LWPF", "LWOP:  12 months"), LWPH("LWPH", "LWOP:  6 months"), LWPX("LWPX", "LWOP:  ACROSS FISCAL YEARS"), SAB1("SAB1", "Sabbatical Leave:  First Semester"), SAB2("SAB2", "Sabbatical Leave:  Second Semester"), SABA("SABA", "Sabbatical Leave:  Academic Year"), SABF("SABF", "Sabbatical Leave:  12 months"), SABH("SABH", "Sabbatical Leave:  6 months"), SABX("SABX", "Sabbatical Leave:  ACROSS FISCAL YEARS");
521 
522         public String durationCode;
523         public String durationDescription;
524 
525         private AppointmentFundingDurationCodes(String durationCode, String durationDescription) {
526             this.durationCode = durationCode;
527             this.durationDescription = durationDescription;
528         }
529 
530         /**
531          * Gets the durationCode attribute.
532          * @return Returns the durationCode.
533          */
534         public String getDurationCode() {
535             return durationCode;
536         }
537 
538         /**
539          * Gets the durationDescription attribute.
540          * @return Returns the durationDescription.
541          */
542         public String getDurationDescription() {
543             return durationDescription;
544         }
545     }
546 
547     public class EditModes {
548         public static final String SYSTEM_VIEW_ONLY = "systemViewOnly";
549     }
550 
551     public class KimApiConstants {
552         public static final String BC_PROCESSOR_ROLE_NAME = "Processor";
553         public static final String USE_ORG_SALARY_SETTING_PERMISSION_NAME = "Use Organization Salary Setting";
554         public static final String EDIT_BCAF_PERMISSION_NAME = "Edit Appointment Funding";
555         public static final String VIEW_BCAF_AMOUNTS_PERMISSION_NAME = "View Appointment Funding Amounts";
556         public static final String IMPORT_EXPORT_PAYRATE_PERMISSION_NAME = "Import / Export Payrate";
557         public static final String UNLOCK_PERMISSION_NAME = "Unlock";
558         public static final String DOCUMENT_VIEWER_ROLE_NAME = "Document Viewer";
559         public static final String DOCUMENT_EDITOR_ROLE_NAME = "Document Editor";
560     }
561 
562     /**
563      * enumerate the synchronization check type
564      */
565     public enum SynchronizationCheckType {
566         NONE("NONE", "No Sync Check"), POSN("POSN", "Snyc by Position"), EID("EID", "Snyc by Employee"), ALL("ALL", "Snyc by Position and Employee");
567 
568         public String typeCode;
569         public String typeDescription;
570 
571         private SynchronizationCheckType(String typeCode, String typeDescription) {
572             this.typeCode = typeCode;
573             this.typeDescription = typeDescription;
574         }
575     }
576 
577     public class ErrorKey {
578         public static final String DETAIL_SALARY_SETTING_TAB_ERRORS = "newBCAFLine*,budgetConstructionIntendedIncumbent.pendingBudgetConstructionAppointmentFunding*,budgetConstructionPosition.pendingBudgetConstructionAppointmentFunding*";
579         public static final String QUICK_SALARY_SETTING_TAB_ERRORS = "salarySettingExpansion*,salarySettingExpansion.pendingBudgetConstructionAppointmentFunding*,adjustment*,newBCAFLine*";
580         public static final String RETURNED_DETAIL_SALARY_SETTING_TAB_ERRORS = "newBCAFLine*";
581         public static final String ORGANIZATION_REPORTS_SELECTION_ERRORS = "budgetConstructionReportThresholdSettings*";
582     }
583 }