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.endow.batch.service.impl; 017 018 import java.util.Collection; 019 import java.util.Date; 020 021 import org.kuali.kfs.module.endow.batch.service.UpdateHistoryCashService; 022 import org.kuali.kfs.module.endow.businessobject.KemidCurrentCash; 023 import org.kuali.kfs.module.endow.businessobject.KemidHistoricalCash; 024 import org.kuali.kfs.module.endow.businessobject.MonthEndDate; 025 import org.kuali.kfs.module.endow.document.service.KEMService; 026 import org.kuali.kfs.module.endow.document.service.MonthEndDateService; 027 import org.kuali.kfs.module.endow.util.ValidateLastDayOfMonth; 028 import org.kuali.rice.kns.service.BusinessObjectService; 029 import org.kuali.rice.kns.util.KualiInteger; 030 031 032 public class UpdateHistoryCashServiceImpl implements UpdateHistoryCashService { 033 protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(UpdateHistoryCashServiceImpl.class); 034 035 private KEMService kemService; 036 private BusinessObjectService businessObjectService; 037 private MonthEndDateService monthEndDateService; 038 039 /** 040 * @see org.kuali.kfs.module.endow.batch.service.UpdateHistoryCashService#updateHistoryCash() 041 */ 042 public boolean updateHistoryCash() { 043 Date currentDate = kemService.getCurrentDate(); 044 if (ValidateLastDayOfMonth.validateLastDayOfMonth(currentDate)){ 045 //Append a new record to the END_ME_DT_T TABLE 046 KualiInteger monthEndDateId = appendNewMonthEndDate(currentDate); 047 LOG.info("UpdateHistoryCash batch process has appended "+monthEndDateId+":"+currentDate+" to END_ME_DT_T table."); 048 //Append the records in the END_CRNT_CSH_T table to the END_HIST_CSH_T table 049 return appendNewHistoricalCashRecords(monthEndDateId); 050 } 051 else { 052 LOG.info(currentDate+" is NOT the last day of the month. Update History Cash batch process will do nothing."); 053 return true; 054 } 055 } 056 057 /** 058 * calculates the next month end date id using the month end date service and uses 059 * that value to insert a new record into the month end date table. 060 * 061 * @param monthEndDate current date 062 * @return KualiInteger 063 */ 064 protected KualiInteger appendNewMonthEndDate(Date monthEndDate){ 065 KualiInteger newMonthEndDateId = monthEndDateService.getNextMonthEndIdForNewRecord(); 066 MonthEndDate newMonthEndDate = new MonthEndDate(); 067 newMonthEndDate.setMonthEndDateId(newMonthEndDateId); 068 newMonthEndDate.setMonthEndDate(new java.sql.Date(monthEndDate.getTime())); 069 businessObjectService.save(newMonthEndDate); 070 071 return newMonthEndDateId; 072 } 073 074 /** 075 * For each current cash records, creates a record in historical cash table 076 * 077 * @param monthEndDateId 078 * @return true 079 */ 080 protected boolean appendNewHistoricalCashRecords(KualiInteger monthEndDateId){ 081 Collection<KemidCurrentCash> kemidCurrentCashRecords = 082 businessObjectService.findAll(KemidCurrentCash.class); 083 084 int counter = 0; 085 for (KemidCurrentCash kemidCurrentCashRecord : kemidCurrentCashRecords) { 086 KemidHistoricalCash newKemidHistoricalCash = new KemidHistoricalCash(); 087 newKemidHistoricalCash.setMonthEndDateId(monthEndDateId); 088 newKemidHistoricalCash.setKemid(kemidCurrentCashRecord.getKemid()); 089 newKemidHistoricalCash.setHistoricalIncomeCash(kemidCurrentCashRecord.getCurrentIncomeCash()); 090 newKemidHistoricalCash.setHistoricalPrincipalCash(kemidCurrentCashRecord.getCurrentPrincipalCash()); 091 businessObjectService.save(newKemidHistoricalCash); 092 counter++; 093 } 094 LOG.info ("UpdateHistoryCash batch process has appended "+counter+" records to the END_HIST_CSH_T table."); 095 096 return true; 097 } 098 099 /** 100 * Sets the monthEndDateService. 101 * 102 * @param monthEndDateService 103 */ 104 public void setMonthEndDateService(MonthEndDateService monthEndDateService) { 105 this.monthEndDateService = monthEndDateService; 106 } 107 108 /** 109 * Sets the kemService. 110 * 111 * @param kemService 112 */ 113 public void setKemService(KEMService kemService) { 114 this.kemService = kemService; 115 } 116 117 /** 118 * Sets the businessObjectService. 119 * 120 * @param businessObjectService 121 */ 122 public void setBusinessObjectService(BusinessObjectService businessObjectService) { 123 this.businessObjectService = businessObjectService; 124 } 125 126 /** 127 * gets kemService 128 * @return kemService 129 */ 130 protected KEMService getKemService() { 131 return kemService; 132 } 133 134 /** 135 * gets businessObjectService 136 */ 137 protected BusinessObjectService getBusinessObjectService() { 138 return businessObjectService; 139 } 140 141 /** 142 * gets monthEndDateService 143 * @return monthEndDateService 144 */ 145 protected MonthEndDateService getMonthEndDateService() { 146 return monthEndDateService; 147 } 148 }