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.UpdateHoldingHistoryService;
022 import org.kuali.kfs.module.endow.businessobject.CurrentTaxLotBalance;
023 import org.kuali.kfs.module.endow.businessobject.HoldingHistory;
024 import org.kuali.kfs.module.endow.document.service.KEMService;
025 import org.kuali.kfs.module.endow.document.service.MonthEndDateService;
026 import org.kuali.kfs.module.endow.util.ValidateLastDayOfMonth;
027 import org.kuali.rice.kns.service.BusinessObjectService;
028 import org.kuali.rice.kns.util.KualiInteger;
029 import org.kuali.rice.kns.util.ObjectUtils;
030
031 public class UpdateHoldingHistoryServiceImpl implements UpdateHoldingHistoryService {
032
033 protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(UpdateHistoryCashServiceImpl.class);
034 private KEMService kemService;
035 private BusinessObjectService businessObjectService;
036 private MonthEndDateService monthEndDateService;
037
038 /**
039 * @see org.kuali.kfs.module.endow.batch.service.UpdateHoldingHistoryService#updateHoldingHistory()
040 */
041 public boolean updateHoldingHistory() {
042 Date currentDate = kemService.getCurrentDate();
043 if (ValidateLastDayOfMonth.validateLastDayOfMonth(currentDate)){
044 KualiInteger monthEndDateId = monthEndDateService.getMonthEndId(currentDate);
045 if (ObjectUtils.isNotNull(monthEndDateId)){
046 //Append the records in the END_CRNT_TAX_LOT_BAL_T table to the END_HLDG_HIST_T table
047 return appendNewHoldingHistoryRecords(monthEndDateId);
048 }else {
049 LOG.error(currentDate+" does not exist in END_MD_DT_T table. "+
050 "Can NOT append the records in the END_CRNT_TAX_LOT_BAL_T table to the END_HLDG_HIST_T table ");
051 return false;
052 }
053 }
054 else {
055 LOG.info(currentDate+" is NOT the last day of the month. Update Holding History batch process will do nothing.");
056 return true;
057 }
058 }
059
060
061 private boolean appendNewHoldingHistoryRecords(KualiInteger monthEndDateId){
062 Collection<CurrentTaxLotBalance> currentTaxLotBalanceRecords =
063 businessObjectService.findAll(CurrentTaxLotBalance.class);
064 int counter = 0;
065 for (CurrentTaxLotBalance currentTaxLotBalanceRecord : currentTaxLotBalanceRecords) {
066 HoldingHistory newHoldingHistory = new HoldingHistory();
067 newHoldingHistory.setMonthEndDateId(monthEndDateId);
068 newHoldingHistory.setKemid(currentTaxLotBalanceRecord.getKemid());
069 newHoldingHistory.setSecurityId(currentTaxLotBalanceRecord.getSecurityId());
070 newHoldingHistory.setRegistrationCode(currentTaxLotBalanceRecord.getRegistrationCode());
071 newHoldingHistory.setLotNumber(currentTaxLotBalanceRecord.getLotNumber());
072 newHoldingHistory.setIncomePrincipalIndicator(currentTaxLotBalanceRecord.getIncomePrincipalIndicator());
073 newHoldingHistory.setUnits(currentTaxLotBalanceRecord.getUnits());
074 newHoldingHistory.setCost(currentTaxLotBalanceRecord.getCost());
075 newHoldingHistory.setEstimatedIncome(currentTaxLotBalanceRecord.getAnnualEstimatedIncome());
076 newHoldingHistory.setRemainderOfFYEstimatedIncome(currentTaxLotBalanceRecord.getRemainderOfFYEstimatedIncome());
077 newHoldingHistory.setNextFYEstimatedIncome(currentTaxLotBalanceRecord.getNextFYEstimatedIncome());
078 newHoldingHistory.setSecurityUnitVal(currentTaxLotBalanceRecord.getSecurityUnitVal());
079 newHoldingHistory.setAcquiredDate(currentTaxLotBalanceRecord.getAcquiredDate());
080 newHoldingHistory.setPriorAccrual(currentTaxLotBalanceRecord.getPriorAccrual());
081 newHoldingHistory.setCurrentAccrual(currentTaxLotBalanceRecord.getCurrentAccrual());
082 newHoldingHistory.setLastTransactionDate(currentTaxLotBalanceRecord.getLastTransactionDate());
083 newHoldingHistory.setMarketValue(currentTaxLotBalanceRecord.getMarketValue());
084 businessObjectService.save(newHoldingHistory);
085 counter++;
086 }
087 LOG.info ("UpdateHoldingHistory batch process has appended "+counter+" records to the END_HLDG_HIST_T table.");
088 return true;
089
090 }
091
092 /**
093 * Sets the monthEndDateService.
094 *
095 * @param monthEndDateService
096 */
097 public void setMonthEndDateService(MonthEndDateService monthEndDateService) {
098 this.monthEndDateService = monthEndDateService;
099 }
100
101 /**
102 * Sets the kemService.
103 *
104 * @param kemService
105 */
106 public void setKemService(KEMService kemService) {
107 this.kemService = kemService;
108 }
109
110 /**
111 * Sets the businessObjectService.
112 *
113 * @param businessObjectService
114 */
115 public void setBusinessObjectService(BusinessObjectService businessObjectService) {
116 this.businessObjectService = businessObjectService;
117 }
118
119
120 }