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.pdp.service.impl;
017
018 import java.sql.Date;
019 import java.sql.Timestamp;
020 import java.util.Arrays;
021 import java.util.HashMap;
022 import java.util.Iterator;
023 import java.util.List;
024 import java.util.Map;
025 import java.util.TreeMap;
026
027 import org.apache.commons.lang.StringUtils;
028 import org.kuali.kfs.pdp.PdpKeyConstants;
029 import org.kuali.kfs.pdp.PdpPropertyConstants;
030 import org.kuali.kfs.pdp.businessobject.PaymentGroup;
031 import org.kuali.kfs.pdp.businessobject.PaymentProcess;
032 import org.kuali.kfs.pdp.dataaccess.PaymentGroupDao;
033 import org.kuali.kfs.pdp.service.PaymentGroupService;
034 import org.kuali.kfs.sys.DynamicCollectionComparator;
035 import org.kuali.kfs.sys.context.SpringContext;
036 import org.kuali.rice.kns.service.BusinessObjectService;
037 import org.kuali.rice.kns.service.DataDictionaryService;
038 import org.kuali.rice.kns.service.KualiConfigurationService;
039 import org.kuali.rice.kns.service.ParameterEvaluator;
040 import org.kuali.rice.kns.service.ParameterService;
041 import org.kuali.rice.kns.util.ObjectUtils;
042 import org.springframework.transaction.annotation.Transactional;
043
044 @Transactional
045 public class PaymentGroupServiceImpl implements PaymentGroupService {
046 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PaymentGroupServiceImpl.class);
047
048 private PaymentGroupDao paymentGroupDao;
049 private ParameterService parameterService;
050 private DataDictionaryService dataDictionaryService;
051 private Map<Integer,ParameterEvaluator> sortGroupSelectionParameters;
052 private BusinessObjectService businessObjectService;
053
054 public void setPaymentGroupDao(PaymentGroupDao c) {
055 paymentGroupDao = c;
056 }
057
058 /**
059 * @see org.kuali.kfs.pdp.service.PaymentGroupService#getDisbursementNumbersByDisbursementType(java.lang.Integer, java.lang.String)
060 */
061 public List<Integer> getDisbursementNumbersByDisbursementType(Integer pid,String disbursementType) {
062 LOG.debug("getDisbursementNumbersByDisbursementType() started");
063
064 return paymentGroupDao.getDisbursementNumbersByDisbursementType(pid, disbursementType);
065 }
066
067 /**
068 * @see org.kuali.kfs.pdp.service.PaymentGroupService#getDisbursementNumbersByDisbursementTypeAndBankCode(java.lang.Integer, java.lang.String, java.lang.String)
069 */
070 public List<Integer> getDisbursementNumbersByDisbursementTypeAndBankCode(Integer pid, String disbursementType, String bankCode) {
071 return paymentGroupDao.getDisbursementNumbersByDisbursementTypeAndBankCode(pid, disbursementType, bankCode);
072 }
073
074 /**
075 * @see org.kuali.kfs.pdp.service.PaymentGroupService#getDistinctBankCodesForProcessAndType(java.lang.Integer, java.lang.String)
076 */
077 public List<String> getDistinctBankCodesForProcessAndType(Integer pid, String disbursementType) {
078 return paymentGroupDao.getDistinctBankCodesForProcessAndType(pid, disbursementType);
079 }
080
081 /**
082 * @see org.kuali.kfs.pdp.service.PaymentGroupService#getByDisbursementTypeStatusCode(java.lang.String, java.lang.String)
083 */
084 public Iterator getByDisbursementTypeStatusCode(String disbursementType, String paymentStatusCode) {
085 LOG.debug("getByDisbursementTypeStatusCode() started");
086
087 Map fieldValues = new HashMap();
088 fieldValues.put(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_DISBURSEMENT_TYPE_CODE, disbursementType);
089 fieldValues.put(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_PAYMENT_STATUS_CODE, paymentStatusCode);
090 List paymentGroupList = (List) this.businessObjectService.findMatching(PaymentGroup.class, fieldValues);
091 DynamicCollectionComparator.sort(paymentGroupList, PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_DISBURSEMENT_NBR);
092
093 return paymentGroupList.iterator();
094 }
095
096 /**
097 * @see org.kuali.kfs.pdp.service.PaymentGroupService#getByProcess(org.kuali.kfs.pdp.businessobject.PaymentProcess)
098 */
099 public Iterator getByProcess(PaymentProcess p) {
100 LOG.debug("getByProcess() started");
101
102 Map fieldValues = new HashMap();
103 fieldValues.put(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_PROCESS_ID, p.getId());
104 List paymentGroupList = (List) this.businessObjectService.findMatching(PaymentGroup.class, fieldValues);
105 DynamicCollectionComparator.sort(paymentGroupList, PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_SORT_VALUE, PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_PAYEE_NAME, PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_LINE1_ADDRESS, PdpPropertyConstants.PaymentGroup.NOTES_LINES);
106
107 return paymentGroupList.iterator();
108 }
109
110 /**
111 * @see org.kuali.kfs.pdp.service.PaymentGroupService#get(java.lang.Integer)
112 */
113 public PaymentGroup get(Integer id) {
114 LOG.debug("get() started");
115
116 Map primaryKeys = new HashMap();
117 primaryKeys.put(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_ID, id);
118 return (PaymentGroup) this.businessObjectService.findByPrimaryKey(PaymentGroup.class, primaryKeys);
119 }
120
121 /**
122 * @see org.kuali.kfs.pdp.service.PaymentGroupService#getByBatchId(java.lang.Integer)
123 */
124 public List getByBatchId(Integer batchId) {
125 LOG.debug("getByBatchId() started");
126
127 Map fieldValues = new HashMap();
128 fieldValues.put(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_BATCH_ID, batchId);
129
130 return (List) this.businessObjectService.findMatching(PaymentGroup.class, fieldValues);
131 }
132
133 /**
134 * @see org.kuali.kfs.pdp.service.PaymentGroupService#getByDisbursementNumber(java.lang.Integer)
135 */
136 public List getByDisbursementNumber(Integer disbursementNbr) {
137 LOG.debug("getByDisbursementNumber() started");
138
139 Map fieldValues = new HashMap();
140 fieldValues.put(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_DISBURSEMENT_NBR, disbursementNbr);
141
142 return (List) this.businessObjectService.findMatching(PaymentGroup.class, fieldValues);
143 }
144
145 /**
146 * @see org.kuali.kfs.pdp.service.PaymentGroupService#processPaidGroup(org.kuali.kfs.pdp.businessobject.PaymentGroup, java.sql.Date)
147 */
148 public void processPaidGroup(PaymentGroup group, Date processDate) {
149 LOG.debug("processPaidGroup() started");
150
151 Timestamp ts = new Timestamp(processDate.getTime());
152 group.setEpicPaymentPaidExtractedDate(ts);
153 group.setLastUpdate(ts);
154 this.businessObjectService.save(group);
155 }
156
157 /**
158 * @see org.kuali.kfs.pdp.service.PaymentGroupService#processCancelledGroup(org.kuali.kfs.pdp.businessobject.PaymentGroup,
159 * java.sql.Date)
160 */
161 public void processCancelledGroup(PaymentGroup group, Date processDate) {
162 LOG.debug("processCancelledGroup() started");
163
164 Timestamp ts = new Timestamp(processDate.getTime());
165 group.setEpicPaymentCancelledExtractedDate(ts);
166 group.setLastUpdate(ts);
167 this.businessObjectService.save(group);
168 }
169
170 /**
171 * @see org.kuali.kfs.pdp.service.PaymentGroupService#setParameterService(org.kuali.kfs.sys.service.ParameterService)
172 */
173 public void setParameterService(ParameterService parameterService) {
174 this.parameterService = parameterService;
175 }
176
177 /**
178 * @see org.kuali.kfs.pdp.service.PaymentGroupService#getSortGroupId(org.kuali.kfs.pdp.businessobject.PaymentGroup)
179 */
180 public int getSortGroupId(PaymentGroup paymentGroup) {
181 String DEFAULT_SORT_GROUP_ID_PARAMETER = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(PdpKeyConstants.DEFAULT_SORT_GROUP_ID_PARAMETER);
182
183 for (Integer sortGroupId : getSortGroupSelectionParameters().keySet()) {
184 List<String> parameterValues = Arrays.asList(StringUtils.substringAfter(getSortGroupSelectionParameters().get(sortGroupId).getValue(), "=").split(";"));
185 String constrainedValue = String.valueOf(ObjectUtils.getPropertyValue(paymentGroup, StringUtils.substringBefore(getSortGroupSelectionParameters().get(sortGroupId).getValue(), "=")));
186 if ((getSortGroupSelectionParameters().get(sortGroupId).constraintIsAllow() && parameterValues.contains(constrainedValue))
187 || (!getSortGroupSelectionParameters().get(sortGroupId).constraintIsAllow() && !parameterValues.contains(constrainedValue))) {
188 return sortGroupId;
189 }
190 }
191
192 return new Integer(parameterService.getParameterValue(PaymentGroup.class, DEFAULT_SORT_GROUP_ID_PARAMETER));
193 }
194
195 /**
196 * @see org.kuali.kfs.pdp.service.PaymentGroupService#getSortGroupName(int)
197 */
198 public String getSortGroupName(int sortGroupId) {
199 String DEFAULT_SORT_GROUP_ID_PARAMETER = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(PdpKeyConstants.DEFAULT_SORT_GROUP_ID_PARAMETER);
200
201 if ((sortGroupId + "").equals(parameterService.getParameterValue(PaymentGroup.class, DEFAULT_SORT_GROUP_ID_PARAMETER))) {
202 return SpringContext.getBean(KualiConfigurationService.class).getPropertyString(PdpKeyConstants.DEFAULT_GROUP_NAME_OTHER);
203 }
204
205 return dataDictionaryService.getAttributeLabel(PaymentGroup.class, StringUtils.substringBefore(getSortGroupSelectionParameters().get(sortGroupId).getValue(), "="));
206 }
207
208 /**
209 * @see org.kuali.kfs.pdp.service.PaymentGroupService#getAchPaymentsNeedingAdviceNotification()
210 */
211 public List<PaymentGroup> getAchPaymentsNeedingAdviceNotification() {
212 return this.paymentGroupDao.getAchPaymentsNeedingAdviceNotification();
213 }
214
215 /**
216 * Gets the sort group parameters
217 *
218 * @return
219 */
220 protected Map<Integer,ParameterEvaluator> getSortGroupSelectionParameters() {
221 String SORT_GROUP_SELECTION_PARAMETER_PREFIX = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(PdpKeyConstants.SORT_GROUP_SELECTION_PARAMETER_PREFIX);
222
223 if (sortGroupSelectionParameters == null) {
224 sortGroupSelectionParameters = new TreeMap<Integer,ParameterEvaluator>();
225 boolean moreParameters = true;
226 int i = 1;
227 while (moreParameters) {
228 if (parameterService.parameterExists(PaymentGroup.class, SORT_GROUP_SELECTION_PARAMETER_PREFIX + i)) {
229 sortGroupSelectionParameters.put(i, parameterService.getParameterEvaluator(PaymentGroup.class, SORT_GROUP_SELECTION_PARAMETER_PREFIX + i, null));
230 i++;
231 }
232 else {
233 moreParameters = false;
234 }
235 }
236 }
237
238 return sortGroupSelectionParameters;
239 }
240
241 public void setDataDictionaryService(DataDictionaryService dataDictionaryService) {
242 this.dataDictionaryService = dataDictionaryService;
243 }
244
245 /**
246 * Sets the business object service
247 *
248 * @param businessObjectService
249 */
250 public void setBusinessObjectService(BusinessObjectService businessObjectService) {
251 this.businessObjectService = businessObjectService;
252 }
253 }