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;
017    
018    import java.util.ArrayList;
019    import java.util.HashMap;
020    import java.util.List;
021    import java.util.Map;
022    
023    import org.apache.commons.lang.StringUtils;
024    import org.kuali.kfs.gl.businessobject.OriginEntryFull;
025    import org.kuali.kfs.module.ld.businessobject.LaborOriginEntry;
026    import org.kuali.kfs.sys.KFSConstants;
027    import org.kuali.kfs.sys.KFSPropertyConstants;
028    import org.kuali.kfs.sys.context.SpringContext;
029    import org.kuali.kfs.sys.service.impl.KfsParameterConstants;
030    import org.kuali.rice.kns.datadictionary.AttributeDefinition;
031    import org.kuali.rice.kns.service.DataDictionaryService;
032    import org.kuali.rice.kns.service.ParameterService;
033    
034    /**
035     * Global constancts for labor distribution.
036     */
037    public class LaborConstants {
038        public static class BalanceInquiries {
039            public static final String ANNUAL_BALANCE = "ACLN_ANNL_BAL_AMT";
040            public static final String BALANCE_TYPE_AC_AND_A21 = "AC&A2";
041            public static final String CONTRACT_GRANT_BB_AMOUNT = "CONTR_GR_BB_AC_AMT";
042            public static final String EMPLOYEE_FUNDING_EXPENSE_OBJECT_TYPE_CODE = "ES";
043            public static final String EMPLOYEE_FUNDING_NORMAL_OP_EXPENSE_OBJECT_TYPE_CODE = "EX";
044            public static final int laborHighValueObjectCode = 5000;
045            public static final int laborLowValueObjectCode = 2000;
046            public static final String LEDGER_ENTRY_LOOKUPABLE_FOR_EXPENSE_TRANSFER = "laborLedgerEntryForExpenseTransferLookupable";
047            public static final String UnknownPersonName = "* Unknown Name *";
048        }
049    
050        public static class ColumnNames {
051            public static final String UNIVERSITY_FISCAL_YEAR = "UNIV_FISCAL_YR";
052            public static final String TRANSACTION_LEDGER_ENTRY_AMOUNT = "TRN_LDGR_ENTR_AMT";
053            public static final String POSITION_NUMBER = "POSITION_NBR";
054            public static final String EMPLOYEE_IDENTIFIER = "EMPLID";
055        }
056    
057        public static class BenefitExpenseTransfer {
058            public static final String LABOR_LEDGER_BENEFIT_CODE = "F";
059        }
060    
061        public static class DestinationNames {
062            public static final String LABOR_GL_ENTRY = "LD_LBR_GL_ENTRY_T";
063            public static final String LEDGER_BALANCE = "LD_LDGR_BAL_T";
064            public static final String LEDGER_ENRTY = "LD_LDGR_ENTR_T";
065            public static final String ORIGN_ENTRY = "LD_LBR_ORIGIN_ENTRY_T";
066        }
067    
068        public enum JournalVoucherOffsetType {
069            ACCRUAL("LJVA", "Accrual", "LLJV ACCRUALS OFFSET"), CASH("LJVC", "Cash", "LLJV CASH OFFSET"), ENCUMBRANCE("LJVE", "Encumbrance", "LLJV ENCUMBRANCE OFFSET"), NO_OFFSET("LLJV", "No Offset", "LABOR LEDGER JOUNAL VOUCHER");
070    
071            public String description;
072            public String longDescription;
073            public String typeCode;
074    
075            private JournalVoucherOffsetType(String typeCode, String description, String longDescription) {
076                this.typeCode = typeCode;
077                this.description = description;
078                this.longDescription = longDescription;
079            }
080        }
081    
082        public static class LookupableBeanKeys {
083            static final public String CSF_TRACKER = "laborCalculatedSalaryFoundationTrackerLookupable";
084            static final public String PENDING_ENTRY = "laborPendingEntryLookupable";
085        }
086    
087        public static class ParameterGroups {
088            public static final String PAYROLL_ACCRUAL = "Labor.PayrollAccrual";
089            public static final String POSTER = "Labor.Poster";
090            public static final String YEAR_END = "Labor.YearEnd";
091        }
092    
093        public static class Poster {
094            public static final String BALANCE_TYPES_NOT_PROCESSED = "SENT_TO_GL_BALANCE_TYPES";
095            public static final String PERIOD_CODES_NOT_PROCESSED = "SENT_TO_GL_PERIOD_CODES";
096        }
097    
098        public static class Balancing {
099            public static final String NUMBER_OF_PAST_FISCAL_YEARS_TO_INCLUDE = "NUMBER_OF_PAST_FISCAL_YEARS_TO_INCLUDE";
100            public static final String NUMBER_OF_COMPARISON_FAILURES_TO_PRINT_PER_REPORT = "NUMBER_OF_COMPARISON_FAILURES_TO_PRINT_PER_REPORT";
101        }
102    
103        public static class SalaryExpenseTransfer {
104            public static final String BENEFIT_CLEARING_ACCOUNT_PARM_NM = "BENEFIT_CLEARING_ACCOUNT_NUMBER";
105            public static final String BENEFIT_CLEARING_CHART_PARM_NM = "BENEFIT_CLEARING_CHART_OF_ACCOUNTS";
106            public static final String LABOR_LEDGER_SALARY_CODE = "S";
107            public static final String EFFORT_VALIDATION_OVERRIDE_QUESTION = "EffortValidationOverrideQuestion";
108            public static final String VALIDATE_AGAINST_EFFORT_PARM_NM = "VALIDATE_AGAINST_EFFORT_CERTIFICATION_IND";
109        }
110    
111        public static class Scrubber {
112            public static final String ACCOUNT_FRINGE_EXCLUSION_PARAMETER = "ACCOUNTS_NOT_ACCEPTING_FRINGES_IND";
113            public static final String CONTINUATION_ACCOUNT_LOGIC_PARAMETER = "CONTINUATION_ACCOUNT_LOGIC_IND";
114            public static final String SUBFUND_WAGE_EXCLUSION_PARAMETER = "SUB_FUND_GROUPS_NOT_ACCEPTING_WAGES_IND";
115            public static final String SUSPENSE_ACCOUNT_LOGIC_PARAMETER = "SUSPENSE_ACCOUNT_LOGIC_IND";
116            public static final String SUSPENSE_ACCOUNT = "SUSPENSE_ACCOUNT";
117            public static final String SUSPENSE_CHART = "SUSPENSE_CHART";
118            public static final String SUSPENSE_SUB_ACCOUNT = "SUSPENSE_SUB_ACCOUNT";
119            public static final String CLOSED_FISCAL_PERIOD_BYPASS_BALANCE_TYPES = "CLOSED_FISCAL_PERIOD_BYPASS_BALANCE_TYPES";
120            public static final String CONTINUATION_ACCOUNT_BYPASS_ORIGINATION_CODES = "CONTINUATION_ACCOUNT_BYPASS_ORIGINATIONS";
121            public static final String CONTINUATION_ACCOUNT_BYPASS_DOCUMENT_TYPE_CODES = "CONTINUATION_ACCOUNT_BYPASS_DOCUMENT_TYPES";
122            public static final String NON_FRINGE_ACCOUNT_BYPASS_ORIGINATIONS = "NON_FRINGE_ACCOUNT_BYPASS_ORIGINATIONS";
123            public static final String NON_WAGE_SUB_FUND_BYPASS_ORIGINATIONS = "NON_WAGE_SUB_FUND_BYPASS_ORIGINATIONS";
124        }
125    
126        public static class BatchFileSystem {
127            static final public String EXTENSION = ".data";
128            static final public String DONE_FILE_EXTENSION = ".done"; 
129    
130            static final public String NIGHTLY_OUT_FILE = "ld_labentry_kfs";
131            static final public String BACKUP_FILE = "ld_ldbackup";
132            static final public String PRE_SCRUBBER_FILE = "ld_prescrub";
133            static final public String SCRUBBER_INPUT_FILE = "ld_sortscrb";
134    
135            static final public String SCRUBBER_VALID_OUTPUT_FILE = "ld_scrbout1";
136            static final public String SCRUBBER_ERROR_OUTPUT_FILE = "ld_scrberr1";
137            static final public String SCRUBBER_EXPIRED_OUTPUT_FILE = "ld_expaccts";
138    
139            static final public String SCRUBBER_ERROR_SORTED_FILE = "ld_sorterr1";
140            static final public String DEMERGER_VAILD_OUTPUT_FILE = "ld_scrbout2";
141            static final public String DEMERGER_ERROR_OUTPUT_FILE = "ld_scrberr2";
142    
143            static final public String POSTER_INPUT_FILE = "ld_sortpost";
144            static final public String POSTER_VALID_OUTPUT_FILE = "ld_postout";
145            static final public String POSTER_ERROR_OUTPUT_FILE = "ld_posterrs";
146    
147            static final public String LABOR_GL_ENTRY_FILE = "gl_glentry_lab";
148            static final public String BALANCE_FORWARDS_FILE = "ld_balance_forwards";
149            static final public String LABOR_ENTERPRISE_FEED = "ld_ldentry_entp";
150        }
151    
152        public static class TransactionGeneratorNames {
153            public static final String BENEFIT_ACCRUAL = "BENEFIT ACCRUAL";
154            public static final String BENEFIT_REVERSAL = "BENEFIT REVERSAL";
155            public static final String DISENCUMBRANCE = "DISENCUMBRANCE";
156            public static final String ENCUMBRANCE = "ENCUMBRANCE";
157            public static final String SALARY_ACCRUAL = "SALARY ACCRUAL";
158            public static final String SALARY_REVERSAL = "SALARY REVERSAL";
159        }
160    
161        public static class YearEnd {
162            public static final String FUND_GROUP_PROCESSED = "FUND_GROUPS";
163            public static final String OLD_FISCAL_YEAR = "FISCAL_YEAR_SELECTION";
164            public static final String ORIGINATION_CODE = "ORIGINATION";
165            public static final String SUB_FUND_GROUP_PROCESSED = "SUB_FUND_GROUPS";
166        }
167    
168        public static class PurgeJob {
169            public static final String PURGE_LEDGER_BALANCE_YEAR = "PRIOR_TO_YEAR";
170            public static final String PURGE_LEDGER_ENTRY_YEAR = "PRIOR_TO_YEAR";
171        }
172        
173        public static final String BASE_FUNDS_LOOKUP_HELPER_SRVICE_NAME = "BaseFundsLookupableHelperService";
174    
175        public static final String CSF_TRACKER_LOOKUP_HELPER_SRVICE_NAME = "laborCalculatedSalaryFoundationTrackerLookupableHelperService";
176    
177        public static final String CURRENT_FUNDS_LOOKUP_HELPER_SRVICE_NAME = "CurrentFundsLookupableHelperService";
178        public static final String DASHES_DELETE_CODE = "-";
179    
180        public static final String DOCUMENT_EMPLOYEE_ID_ERRORS = "document.emplid";
181        public static final String EMPLOYEE_LOOKUP_ERRORS = "document.employeeLookups";
182        public static final String EXPENSE_TRANSFER_ACCOUNTING_LINE_SERVIOCE_NAME = "expenseTransferAccountingLineService";
183        public static final String LABOR_INQUIRY_OPTIONS_SERVICE = "laborInquiryOptionsService";
184        public static final int LLCP_MAX_LENGTH = 294;
185        public static final String LONG_ROW_TABLE_INRUIRY_ACTION = "laborLongRowTableInquiry.do";
186        public static final Map<String, String> periodCodeMapping = new HashMap<String, String>();
187        private static String SPACE_TRANSACTION_DATE = null;
188    
189        static {
190            periodCodeMapping.put(KFSPropertyConstants.MONTH1_AMOUNT, KFSConstants.MONTH1);
191            periodCodeMapping.put(KFSPropertyConstants.MONTH2_AMOUNT, KFSConstants.MONTH2);
192            periodCodeMapping.put(KFSPropertyConstants.MONTH3_AMOUNT, KFSConstants.MONTH3);
193            periodCodeMapping.put(KFSPropertyConstants.MONTH4_AMOUNT, KFSConstants.MONTH4);
194            periodCodeMapping.put(KFSPropertyConstants.MONTH5_AMOUNT, KFSConstants.MONTH5);
195            periodCodeMapping.put(KFSPropertyConstants.MONTH6_AMOUNT, KFSConstants.MONTH6);
196            periodCodeMapping.put(KFSPropertyConstants.MONTH7_AMOUNT, KFSConstants.MONTH7);
197            periodCodeMapping.put(KFSPropertyConstants.MONTH8_AMOUNT, KFSConstants.MONTH8);
198            periodCodeMapping.put(KFSPropertyConstants.MONTH9_AMOUNT, KFSConstants.MONTH9);
199            periodCodeMapping.put(KFSPropertyConstants.MONTH10_AMOUNT, KFSConstants.MONTH10);
200            periodCodeMapping.put(KFSPropertyConstants.MONTH11_AMOUNT, KFSConstants.MONTH11);
201            periodCodeMapping.put(KFSPropertyConstants.MONTH12_AMOUNT, KFSConstants.MONTH12);
202            periodCodeMapping.put(KFSPropertyConstants.MONTH13_AMOUNT, KFSConstants.MONTH13);
203        }
204    
205        public static List<String> consolidationAttributesOfOriginEntry() {
206            List<String> consolidationAttributes = new ArrayList<String>();
207    
208            consolidationAttributes.add(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR);
209            consolidationAttributes.add(KFSPropertyConstants.UNIVERSITY_FISCAL_PERIOD_CODE);
210    
211            consolidationAttributes.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
212            consolidationAttributes.add(KFSPropertyConstants.ACCOUNT_NUMBER);
213            consolidationAttributes.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER);
214    
215            consolidationAttributes.add(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE);
216            consolidationAttributes.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE);
217            consolidationAttributes.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE);
218            consolidationAttributes.add(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE);
219    
220            consolidationAttributes.add(KFSPropertyConstants.FINANCIAL_DOCUMENT_TYPE_CODE);
221            consolidationAttributes.add(KFSPropertyConstants.DOCUMENT_NUMBER);
222            consolidationAttributes.add(KFSPropertyConstants.ORGANIZATION_DOCUMENT_NUMBER);
223    
224            consolidationAttributes.add(KFSPropertyConstants.FINANCIAL_SYSTEM_ORIGINATION_CODE);
225            consolidationAttributes.add(KFSPropertyConstants.PROJECT_CODE);
226            consolidationAttributes.add(KFSPropertyConstants.ORGANIZATION_REFERENCE_ID);
227            consolidationAttributes.add(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_DESC);
228    
229            // Reference Document Type, Reference Origin Code, Reference Document Number, Reversal Date, and Encumbrance Update Code.
230            consolidationAttributes.add(KFSPropertyConstants.REFERENCE_FINANCIAL_DOCUMENT_TYPE_CODE);
231            consolidationAttributes.add(KFSPropertyConstants.REFERENCE_FINANCIAL_SYSTEM_ORIGINATION_CODE);
232            consolidationAttributes.add(KFSPropertyConstants.REFERENCE_FINANCIAL_DOCUMENT_NUMBER);
233            consolidationAttributes.add(KFSPropertyConstants.FINANCIAL_DOCUMENT_REVERSAL_DATE);
234            consolidationAttributes.add(KFSPropertyConstants.TRANSACTION_ENCUMBRANCE_UPDT_CD);
235    
236            consolidationAttributes.add(KFSPropertyConstants.TRANSACTION_DEBIT_CREDIT_CODE);
237            consolidationAttributes.add(KFSPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT);
238    
239            return consolidationAttributes;
240        }
241    
242        public static String getSpaceTransactionDate() {
243            if (SPACE_TRANSACTION_DATE == null) {
244                SPACE_TRANSACTION_DATE = StringUtils.rightPad("", SpringContext.getBean(DataDictionaryService.class).getAttributeSize(OriginEntryFull.class, KFSPropertyConstants.TRANSACTION_DATE), ' ');
245            }
246            return SPACE_TRANSACTION_DATE;
247        }
248    
249        public static final String ANNUAL_CLOSING_DOCUMENT_TYPE_CODE = getAnnualClosingDocumentType();
250    
251        private static String getAnnualClosingDocumentType() {
252            return SpringContext.getBean(ParameterService.class).getParameterValue(KfsParameterConstants.GENERAL_LEDGER_BATCH.class, KFSConstants.SystemGroupParameterNames.GL_ANNUAL_CLOSING_DOC_TYPE);
253        }
254    
255        public static final String[] ACCOUNT_FIELDS = { KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, KFSPropertyConstants.ACCOUNT_NUMBER };
256    
257        public static final String LABOR_OBJECT_SALARY_CODE = "S";
258    
259        private static String DASH_POSITION_NUMBER = null;
260    
261        public static String getDashPositionNumber() {
262            if (DASH_POSITION_NUMBER == null) {
263                DASH_POSITION_NUMBER = StringUtils.rightPad("", SpringContext.getBean(DataDictionaryService.class).getAttributeMaxLength(LaborOriginEntry.class, KFSPropertyConstants.POSITION_NUMBER), '-');
264            }
265            return DASH_POSITION_NUMBER;
266        }
267    
268        private static String DASH_EMPLID = null;
269    
270        public static String getDashEmplId() {
271            if (DASH_EMPLID == null) {
272                DASH_EMPLID = StringUtils.rightPad("", SpringContext.getBean(DataDictionaryService.class).getAttributeMaxLength(LaborOriginEntry.class, KFSPropertyConstants.EMPLID), '-');
273            }
274            return DASH_EMPLID;
275        }
276    
277        public static String getSpaceAllLaborOriginEntryFields() {
278    
279            List<AttributeDefinition> attributes = SpringContext.getBean(DataDictionaryService.class).getDataDictionary().getBusinessObjectEntry(LaborOriginEntry.class.getName()).getAttributes();
280            int totalLength = 0;
281            for (AttributeDefinition attributeDefinition : attributes) {
282                if (!(KFSPropertyConstants.ENTRY_GROUP_ID.equals(attributeDefinition.getName()) || KFSPropertyConstants.ENTRY_ID.equals(attributeDefinition.getName()))) {
283                    totalLength += attributeDefinition.getMaxLength();
284                }
285            }
286    
287            return StringUtils.rightPad("", totalLength, ' ');
288        }
289    
290    
291        public static final String LABOR_MODULE_CODE = "KFS-LD";
292    
293        public static class PermissionNames {
294            public static final String OVERRIDE_TRANSFER_IMPACTING_EFFORT_CERTIFICATION = "Override Transfer Impacting Open Effort Certification";
295        }
296    }