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.service.impl; 017 018 import java.io.File; 019 import java.text.ParseException; 020 import java.text.SimpleDateFormat; 021 import java.util.HashMap; 022 import java.util.Map; 023 024 import org.kuali.kfs.coa.businessobject.OrganizationReversion; 025 import org.kuali.kfs.coa.service.OrganizationReversionService; 026 import org.kuali.kfs.coa.service.PriorYearAccountService; 027 import org.kuali.kfs.gl.GeneralLedgerConstants; 028 import org.kuali.kfs.gl.batch.service.OrganizationReversionCategoryLogic; 029 import org.kuali.kfs.gl.batch.service.OrganizationReversionProcess; 030 import org.kuali.kfs.gl.batch.service.OrganizationReversionProcessService; 031 import org.kuali.kfs.gl.batch.service.OrganizationReversionUnitOfWorkService; 032 import org.kuali.kfs.gl.service.BalanceService; 033 import org.kuali.kfs.gl.service.OriginEntryService; 034 import org.kuali.kfs.sys.KFSConstants; 035 import org.kuali.kfs.sys.KFSKeyConstants; 036 import org.kuali.kfs.sys.context.SpringContext; 037 import org.kuali.kfs.sys.service.ReportWriterService; 038 import org.kuali.kfs.sys.service.impl.KfsParameterConstants; 039 import org.kuali.rice.kns.service.DateTimeService; 040 import org.kuali.rice.kns.service.KualiConfigurationService; 041 import org.kuali.rice.kns.service.ParameterService; 042 import org.kuali.rice.kns.service.PersistenceService; 043 import org.springframework.transaction.annotation.Transactional; 044 045 /** 046 * The base implementation of OrganizationReversionProcessService 047 */ 048 @Transactional 049 public class OrganizationReversionProcessServiceImpl implements OrganizationReversionProcessService { 050 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OrganizationReversionProcessServiceImpl.class); 051 052 private static final String ORGANIZATION_REVERSION_PRIOR_YEAR_ACCOUNT_PROCESS_BEAN_NAME = "glOrganizationReversionPriorYearAccountProcess"; 053 private static final String ORGANIZATION_REVERSION_CURRENT_YEAR_ACCOUNT_PROCESS_BEAN_NAME = "glOrganizationReversionCurrentYearAccountProcess"; 054 055 private static final String DATE_FORMAT = "yyyy-MM-dd"; 056 057 private ReportWriterService organizationReversionReportWriterService; 058 private ParameterService parameterService; 059 private KualiConfigurationService configurationService; 060 061 /** 062 * Gets the organizationReversionReportWriterService attribute. 063 * @return Returns the organizationReversionReportWriterService. 064 */ 065 public ReportWriterService getOrganizationReversionReportWriterService() { 066 return organizationReversionReportWriterService; 067 } 068 069 /** 070 * Sets the organizationReversionReportWriterService attribute value. 071 * @param organizationReversionReportWriterService The organizationReversionReportWriterService to set. 072 */ 073 public void setOrganizationReversionReportWriterService(ReportWriterService organizationReversionReportWriterService) { 074 this.organizationReversionReportWriterService = organizationReversionReportWriterService; 075 } 076 077 /** 078 * Runs the Organization Reversion Year End Process for the end of a fiscal year (ie, a process that 079 * runs before the fiscal year end, and thus uses current account, etc.) 080 * 081 * @param outputGroup the origin entry group that this process should save entries to 082 * @param jobParameters the parameters used in the process 083 * @param organizationReversionCounts a Map of named statistics generated by running the process 084 * @see org.kuali.kfs.gl.batch.service.OrganizationReversionProcessService#organizationReversionProcessEndOfYear(org.kuali.kfs.gl.businessobject.OriginEntryGroup, java.util.Map, java.util.Map) 085 */ 086 public void organizationReversionPriorYearAccountProcess(Map jobParameters, Map<String, Integer> organizationReversionCounts) { 087 if (LOG.isDebugEnabled()) { 088 LOG.debug("organizationReversionProcessEndOfYear() started"); 089 } 090 OrganizationReversionProcess orp = SpringContext.getBean(OrganizationReversionProcess.class,OrganizationReversionProcessServiceImpl.ORGANIZATION_REVERSION_PRIOR_YEAR_ACCOUNT_PROCESS_BEAN_NAME); 091 092 orp.organizationReversionProcess(jobParameters, organizationReversionCounts); 093 094 writeReports(orp, jobParameters, organizationReversionCounts); 095 } 096 097 /** 098 * Organization Reversion Year End Process for the beginning of a fiscal year (ie, the process as it runs 099 * after the fiscal year end, thus using prior year account, etc.) 100 * 101 * @param jobParameters the parameters used in the process 102 * @param organizationReversionCounts a Map of named statistics generated by running the process 103 * @see org.kuali.kfs.gl.batch.service.OrganizationReversionProcessService#organizationReversionProcessBeginningOfYear(org.kuali.kfs.gl.businessobject.OriginEntryGroup, java.util.Map, java.util.Map) 104 */ 105 public void organizationReversionCurrentYearAccountProcess(Map jobParameters, Map<String, Integer> organizationReversionCounts) { 106 if (LOG.isDebugEnabled()) { 107 LOG.debug("organizationReversionProcessEndOfYear() started"); 108 } 109 OrganizationReversionProcess orp = SpringContext.getBean(OrganizationReversionProcess.class,OrganizationReversionProcessServiceImpl.ORGANIZATION_REVERSION_CURRENT_YEAR_ACCOUNT_PROCESS_BEAN_NAME); 110 111 LOG.info("processing organization reversions for current year accounts"); 112 orp.organizationReversionProcess(jobParameters, organizationReversionCounts); 113 114 writeReports(orp, jobParameters, organizationReversionCounts); 115 } 116 117 /** 118 * Returns a Map with the properly initialized parameters for an organization reversion job that is about to run 119 * @return a Map holding parameters for the job 120 * @see org.kuali.kfs.gl.batch.service.OrganizationReversionProcessService#getJobParameters() 121 */ 122 public Map getJobParameters() { 123 // Get job parameters 124 Map jobParameters = new HashMap(); 125 String strTransactionDate = getParameterService().getParameterValue(KfsParameterConstants.GENERAL_LEDGER_BATCH.class, GeneralLedgerConstants.ANNUAL_CLOSING_TRANSACTION_DATE_PARM); 126 jobParameters.put(KFSConstants.UNALLOC_OBJECT_CD, getParameterService().getParameterValue(OrganizationReversion.class, GeneralLedgerConstants.OrganizationReversionProcess.UNALLOC_OBJECT_CODE_PARM)); 127 jobParameters.put(KFSConstants.BEG_BUD_CASH_OBJECT_CD, getParameterService().getParameterValue(OrganizationReversion.class, GeneralLedgerConstants.OrganizationReversionProcess.CARRY_FORWARD_OBJECT_CODE)); 128 jobParameters.put(KFSConstants.FUND_BAL_OBJECT_CD, getParameterService().getParameterValue(KfsParameterConstants.GENERAL_LEDGER_BATCH.class, GeneralLedgerConstants.ANNUAL_CLOSING_FUND_BALANCE_OBJECT_CODE_PARM)); 129 String strUniversityFiscalYear = getParameterService().getParameterValue(KfsParameterConstants.GENERAL_LEDGER_BATCH.class, GeneralLedgerConstants.ANNUAL_CLOSING_FISCAL_YEAR_PARM); 130 131 try { 132 SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); 133 java.util.Date jud = sdf.parse(strTransactionDate); 134 jobParameters.put(KFSConstants.TRANSACTION_DT, new java.sql.Date(jud.getTime())); 135 } 136 catch (ParseException e) { 137 throw new IllegalArgumentException("TRANSACTION_DT is an invalid date"); 138 } 139 try { 140 jobParameters.put(KFSConstants.UNIV_FISCAL_YR, new Integer(strUniversityFiscalYear)); 141 } 142 catch (NumberFormatException nfe) { 143 throw new IllegalArgumentException("UNIV_FISCAL_YR is an invalid year"); 144 } 145 return jobParameters; 146 } 147 148 /** 149 * 150 * @param organizationReversionProcess 151 * @param jobParameters 152 * @param counts 153 */ 154 public void writeReports(OrganizationReversionProcess organizationReversionProcess, Map jobParameters, Map<String, Integer> counts) { 155 // write job parameters 156 for (Object jobParameterKeyAsObject : jobParameters.keySet()) { 157 if (jobParameterKeyAsObject != null) { 158 final String jobParameterKey = jobParameterKeyAsObject.toString(); 159 getOrganizationReversionReportWriterService().writeParameterLine("%32s %10s", jobParameterKey, jobParameters.get(jobParameterKey)); 160 } 161 } 162 163 // write statistics 164 getOrganizationReversionReportWriterService().writeStatisticLine("NUMBER OF GLBL RECORDS READ....: %10d", counts.get("balancesRead")); 165 getOrganizationReversionReportWriterService().writeStatisticLine("NUMBER OF GLBL RECORDS SELECTED: %10d", counts.get("balancesSelected")); 166 getOrganizationReversionReportWriterService().writeStatisticLine("NUMBER OF SEQ RECORDS WRITTEN..: %10d", counts.get("recordsWritten")); 167 getOrganizationReversionReportWriterService().pageBreak(); 168 169 // write ledger report 170 getOrganizationReversionReportWriterService().writeSubTitle(getConfigurationService().getPropertyString(KFSKeyConstants.MESSAGE_REPORT_YEAR_END_ORGANIZATION_REVERSION_LEDGER_TITLE_LINE)); 171 organizationReversionProcess.writeLedgerSummaryReport(getOrganizationReversionReportWriterService()); 172 } 173 174 /** 175 * Sets the implementation of ParameterService to use 176 * @param parameterService an implementation of ParameterService 177 */ 178 public void setParameterService(ParameterService parameterService) { 179 this.parameterService = parameterService; 180 } 181 182 /** 183 * Sets the implementation of the KualiConfigurationService to use 184 * @param configurationService an implementation of the KualiConfigurationService 185 */ 186 public void setConfigurationService(KualiConfigurationService configurationService) { 187 this.configurationService = configurationService; 188 } 189 190 /** 191 * Gets the parameterService attribute. 192 * @return Returns the parameterService. 193 */ 194 public ParameterService getParameterService() { 195 return parameterService; 196 } 197 198 /** 199 * Gets the configurationService attribute. 200 * @return Returns the configurationService. 201 */ 202 public KualiConfigurationService getConfigurationService() { 203 return configurationService; 204 } 205 }