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.gl.batch; 017 018 import java.sql.Date; 019 import java.text.DateFormat; 020 import java.text.ParseException; 021 import java.text.SimpleDateFormat; 022 import java.util.HashMap; 023 import java.util.Map; 024 025 import org.kuali.kfs.gl.GeneralLedgerConstants; 026 import org.kuali.kfs.gl.batch.service.YearEndService; 027 import org.kuali.kfs.gl.service.OriginEntryGroupService; 028 import org.kuali.kfs.sys.batch.AbstractWrappedBatchStep; 029 import org.kuali.kfs.sys.batch.service.WrappedBatchExecutorService.CustomBatchExecutor; 030 import org.kuali.kfs.sys.service.impl.KfsParameterConstants; 031 import org.springframework.util.StopWatch; 032 033 /** 034 * A step to run the year end process of forwarding encumbrances into the next fiscal year 035 */ 036 public class EncumbranceForwardStep extends AbstractWrappedBatchStep { 037 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(EncumbranceForwardStep.class); 038 private YearEndService yearEndService; 039 040 public static final String TRANSACTION_DATE_FORMAT_STRING = "yyyy-MM-dd"; 041 042 /** 043 * @see org.kuali.kfs.sys.batch.AbstractWrappedBatchStep#getCustomBatchExecutor() 044 */ 045 @Override 046 protected CustomBatchExecutor getCustomBatchExecutor() { 047 return new CustomBatchExecutor() { 048 /** 049 * This step runs the forward encumbrance process, including retrieving the parameters needed to run the job, creating the 050 * origin entry group where output origin entries will go, and having the job's reports generated. 051 * 052 * @return true if the step completed successfully, false if otherwise 053 * @see org.kuali.kfs.sys.batch.Step#performStep() 054 */ 055 public boolean execute() { 056 StopWatch stopWatch = new StopWatch(); 057 stopWatch.start("EncumbranceForwardStep"); 058 059 Map jobParameters = new HashMap(); 060 Integer varFiscalYear = null; 061 Date varTransactionDate = null; 062 063 String FIELD_FISCAL_YEAR = GeneralLedgerConstants.ColumnNames.UNIVERSITY_FISCAL_YEAR; 064 String FIELD_TRANSACTION_DATE = GeneralLedgerConstants.ColumnNames.TRANSACTION_DT; 065 066 // Get the current fiscal year. 067 varFiscalYear = new Integer(getParameterService().getParameterValue(KfsParameterConstants.GENERAL_LEDGER_BATCH.class, GeneralLedgerConstants.ANNUAL_CLOSING_FISCAL_YEAR_PARM)); 068 069 // Get the current date (transaction date). 070 try { 071 DateFormat transactionDateFormat = new SimpleDateFormat(TRANSACTION_DATE_FORMAT_STRING); 072 varTransactionDate = new Date(transactionDateFormat.parse(getParameterService().getParameterValue(KfsParameterConstants.GENERAL_LEDGER_BATCH.class, GeneralLedgerConstants.ANNUAL_CLOSING_TRANSACTION_DATE_PARM)).getTime()); 073 } 074 catch (ParseException pe) { 075 LOG.error("Failed to parse TRANSACTION_DT from kualiConfigurationService"); 076 throw new RuntimeException("Unable to get transaction date from kualiConfigurationService", pe); 077 } 078 079 jobParameters.put(GeneralLedgerConstants.ColumnNames.UNIVERSITY_FISCAL_YEAR, varFiscalYear); 080 jobParameters.put(GeneralLedgerConstants.ColumnNames.UNIV_DT, varTransactionDate); 081 082 String encumbranceForwardFileName = GeneralLedgerConstants.BatchFileSystem.ENCUMBRANCE_FORWARD_FILE + GeneralLedgerConstants.BatchFileSystem.EXTENSION; 083 Map<String, Integer> forwardEncumbranceCounts = new HashMap<String, Integer>(); 084 085 yearEndService.forwardEncumbrances(encumbranceForwardFileName, jobParameters, forwardEncumbranceCounts); 086 087 stopWatch.stop(); 088 LOG.info("EncumbranceForwardStep took " + (stopWatch.getTotalTimeSeconds() / 60.0) + " minutes to complete"); 089 090 return true; 091 } 092 }; 093 } 094 095 /** 096 * Sets the yearEndService attribute, allowing the injection of an implementation of that service 097 * 098 * @param yearEndService the yearEndService to set 099 * @see org.kuali.module.gl.service.YearEndService 100 */ 101 public void setYearEndService(YearEndService yearEndService) { 102 this.yearEndService = yearEndService; 103 } 104 }