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.sql.Date;
019 import java.util.ArrayList;
020 import java.util.Collection;
021 import java.util.HashMap;
022 import java.util.Map;
023
024 import org.apache.ojb.broker.query.Criteria;
025 import org.apache.ojb.broker.query.QueryByCriteria;
026 import org.apache.ojb.broker.query.QueryFactory;
027 import org.kuali.kfs.module.endow.EndowParameterKeyConstants;
028 import org.kuali.kfs.module.endow.EndowPropertyConstants;
029 import org.kuali.kfs.module.endow.businessobject.FeeMethod;
030 import org.kuali.kfs.module.endow.businessobject.KemidFee;
031 import org.kuali.kfs.module.endow.document.service.KEMService;
032 import org.kuali.kfs.module.endow.batch.service.KemidCorpusValueService;
033 import org.kuali.kfs.module.endow.batch.service.KemidFeeService;
034 import org.kuali.kfs.sys.service.impl.KfsParameterConstants;
035 import org.kuali.rice.kns.service.BusinessObjectService;
036 import org.kuali.rice.kns.service.ParameterService;
037 import org.kuali.rice.kns.util.KualiDecimal;
038 import org.kuali.rice.kns.util.ObjectUtils;
039
040 /**
041 * This class is the service implementation for the KemidFeeService. This is the default, Kuali provided implementation.
042 */
043 public class KemidFeeServiceImpl implements KemidFeeService {
044 protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(KemidFeeServiceImpl.class);
045
046 private BusinessObjectService businessObjectService;
047 protected KEMService kemService;
048 protected ParameterService parameterService;
049 protected KemidCorpusValueService kemidCorpusValueService;
050
051 /**
052 * @see org.kuali.kfs.module.endow.batch.service.KemidFeeService#getAllKemIdFee()
053 */
054 public Collection <KemidFee> getAllKemIdFee() {
055 Collection <KemidFee> kemIdFee = new ArrayList();
056
057 kemIdFee = businessObjectService.findAll(KemidFee.class);
058
059 return kemIdFee;
060 }
061
062 /**
063 *
064 */
065 public boolean saveKemidFee(KemidFee kemidFee) {
066 boolean saved = true;
067
068 try {
069 businessObjectService.save(kemidFee);
070 return saved;
071 }
072 catch (IllegalArgumentException iae) {
073 return false;
074 }
075 }
076
077 /**
078 * @see org.kuali.kfs.module.endow.batch.KemidFeeService#KemidFeeService(String)
079 */
080 public Collection<KemidFee> getAllKemidForFeeMethodCode(String feeMethodCode) {
081 Collection<KemidFee> kemId = new ArrayList();
082
083 Map fieldValues = new HashMap();
084
085 fieldValues.put(EndowPropertyConstants.KEMID_FEE_MTHD_CD, feeMethodCode);
086
087 kemId = businessObjectService.findMatching(KemidFee.class, fieldValues);
088
089 return kemId;
090 }
091
092 /**
093 * @see org.kuali.kfs.module.endow.batch.KemidFeeService#ChargeFeeToKemid(KemidFee, boolean)
094 */
095 public boolean chargeFeeToKemid(FeeMethod feeMethod, KemidFee kemidFee) {
096 boolean chargeFee = true;
097 boolean corpusPercentToleranceGreaterThanZero = (feeMethod.getCorpusPctTolerance().isGreaterThan(new KualiDecimal("0")) ? true : false );
098
099 if (kemidFee.getFeeStartDate().compareTo(kemService.getCurrentDate()) <= 0) {
100 if (ObjectUtils.isNull(kemidFee.getFeeEndDate()) ||
101 (kemidFee.getFeeEndDate().compareTo(kemService.getCurrentDate()) > 0)) {
102 chargeFee = kemidCorpusValueService.canFeeBeChargedToKemid(kemidFee.getKemid(), feeMethod.getCorpusPctTolerance());
103 return chargeFee;
104 }
105 }
106
107 return chargeFee;
108 }
109
110 /**
111 * Updates the END_KEMID_FEE_T table records by setting the amounts in WAIVE_FEE_YTD to zero
112 * if current date is the first day of the institution's fiscal year
113 * @see org.kuali.kfs.module.endow.document.service.KemidFeeService#updateWaiverFeeYearToDateTotals()
114 */
115 public boolean updateWaiverFeeYearToDateTotals() {
116 LOG.info("updateWaiverFeeYearToDateTotals() process started");
117
118 boolean updated = true;
119
120 if (!systemParametersForUpdateWaiverFeeAmounts()) {
121 return false;
122 }
123
124 try {
125 java.sql.Date firstDayAfterFiscalYear = kemService.getFirstDayAfterFiscalYearEndDayAndMonth();
126
127 if (firstDayAfterFiscalYear.equals(kemService.getCurrentDate())) {
128 //update END_KEMID_FEE_T:
129 Collection <KemidFee> kemidFeeRecords = getAllKemIdFee();
130
131 for (KemidFee kemidFee : kemidFeeRecords) {
132 kemidFee.setTotalWaivedFees(KualiDecimal.ZERO);
133 businessObjectService.save(kemidFee);
134 }
135 }
136
137 return updated;
138 }
139 catch (Exception exception) {
140 return false;
141 }
142 }
143
144 /**
145 * This method checks if the System parameters have been set up for this batch job.
146 * @result return true if the system parameters exist, else false
147 */
148 protected boolean systemParametersForUpdateWaiverFeeAmounts() {
149 LOG.info("systemParametersForUpdateWaiverFeeAmounts() started.");
150
151 boolean systemParameterExists = true;
152
153 // check to make sure the system parameter has been setup...
154 if (!getParameterService().parameterExists(KfsParameterConstants.ENDOWMENT_BATCH.class, EndowParameterKeyConstants.FISCAL_YEAR_END_MONTH_AND_DAY)) {
155 LOG.warn("FISCAL_YEAR_END_MONTH_AND_DAY System parameter does not exist in the parameters list. The job can not continue without this parameter");
156 return false;
157 }
158
159 return systemParameterExists;
160 }
161
162 /**
163 * This method gets the businessObjectService.
164 *
165 * @return businessObjectService
166 */
167 public BusinessObjectService getBusinessObjectService() {
168 return businessObjectService;
169 }
170
171 /**
172 * This method sets the businessObjectService
173 *
174 * @param businessObjectService
175 */
176 public void setBusinessObjectService(BusinessObjectService businessObjectService) {
177 this.businessObjectService = businessObjectService;
178 }
179
180 /**
181 * Gets the kemService.
182 * @return kemService
183 */
184 protected KEMService getKemService() {
185 return kemService;
186 }
187
188 /**
189 * Sets the kemService.
190 * @param kemService
191 */
192 public void setKemService(KEMService kemService) {
193 this.kemService = kemService;
194 }
195
196 /**
197 * Gets the parameterService attribute.
198 * @return Returns the parameterService.
199 */
200 protected ParameterService getParameterService() {
201 return parameterService;
202 }
203
204 /**
205 * Sets the parameterService attribute value.
206 * @param parameterService The parameterService to set.
207 */
208 public void setParameterService(ParameterService parameterService) {
209 this.parameterService = parameterService;
210 }
211
212 /**
213 * Gets the kemidCorpusValueService attribute.
214 * @return Returns the kemidCorpusValueService.
215 */
216 public KemidCorpusValueService getKemidCorpusValueService() {
217 return kemidCorpusValueService;
218 }
219
220 /**
221 * Sets the kemidCorpusValueService attribute value.
222 * @param kemidCorpusValueService The kemidCorpusValueService to set.
223 */
224 public void setKemidCorpusValueService(KemidCorpusValueService kemidCorpusValueService) {
225 this.kemidCorpusValueService = kemidCorpusValueService;
226 }
227 }