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.sys.service.impl; 017 018 import java.util.ArrayList; 019 import java.util.Collection; 020 import java.util.List; 021 import java.util.Map; 022 023 import org.apache.commons.lang.StringUtils; 024 import org.apache.struts.action.ActionForward; 025 import org.apache.struts.action.ActionMapping; 026 import org.kuali.kfs.sys.businessobject.ElectronicPaymentClaim; 027 import org.kuali.kfs.sys.service.ElectronicFundTransferActionHelper; 028 import org.kuali.kfs.sys.service.ElectronicPaymentClaimingService; 029 import org.kuali.kfs.sys.web.struts.ElectronicFundTransferForm; 030 import org.kuali.rice.kim.bo.Person; 031 import org.kuali.rice.kns.exception.AuthorizationException; 032 import org.kuali.rice.kns.service.DataDictionaryService; 033 import org.kuali.rice.kns.service.KNSServiceLocator; 034 import org.kuali.rice.kns.util.GlobalVariables; 035 036 /** 037 * Represents a web action that occurs when a user returns a bunch of selected claims and redirects to the electronic funds transfer "claimng" page 038 */ 039 public class ElectronicFundTransferRefreshActionHelper implements ElectronicFundTransferActionHelper { 040 private ElectronicPaymentClaimingService electronicPaymentClaimingService; 041 private DataDictionaryService ddService; 042 043 protected static final String BASIC_FORWARD = "basic"; 044 protected static final String ACTION_NAME = "claim"; 045 protected static final String PORTAL_FORWARD = "portal"; 046 047 /** 048 * @see org.kuali.kfs.sys.service.ElectronicFundTransferActionHelper#performAction(org.kuali.rice.kns.web.struts.form.KualiForm, org.apache.struts.action.ActionMapping) 049 */ 050 public ActionForward performAction(ElectronicFundTransferForm form, ActionMapping mapping, Map params, String basePath) { 051 // is the current user able to claim electronic funds? 052 Person currentUser = GlobalVariables.getUserSession().getPerson(); 053 if (!form.hasAvailableClaimingDocumentStrategies()) { 054 throw new AuthorizationException(currentUser.getPrincipalName(), ElectronicFundTransferRefreshActionHelper.ACTION_NAME, ddService.getDataDictionary().getBusinessObjectEntry(ElectronicPaymentClaim.class.getName()).getObjectLabel()); 055 } 056 // does the current user have claimed funds waiting for them? 057 String lookupResultsSequenceNumber = null; 058 if (params.get("lookupResultsSequenceNumber") != null) { 059 lookupResultsSequenceNumber = ((String[])params.get("lookupResultsSequenceNumber"))[0]; 060 } 061 if (StringUtils.isBlank(lookupResultsSequenceNumber)) { 062 return mapping.findForward(PORTAL_FORWARD); 063 } 064 List<ElectronicPaymentClaim> claims = getClaimedPayments(currentUser, lookupResultsSequenceNumber); 065 if (claims.size() == 0) { 066 return mapping.findForward(PORTAL_FORWARD); 067 } 068 // if so, load their currently claimed electronic funds to the form 069 form.setClaims(claims); 070 // and redirect 071 return mapping.findForward(BASIC_FORWARD); 072 } 073 074 /** 075 * Gets the selected electronic payment claim records from the LookupResults service 076 * @param currentUser the claiming user 077 * @param lookupResultsSequenceNumber the parameter for the lookup results sequence number 078 * @return a list of claims 079 */ 080 protected List<ElectronicPaymentClaim> getClaimedPayments(Person currentUser, String lookupResultsSequenceNumber) { 081 List<ElectronicPaymentClaim> claims = new ArrayList<ElectronicPaymentClaim>(); 082 try { 083 Collection selectedClaims = KNSServiceLocator.getLookupResultsService().retrieveSelectedResultBOs(lookupResultsSequenceNumber, ElectronicPaymentClaim.class, currentUser.getPrincipalId()); 084 for (Object claimAsObj : selectedClaims) { 085 ElectronicPaymentClaim claim = (ElectronicPaymentClaim) claimAsObj; 086 if (!claim.getPaymentClaimStatusCode().equals(ElectronicPaymentClaim.ClaimStatusCodes.CLAIMED) && StringUtils.isBlank(claim.getReferenceFinancialDocumentNumber())) { 087 claims.add(claim); 088 } 089 } 090 } 091 catch (Exception e) { 092 throw new RuntimeException(e); 093 } 094 return claims; 095 } 096 097 /** 098 * Sets the electronicPaymentClaimingService attribute value. 099 * @param electronicPaymentClaimingService The electronicPaymentClaimingService to set. 100 */ 101 public void setElectronicPaymentClaimingService(ElectronicPaymentClaimingService electronicPaymentClaimingService) { 102 this.electronicPaymentClaimingService = electronicPaymentClaimingService; 103 } 104 105 /** 106 * Sets the ddService attribute value. 107 * @param ddService The ddService to set. 108 */ 109 public void setDataDictonaryService(DataDictionaryService ddService) { 110 this.ddService = ddService; 111 } 112 } 113