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.List; 019 020 import org.kuali.kfs.module.endow.EndowParameterKeyConstants; 021 import org.kuali.kfs.module.endow.batch.CurrentTaxLotBalanceUpdateStep; 022 import org.kuali.kfs.module.endow.batch.service.CurrentTaxLotBalanceUpdateService; 023 import org.kuali.kfs.module.endow.businessobject.CurrentTaxLotBalance; 024 import org.kuali.kfs.module.endow.businessobject.HoldingTaxLot; 025 import org.kuali.kfs.module.endow.document.service.CurrentTaxLotService; 026 import org.kuali.kfs.module.endow.document.service.HoldingTaxLotService; 027 import org.kuali.kfs.sys.service.impl.KfsParameterConstants; 028 import org.kuali.rice.kns.service.ParameterService; 029 import org.springframework.transaction.annotation.Transactional; 030 031 /** 032 * This class implements the CurrentTaxLotBalanceUpdateService batch job. 033 */ 034 @Transactional 035 public class CurrentTaxLotBalanceUpdateServiceImpl implements CurrentTaxLotBalanceUpdateService { 036 protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(CurrentTaxLotBalanceUpdateServiceImpl.class); 037 038 protected ParameterService parameterService; 039 protected HoldingTaxLotService holdingTaxLotService; 040 protected CurrentTaxLotService currentTaxLotService; 041 042 /** 043 * Constructs a CurrentTaxLotBalanceUpdateServiceImpl instance 044 */ 045 public CurrentTaxLotBalanceUpdateServiceImpl() { 046 047 } 048 049 /** 050 * the system will compile the information in the Holding Tax Lot Table along with 051 * calculations of market value and estimated income into a new table called the 052 * Current Tax Lot Balances 053 */ 054 public boolean updateCurrentTaxLotBalances() { 055 LOG.info("updateCurrentTaxLotBalances() - Processed all HoldingTaxLot records started."); 056 057 //Step 1: remove all the records from END_CURR_TAX_LOT_BAL_T table 058 clearAllCurrentTaxLotRecords(); 059 060 //Step 2: Retrieve all HoldingTaxLot records 061 List<HoldingTaxLot> holdingTaxLots = holdingTaxLotService.getAllTaxLots(); 062 063 //process the records in the list 064 for (HoldingTaxLot holdingTaxLot : holdingTaxLots) { 065 CurrentTaxLotBalance currentTaxLotBalance = currentTaxLotService.copyHoldingTaxLotToCurrentTaxLotBalance(holdingTaxLot); 066 067 String securityId = currentTaxLotBalance.getSecurityId(); 068 069 currentTaxLotBalance.setHoldingMarketValue(currentTaxLotService.getHoldingMarketValue(holdingTaxLot, securityId)); 070 currentTaxLotBalance.setSecurityUnitVal(currentTaxLotService.getCurrentTaxLotBalanceSecurityUnitValue(securityId)); 071 currentTaxLotBalance.setAnnualEstimatedIncome(currentTaxLotService.getNextTwelveMonthsEstimatedValue(holdingTaxLot, securityId)); 072 currentTaxLotBalance.setRemainderOfFYEstimatedIncome(currentTaxLotService.getRemainderOfFiscalYearEstimatedIncome(holdingTaxLot, securityId)); 073 currentTaxLotBalance.setNextFYEstimatedIncome(currentTaxLotService.getNextFiscalYearInvestmentIncome(holdingTaxLot, securityId)); 074 075 saveCurrentTaxLotRecord(currentTaxLotBalance); 076 LOG.info("Updated current tax lot balance for Security Id: " + securityId + " and kemid: " + holdingTaxLot.getKemid()); 077 } 078 079 LOG.info("updateCurrentTaxLotBalances() - Updated Current Tax Lot Balances."); 080 081 return true; 082 } 083 084 /** 085 * This method checks if the System parameter has been set up for this batch job. 086 * @result return true if the system parameter exists, else false 087 */ 088 protected boolean systemParametersForCurrentTaxLotBalanceUpdateStepJob() { 089 LOG.info("systemParametersForCurrentTaxLotBalanceUpdateStepJob() started."); 090 091 boolean systemParameterExists = true; 092 093 // check to make sure the system parameter has been setup... 094 if (!getParameterService().parameterExists(KfsParameterConstants.ENDOWMENT_BATCH.class, EndowParameterKeyConstants.FISCAL_YEAR_END_DAY_AND_MONTH)) { 095 LOG.warn("FISCAL_YEAR_END_DAY_AND_MONTH System parameter does not exist in the parameters list. The job can not continue without this parameter"); 096 return false; 097 } 098 099 LOG.info("systemParametersForCurrentTaxLotBalanceUpdateStepJob() ended."); 100 101 return systemParameterExists; 102 } 103 104 /** 105 * @see org.kuali.kfs.module.endow.batch.service.CurrentTaxLotBalanceUpdateService#clearAllCurrentTaxLotRecords() 106 * Method to clear all the records in the currentTaxLotBalance table 107 */ 108 public void clearAllCurrentTaxLotRecords() { 109 currentTaxLotService.clearAllCurrentTaxLotRecords(); 110 } 111 112 /** 113 * @see org.kuali.kfs.module.endow.batch.service.CurrentTaxLotBalanceUpdateService#saveCurrentTaxLotRecord(CurrentTaxLotBalance) 114 * Saves the CurrentTaxLot to the table (END_CURR_TAX_LOT_BAL_T). 115 */ 116 public void saveCurrentTaxLotRecord(CurrentTaxLotBalance currentTaxLotBalance) { 117 currentTaxLotService.updateCurrentTaxLotBalance(currentTaxLotBalance); 118 } 119 120 /** 121 * Gets the parameterService attribute. 122 * 123 * @return Returns the parameterService. 124 */ 125 protected ParameterService getParameterService() { 126 return parameterService; 127 } 128 129 /** 130 * Sets the parameterService attribute value. 131 * 132 * @param parameterService The parameterService to set. 133 */ 134 public void setParameterService(ParameterService parameterService) { 135 this.parameterService = parameterService; 136 } 137 138 /** 139 * gets the holdingTaxLotService 140 * 141 * @param holdingTaxLotService The holdingTaxLotService to get. 142 */ 143 protected HoldingTaxLotService getHoldingTaxLotService() { 144 return holdingTaxLotService; 145 } 146 147 /** 148 * Sets the holdingTaxLotService 149 * 150 * @param holdingTaxLotService The holdingTaxLotService to set. 151 */ 152 public void setHoldingTaxLotService(HoldingTaxLotService holdingTaxLotService) { 153 this.holdingTaxLotService = holdingTaxLotService; 154 } 155 156 /** 157 * gets the currentTaxLotService 158 * 159 * @param currentTaxLotService The currentTaxLotService to get. 160 */ 161 public CurrentTaxLotService getCurrentTaxLotService() { 162 return currentTaxLotService; 163 } 164 165 /** 166 * gets the currentTaxLotService 167 * 168 * @param currentTaxLotService The currentTaxLotService to get. 169 */ 170 public void setCurrentTaxLotService(CurrentTaxLotService currentTaxLotService) { 171 this.currentTaxLotService = currentTaxLotService; 172 } 173 }