001/* 002 * Copyright 2008 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 */ 016package org.kuali.ole.pdp.businessobject.lookup; 017 018import java.util.ArrayList; 019import java.util.Collections; 020import java.util.Comparator; 021import java.util.Iterator; 022import java.util.List; 023import java.util.Map; 024import java.util.Properties; 025 026import org.apache.commons.lang.StringUtils; 027import org.kuali.ole.pdp.PdpConstants; 028import org.kuali.ole.pdp.PdpKeyConstants; 029import org.kuali.ole.pdp.PdpParameterConstants; 030import org.kuali.ole.pdp.PdpPropertyConstants; 031import org.kuali.ole.pdp.businessobject.PaymentDetail; 032import org.kuali.ole.pdp.businessobject.PaymentGroupHistory; 033import org.kuali.ole.pdp.service.PdpAuthorizationService; 034import org.kuali.ole.sys.OLEConstants; 035import org.kuali.ole.sys.context.SpringContext; 036import org.kuali.rice.core.api.config.property.ConfigurationService; 037import org.kuali.rice.core.web.format.BooleanFormatter; 038import org.kuali.rice.kim.api.identity.Person; 039import org.kuali.rice.kns.lookup.HtmlData; 040import org.kuali.rice.kns.lookup.HtmlData.AnchorHtmlData; 041import org.kuali.rice.kns.lookup.KualiLookupableHelperServiceImpl; 042import org.kuali.rice.kns.util.KNSGlobalVariables; 043import org.kuali.rice.krad.bo.BusinessObject; 044import org.kuali.rice.krad.exception.ValidationException; 045import org.kuali.rice.krad.util.GlobalVariables; 046import org.kuali.rice.krad.util.KRADConstants; 047import org.kuali.rice.krad.util.UrlFactory; 048 049public class PaymentDetailLookupableHelperService extends KualiLookupableHelperServiceImpl { 050 public static final String PDP_PAYMENTDETAIL_KEY = "PDPHOLDKEY"; 051 private ConfigurationService kualiConfigurationService; 052 private PdpAuthorizationService pdpAuthorizationService; 053 054 /** 055 * @see org.kuali.rice.kns.lookup.KualiLookupableHelperServiceImpl#getSearchResults(java.util.Map) 056 */ 057 @Override 058 public List<? extends BusinessObject> getSearchResults(Map<String, String> fieldValues) { 059 Map parameters = super.getParameters(); 060 String errorList; 061 062 if (parameters.containsKey(PdpParameterConstants.ACTION_SUCCESSFUL_PARAM)) { 063 String[] actionSuccessRequestParm = (String[]) parameters.get(PdpParameterConstants.ACTION_SUCCESSFUL_PARAM); 064 Boolean actionSuccess = (Boolean) (new BooleanFormatter()).convertFromPresentationFormat(actionSuccessRequestParm[0]); 065 066 if (actionSuccess != null) { 067 068 if (!actionSuccess) { 069 070 // if the action performed on payment was not successful we get the error message list and add them to 071 // GlobalVariables errorMap 072 if (parameters.containsKey(PdpParameterConstants.ERROR_KEY_LIST_PARAM)) { 073 String[] errorListParam = (String[]) parameters.get(PdpParameterConstants.ERROR_KEY_LIST_PARAM); 074 errorList = errorListParam[0]; 075 if (StringUtils.isNotEmpty(errorList)) { 076 String[] errorMsgs = StringUtils.split(errorList, PdpParameterConstants.ERROR_KEY_LIST_SEPARATOR); 077 for (String error : errorMsgs) { 078 if (StringUtils.isNotEmpty(error)) { 079 GlobalVariables.getMessageMap().putError(KRADConstants.GLOBAL_ERRORS, error); 080 } 081 } 082 } 083 } 084 } 085 else { 086 if (parameters.containsKey(PdpParameterConstants.MESSAGE_PARAM)) { 087 String[] messageRequestParm = (String[]) parameters.get(PdpParameterConstants.MESSAGE_PARAM); 088 String message = messageRequestParm[0]; 089 KNSGlobalVariables.getMessageList().add(message); 090 } 091 } 092 } 093 } 094 095 List paymentDetailsFromPaymentGroupHistoryList = new ArrayList(); 096 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_DISBURSEMENT_NUMBER)) { 097 String disbursementNumberValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_DISBURSEMENT_NUMBER); 098 if (!StringUtils.isEmpty(disbursementNumberValue)) { 099 List resultsForPaymentGroupHistory = searchForPaymentGroupHistory(fieldValues); 100 paymentDetailsFromPaymentGroupHistoryList = getPaymentDetailsFromPaymentGroupHistoryList(resultsForPaymentGroupHistory); 101 } 102 } 103 104 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_STATUS_CODE)) { 105 String paymentStatusCodeValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_STATUS_CODE); 106 if (!StringUtils.isEmpty(paymentStatusCodeValue) && paymentStatusCodeValue.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.HELD_TAX_ALL)) { 107 paymentStatusCodeValue = PdpConstants.PaymentStatusCodes.HELD_TAX_ALL_FOR_SEARCH; 108 fieldValues.put(PdpPropertyConstants.PaymentDetail.PAYMENT_STATUS_CODE, paymentStatusCodeValue); 109 } 110 } 111 112 List searchResults = super.getSearchResults(fieldValues); 113 114 searchResults.addAll(paymentDetailsFromPaymentGroupHistoryList); 115 116 sortResultListByPayeeName(searchResults); 117 118 return searchResults; 119 } 120 121 /** 122 * @see org.kuali.rice.kns.lookup.AbstractLookupableHelperServiceImpl#validateSearchParameters(java.util.Map) 123 */ 124 @Override 125 public void validateSearchParameters(Map fieldValues) { 126 super.validateSearchParameters(fieldValues); 127 128 // get field values 129 String custPaymentDocNbrValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_CUSTOMER_DOC_NUMBER); 130 String invoiceNbrValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_INVOICE_NUMBER); 131 String purchaseOrderNbrValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_PURCHASE_ORDER_NUMBER); 132 String processIdValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_PROCESS_ID); 133 String paymentIdValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_ID); 134 String payeeNameValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_PAYEE_NAME); 135 String payeeIdValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_PAYEE_ID); 136 String payeeIdTypeCdValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_PAYEE_ID_TYPE_CODE); 137 String disbursementTypeCodeValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_DISBURSEMENT_TYPE_CODE); 138 String paymentStatusCodeValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_STATUS_CODE); 139 String netPaymentAmountValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_NET_AMOUNT); 140 String disbursementDateValueLower = (String) fieldValues.get(KRADConstants.LOOKUP_RANGE_LOWER_BOUND_PROPERTY_PREFIX + PdpPropertyConstants.PaymentDetail.PAYMENT_DISBURSEMENT_DATE); 141 String disbursementDateValueUpper = (String) fieldValues.get(KRADConstants.LOOKUP_DEFAULT_RANGE_SEARCH_UPPER_BOUND_LABEL + PdpPropertyConstants.PaymentDetail.PAYMENT_DISBURSEMENT_DATE); 142 String paymentDateValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_DATE); 143 String disbursementNbrValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_DISBURSEMENT_NUMBER); 144 String chartCodeValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_CHART_CODE); 145 String orgCodeValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_UNIT_CODE); 146 String subUnitCodeValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_SUBUNIT_CODE); 147 String requisitionNbrValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_REQUISITION_NUMBER); 148 String customerInstitutionNumberValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_CUSTOMER_INSTITUTION_NUMBER); 149 String pymtAttachmentValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_ATTACHMENT); 150 String processImmediateValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_CUSTOMER_INSTITUTION_NUMBER); 151 String pymtSpecialHandlingValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_SPECIAL_HANDLING); 152 String batchIdValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_GROUP_BATCH_ID); 153 String paymentGroupIdValue = (String) fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_DETAIL_PAYMENT_GROUP_ID); 154 155 if ((StringUtils.isEmpty(custPaymentDocNbrValue)) && (StringUtils.isEmpty(invoiceNbrValue)) && (StringUtils.isEmpty(purchaseOrderNbrValue)) && (StringUtils.isEmpty(processIdValue)) && (StringUtils.isEmpty(paymentIdValue)) && (StringUtils.isEmpty(payeeNameValue)) && (StringUtils.isEmpty(payeeIdValue)) && (StringUtils.isEmpty(payeeIdTypeCdValue)) && (StringUtils.isEmpty(disbursementTypeCodeValue)) && (StringUtils.isEmpty(paymentStatusCodeValue)) && (StringUtils.isEmpty(netPaymentAmountValue)) && 156 (StringUtils.isEmpty(disbursementDateValueLower)) && (StringUtils.isEmpty(disbursementDateValueUpper)) && (StringUtils.isEmpty(paymentDateValue)) && (StringUtils.isEmpty(disbursementNbrValue)) && (StringUtils.isEmpty(chartCodeValue)) && (StringUtils.isEmpty(orgCodeValue)) && (StringUtils.isEmpty(subUnitCodeValue)) && (StringUtils.isEmpty(requisitionNbrValue)) && (StringUtils.isEmpty(customerInstitutionNumberValue)) && (StringUtils.isEmpty(pymtAttachmentValue)) && (StringUtils.isEmpty(processImmediateValue)) 157 && (StringUtils.isEmpty(pymtSpecialHandlingValue)) && (StringUtils.isEmpty(batchIdValue)) && (StringUtils.isEmpty(paymentGroupIdValue))) { 158 159 GlobalVariables.getMessageMap().putError(OLEConstants.DOCUMENT_HEADER_ERRORS, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_DETAIL_CRITERIA_NOT_ENTERED); 160 } 161 else { 162 if ((StringUtils.isNotEmpty(payeeIdValue)) && (StringUtils.isEmpty(payeeIdTypeCdValue))) { 163 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_PAYEE_ID_TYPE_CODE, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_DETAIL_PAYEE_ID_TYPE_CODE_NULL_WITH_PAYEE_ID); 164 } 165 if ((StringUtils.isEmpty(payeeIdValue)) && (StringUtils.isNotEmpty(payeeIdTypeCdValue))) { 166 GlobalVariables.getMessageMap().putError(PdpPropertyConstants.PaymentDetail.PAYMENT_PAYEE_ID, PdpKeyConstants.PaymentDetail.ErrorMessages.ERROR_PAYMENT_DETAIL_PAYEE_ID_NULL_WITH_PAYEE_ID_TYPE_CODE); 167 } 168 } 169 170 if (GlobalVariables.getMessageMap().hasErrors()) { 171 throw new ValidationException("errors in search criteria"); 172 } 173 174 buildAndStoreReturnUrl(fieldValues); 175 } 176 177 /** 178 * Create a return URL for hold, cancel,set as and immediate keys to return back. - the return url is stored and then retreived in PaymentDetailAction buildURL 179 * 180 * @param fieldValues 181 */ 182 protected void buildAndStoreReturnUrl(Map<String, String> fieldValues) { 183 String basePath = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(OLEConstants.APPLICATION_URL_KEY); 184 Properties parameters = new Properties(); 185 parameters.put(OLEConstants.DISPATCH_REQUEST_PARAMETER, OLEConstants.SEARCH_METHOD); 186 parameters.put(OLEConstants.BACK_LOCATION, basePath + "/" + OLEConstants.MAPPING_PORTAL + ".do"); 187 parameters.put(KRADConstants.DOC_FORM_KEY, "88888888"); 188 parameters.put(OLEConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, PaymentDetail.class.getName()); 189 parameters.put(OLEConstants.HIDE_LOOKUP_RETURN_LINK, "true"); 190 parameters.put(OLEConstants.SUPPRESS_ACTIONS, "false"); 191 parameters.putAll(fieldValues); 192 Object lookupUrl = UrlFactory.parameterizeUrl(basePath + "/" + OLEConstants.LOOKUP_ACTION, parameters); 193 GlobalVariables.getUserSession().addObject(PDP_PAYMENTDETAIL_KEY, lookupUrl); 194 } 195 196 197 /** 198 * @see org.kuali.rice.kns.lookup.AbstractLookupableHelperServiceImpl#getCustomActionUrls(org.kuali.rice.krad.bo.BusinessObject, 199 * java.util.List) 200 */ 201 @Override 202 public List<HtmlData> getCustomActionUrls(BusinessObject businessObject, List pkNames) { 203 if (businessObject instanceof PaymentDetail) { 204 Person person = GlobalVariables.getUserSession().getPerson(); 205 PaymentDetail paymentDetail = (PaymentDetail) businessObject; 206 Integer paymentDetailId = paymentDetail.getId().intValue(); 207 String paymentDetailStatus = paymentDetail.getPaymentGroup().getPaymentStatusCode(); 208 List<HtmlData> anchorHtmlDataList = new ArrayList<HtmlData>(); 209 String linkText = OLEConstants.EMPTY_STRING; 210 String url = OLEConstants.EMPTY_STRING; 211 String basePath = kualiConfigurationService.getPropertyValueAsString(OLEConstants.APPLICATION_URL_KEY) + "/" + PdpConstants.Actions.PAYMENT_DETAIL_ACTION; 212 213 boolean showCancel = paymentDetailStatus != null && ((paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.OPEN) && pdpAuthorizationService.hasCancelPaymentPermission(person.getPrincipalId())) || (paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.HELD_CD) && pdpAuthorizationService.hasCancelPaymentPermission(person.getPrincipalId())) || ((paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.HELD_TAX_EMPLOYEE_CD) || paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.HELD_TAX_NRA_CD) || paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.HELD_TAX_NRA_EMPL_CD)) && pdpAuthorizationService.hasRemovePaymentTaxHoldPermission(person.getPrincipalId()))); 214 215 if (showCancel) { 216 Properties params = new Properties(); 217 218 params.put(OLEConstants.DISPATCH_REQUEST_PARAMETER, PdpConstants.ActionMethods.CONFIRM_CANCEL_ACTION); 219 params.put(PdpParameterConstants.PaymentDetail.DETAIL_ID_PARAM, UrlFactory.encode(String.valueOf(paymentDetailId))); 220 221 url = UrlFactory.parameterizeUrl(basePath, params); 222 223 linkText = kualiConfigurationService.getPropertyValueAsString(PdpKeyConstants.PaymentDetail.LinkText.CANCEL_PAYMENT); 224 225 AnchorHtmlData anchorHtmlData = new AnchorHtmlData(url, PdpConstants.ActionMethods.CONFIRM_CANCEL_ACTION, linkText); 226 anchorHtmlDataList.add(anchorHtmlData); 227 } 228 229 boolean showHold = paymentDetailStatus != null && (paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.OPEN) && pdpAuthorizationService.hasHoldPaymentPermission(person.getPrincipalId())); 230 if (showHold) { 231 Properties params = new Properties(); 232 params.put(OLEConstants.DISPATCH_REQUEST_PARAMETER, PdpConstants.ActionMethods.CONFIRM_HOLD_ACTION); 233 params.put(PdpParameterConstants.PaymentDetail.DETAIL_ID_PARAM, UrlFactory.encode(String.valueOf(paymentDetailId))); 234 url = UrlFactory.parameterizeUrl(basePath, params); 235 236 linkText = kualiConfigurationService.getPropertyValueAsString(PdpKeyConstants.PaymentDetail.LinkText.HOLD_PAYMENT); 237 238 AnchorHtmlData anchorHtmlData = new AnchorHtmlData(url, PdpConstants.ActionMethods.CONFIRM_HOLD_ACTION, linkText); 239 anchorHtmlDataList.add(anchorHtmlData); 240 241 } 242 boolean showRemoveTaxHold = paymentDetailStatus != null && (paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.HELD_TAX_NRA_CD) && pdpAuthorizationService.hasRemovePaymentTaxHoldPermission(person.getPrincipalId())); 243 if (showRemoveTaxHold) { 244 Properties params = new Properties(); 245 params.put(OLEConstants.DISPATCH_REQUEST_PARAMETER, PdpConstants.ActionMethods.CONFIRM_REMOVE_HOLD_ACTION); 246 params.put(PdpParameterConstants.PaymentDetail.DETAIL_ID_PARAM, UrlFactory.encode(String.valueOf(paymentDetailId))); 247 url = UrlFactory.parameterizeUrl(basePath, params); 248 249 linkText = kualiConfigurationService.getPropertyValueAsString(PdpKeyConstants.PaymentDetail.LinkText.REMOVE_HTXN_HOLD); 250 251 AnchorHtmlData anchorHtmlData = new AnchorHtmlData(url, PdpConstants.ActionMethods.CONFIRM_REMOVE_HOLD_ACTION, linkText); 252 anchorHtmlDataList.add(anchorHtmlData); 253 } 254 255 boolean showRemoveImmediatePrint = paymentDetailStatus != null && (paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.OPEN) && pdpAuthorizationService.hasSetAsImmediatePayPermission(person.getPrincipalId()) && paymentDetail.getPaymentGroup().getProcessImmediate()); 256 257 if (showRemoveImmediatePrint) { 258 259 Properties params = new Properties(); 260 params.put(OLEConstants.DISPATCH_REQUEST_PARAMETER, PdpConstants.ActionMethods.CONFIRM_REMOVE_IMMEDIATE_PRINT_ACTION); 261 params.put(PdpParameterConstants.PaymentDetail.DETAIL_ID_PARAM, UrlFactory.encode(String.valueOf(paymentDetailId))); 262 url = UrlFactory.parameterizeUrl(basePath, params); 263 264 linkText = kualiConfigurationService.getPropertyValueAsString(PdpKeyConstants.PaymentDetail.LinkText.REMOVE_IMMEDIATE_PRINT); 265 266 AnchorHtmlData anchorHtmlData = new AnchorHtmlData(url, PdpConstants.ActionMethods.CONFIRM_REMOVE_IMMEDIATE_PRINT_ACTION, linkText); 267 anchorHtmlDataList.add(anchorHtmlData); 268 269 } 270 271 boolean showSetImmediatePrint = paymentDetailStatus != null && (paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.OPEN) && pdpAuthorizationService.hasSetAsImmediatePayPermission(person.getPrincipalId()) && !paymentDetail.getPaymentGroup().getProcessImmediate()); 272 273 if (showSetImmediatePrint) { 274 275 Properties params = new Properties(); 276 params.put(OLEConstants.DISPATCH_REQUEST_PARAMETER, PdpConstants.ActionMethods.CONFIRM_SET_IMMEDIATE_PRINT_ACTION); 277 params.put(PdpParameterConstants.PaymentDetail.DETAIL_ID_PARAM, UrlFactory.encode(String.valueOf(paymentDetailId))); 278 url = UrlFactory.parameterizeUrl(basePath, params); 279 280 linkText = kualiConfigurationService.getPropertyValueAsString(PdpKeyConstants.PaymentDetail.LinkText.SET_IMMEDIATE_PRINT); 281 282 AnchorHtmlData anchorHtmlData = new AnchorHtmlData(url, PdpConstants.ActionMethods.CONFIRM_SET_IMMEDIATE_PRINT_ACTION, linkText); 283 anchorHtmlDataList.add(anchorHtmlData); 284 285 } 286 287 boolean showRemoveHold = paymentDetailStatus != null && ((paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.HELD_CD) && pdpAuthorizationService.hasHoldPaymentPermission(person.getPrincipalId())) || ((paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.HELD_TAX_EMPLOYEE_CD) || paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.HELD_TAX_NRA_EMPL_CD)) && pdpAuthorizationService.hasRemovePaymentTaxHoldPermission(person.getPrincipalId()))); 288 289 if (showRemoveHold) { 290 291 Properties params = new Properties(); 292 params.put(OLEConstants.DISPATCH_REQUEST_PARAMETER, PdpConstants.ActionMethods.CONFIRM_REMOVE_HOLD_ACTION); 293 params.put(PdpParameterConstants.PaymentDetail.DETAIL_ID_PARAM, UrlFactory.encode(String.valueOf(paymentDetailId))); 294 url = UrlFactory.parameterizeUrl(basePath, params); 295 296 linkText = kualiConfigurationService.getPropertyValueAsString(PdpKeyConstants.PaymentDetail.LinkText.REMOVE_PAYMENT_HOLD); 297 298 AnchorHtmlData anchorHtmlData = new AnchorHtmlData(url, PdpConstants.ActionMethods.CONFIRM_REMOVE_HOLD_ACTION, linkText); 299 anchorHtmlDataList.add(anchorHtmlData); 300 301 } 302 303 boolean showDisbursementCancel = paymentDetailStatus != null && ((paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.PENDING_ACH) && (pdpAuthorizationService.hasCancelPaymentPermission(person.getPrincipalId()))) || (paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.EXTRACTED) && pdpAuthorizationService.hasCancelPaymentPermission(person.getPrincipalId()) && paymentDetail.getPaymentGroup().getDisbursementDate() != null && paymentDetail.isDisbursementActionAllowed())); 304 305 if (showDisbursementCancel) { 306 307 Properties params = new Properties(); 308 params.put(OLEConstants.DISPATCH_REQUEST_PARAMETER, PdpConstants.ActionMethods.CONFIRM_DISBURSEMENT_CANCEL_ACTION); 309 params.put(PdpParameterConstants.PaymentDetail.DETAIL_ID_PARAM, UrlFactory.encode(String.valueOf(paymentDetailId))); 310 url = UrlFactory.parameterizeUrl(basePath, params); 311 312 linkText = kualiConfigurationService.getPropertyValueAsString(PdpKeyConstants.PaymentDetail.LinkText.CANCEL_DISBURSEMENT); 313 314 AnchorHtmlData anchorHtmlData = new AnchorHtmlData(url, PdpConstants.ActionMethods.CONFIRM_DISBURSEMENT_CANCEL_ACTION, linkText); 315 anchorHtmlDataList.add(anchorHtmlData); 316 317 } 318 319 boolean showReissue = paymentDetailStatus != null && (paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.CANCEL_DISBURSEMENT) && (pdpAuthorizationService.hasCancelPaymentPermission(person.getPrincipalId()) && paymentDetail.isDisbursementActionAllowed())); 320 if (showReissue) { 321 Properties params = new Properties(); 322 params.put(OLEConstants.DISPATCH_REQUEST_PARAMETER, PdpConstants.ActionMethods.CONFIRM_REISSUE_ACTION); 323 params.put(PdpParameterConstants.PaymentDetail.DETAIL_ID_PARAM, UrlFactory.encode(String.valueOf(paymentDetailId))); 324 url = UrlFactory.parameterizeUrl(basePath, params); 325 326 linkText = kualiConfigurationService.getPropertyValueAsString(PdpKeyConstants.PaymentDetail.LinkText.REISSUE); 327 328 AnchorHtmlData anchorHtmlData = new AnchorHtmlData(url, PdpConstants.ActionMethods.CONFIRM_REISSUE_ACTION, linkText); 329 anchorHtmlDataList.add(anchorHtmlData); 330 } 331 332 boolean showReissueCancel = paymentDetailStatus != null && ((paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.PENDING_ACH) && (pdpAuthorizationService.hasCancelPaymentPermission(person.getPrincipalId()))) || (paymentDetailStatus.equalsIgnoreCase(PdpConstants.PaymentStatusCodes.EXTRACTED) && pdpAuthorizationService.hasCancelPaymentPermission(person.getPrincipalId()) && paymentDetail.getPaymentGroup().getDisbursementDate() != null && paymentDetail.isDisbursementActionAllowed())); 333 334 if (showReissueCancel) { 335 336 Properties params = new Properties(); 337 params.put(OLEConstants.DISPATCH_REQUEST_PARAMETER, PdpConstants.ActionMethods.CONFIRM_REISSUE_CANCEL_ACTION); 338 params.put(PdpParameterConstants.PaymentDetail.DETAIL_ID_PARAM, UrlFactory.encode(String.valueOf(paymentDetailId))); 339 url = UrlFactory.parameterizeUrl(basePath, params); 340 341 linkText = kualiConfigurationService.getPropertyValueAsString(PdpKeyConstants.PaymentDetail.LinkText.REISSUE_CANCEL); 342 343 AnchorHtmlData anchorHtmlData = new AnchorHtmlData(url, PdpConstants.ActionMethods.CONFIRM_REISSUE_CANCEL_ACTION, linkText); 344 anchorHtmlDataList.add(anchorHtmlData); 345 346 } 347 348 if (anchorHtmlDataList.isEmpty()) { 349 AnchorHtmlData anchorHtmlData = new AnchorHtmlData(" ", "", ""); 350 anchorHtmlDataList.add(anchorHtmlData); 351 } 352 return anchorHtmlDataList; 353 } 354 return super.getEmptyActionUrls(); 355 } 356 357 /** 358 * This method builds the search fields for PaymentGroupHistory. 359 * 360 * @param fieldValues entry fields from PaymentDetail 361 * @return the fields map 362 */ 363 private Map<String, String> buildSearchFieldsMapForPaymentGroupHistory(Map<String, String> fieldValues) { 364 Map resultMap = new Properties(); 365 String fieldValue = OLEConstants.EMPTY_STRING; 366 367 //TODO removed 368// if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_CUSTOMER_INSTITUTION_NUMBER)) { 369// fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_CUSTOMER_INSTITUTION_NUMBER); 370// resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_CUSTOMER_INSTITUTION_NUMBER, fieldValue); 371// } 372 373 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_PAYEE_NAME)) { 374 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_PAYEE_NAME); 375 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_PAYEE_NAME, fieldValue); 376 } 377 378 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_PAYEE_ID)) { 379 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_PAYEE_ID); 380 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_PAYEE_ID, fieldValue); 381 } 382 383 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_ATTACHMENT)) { 384 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_ATTACHMENT); 385 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_PAYMENT_ATTACHMENT, fieldValue); 386 } 387 388 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_SPECIAL_HANDLING)) { 389 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_SPECIAL_HANDLING); 390 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_ORIGIN_PAYMENT_SPECIAL_HANDLING, fieldValue); 391 } 392 393 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_PROCESS_IMEDIATE)) { 394 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_PROCESS_IMEDIATE); 395 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_ORIGIN_PROCESS_IMMEDIATE, fieldValue); 396 } 397 398 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_DISBURSEMENT_NUMBER)) { 399 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_DISBURSEMENT_NUMBER); 400 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_ORIGIN_DISBURSEMENT_NUMBER, fieldValue); 401 } 402 403 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_PROCESS_ID)) { 404 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_PROCESS_ID); 405 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_PAYMENT_PROCESS_ID, fieldValue); 406 } 407 408 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_NET_AMOUNT)) { 409 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_NET_AMOUNT); 410 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_PAYMENT_DETAILS_NET_AMOUNT, fieldValue); 411 } 412 413 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_DISBURSEMENT_DATE)) { 414 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_DISBURSEMENT_DATE); 415 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_ORIGIN_DISBURSE_DATE, fieldValue); 416 } 417 418 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_DATE)) { 419 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_DATE); 420 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_ORIGIN_PAYMENT_DATE, fieldValue); 421 } 422 423 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_STATUS_CODE)) { 424 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_STATUS_CODE); 425 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_ORIGIN_PAYMENT_STATUS_CODE, fieldValue); 426 } 427 428 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_DISBURSEMENT_TYPE_CODE)) { 429 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_DISBURSEMENT_TYPE_CODE); 430 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_DISBURSEMENT_TYPE_CODE, fieldValue); 431 } 432 433 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_CHART_CODE)) { 434 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_CHART_CODE); 435 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_CHART_CODE, fieldValue); 436 } 437 438 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_UNIT_CODE)) { 439 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_UNIT_CODE); 440 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_ORG_CODE, fieldValue); 441 } 442 443 if (fieldValues.containsKey(PdpPropertyConstants.PaymentDetail.PAYMENT_SUBUNIT_CODE)) { 444 fieldValue = fieldValues.get(PdpPropertyConstants.PaymentDetail.PAYMENT_SUBUNIT_CODE); 445 resultMap.put(PdpPropertyConstants.PaymentGroupHistory.PAYMENT_GROUP_SUB_UNIT_CODE, fieldValue); 446 } 447 448 return resultMap; 449 450 } 451 452 /** 453 * This method searches for PaymentGroupHistory 454 * 455 * @param fieldValues search field values 456 * @return the list of PaymentGroupHistory 457 */ 458 private List searchForPaymentGroupHistory(Map<String, String> fieldValues) { 459 List resultsForPaymentGroupHistory = new ArrayList(); 460 Map fieldsForPaymentGroupHistory = buildSearchFieldsMapForPaymentGroupHistory(fieldValues); 461 resultsForPaymentGroupHistory = (List) getLookupService().findCollectionBySearchHelper(PaymentGroupHistory.class, fieldsForPaymentGroupHistory, false); 462 return resultsForPaymentGroupHistory; 463 } 464 465 /** 466 * This method gets the PaymentDetails for the given list og PaymentGroupHistory 467 * 468 * @param resultsForPaymentGroupHistory the list of PaymentGoupHistory objects 469 * @return the list of PaymentDetails 470 */ 471 private List getPaymentDetailsFromPaymentGroupHistoryList(List resultsForPaymentGroupHistory) { 472 List finalResults = new ArrayList(); 473 for (Iterator iter = resultsForPaymentGroupHistory.iterator(); iter.hasNext();) { 474 PaymentGroupHistory pgh = (PaymentGroupHistory) iter.next(); 475 finalResults.addAll(pgh.getPaymentGroup().getPaymentDetails()); 476 } 477 return finalResults; 478 } 479 480 /** 481 * This method sorts the given list by payee name 482 * 483 * @param searchResults the list to be sorted 484 */ 485 protected void sortResultListByPayeeName(List searchResults) { 486 Collections.sort(searchResults, new Comparator() { 487 public int compare(Object o1, Object o2) { 488 PaymentDetail detail1 = (org.kuali.ole.pdp.businessobject.PaymentDetail) o1; 489 PaymentDetail detail2 = (org.kuali.ole.pdp.businessobject.PaymentDetail) o2; 490 491 if (detail1 == null || detail1.getPaymentGroup() == null || detail1.getPaymentGroup().getPayeeName() == null) { 492 return -1; 493 } 494 495 if (detail2 == null || detail2.getPaymentGroup() == null || detail2.getPaymentGroup().getPayeeName() == null) { 496 return 1; 497 } 498 499 return detail1.getPaymentGroup().getPayeeName().compareTo(detail2.getPaymentGroup().getPayeeName()); 500 } 501 }); 502 } 503 504 /** 505 * Sets the kualiConfigurationService attribute value. 506 * 507 * @param kualiConfigurationService The kualiConfigurationService to set. 508 */ 509 public void setConfigurationService(ConfigurationService kualiConfigurationService) { 510 this.kualiConfigurationService = kualiConfigurationService; 511 } 512 513 /** 514 * This method sets the pdpAuthorizationService attribute valuse 515 * 516 * @param pdpAuthorizationService The pdpAuthorizationService to set. 517 */ 518 public void setPdpAuthorizationService(PdpAuthorizationService pdpAuthorizationService) { 519 this.pdpAuthorizationService = pdpAuthorizationService; 520 } 521 522}