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.businessobject.lookup; 017 018 import java.util.ArrayList; 019 import java.util.Collections; 020 import java.util.List; 021 import java.util.Map; 022 023 import org.apache.commons.lang.StringUtils; 024 import org.kuali.kfs.fp.businessobject.DisbursementPayee; 025 import org.kuali.kfs.fp.businessobject.lookup.DisbursementPayeeLookupableHelperServiceImpl; 026 import org.kuali.kfs.pdp.PdpConstants; 027 import org.kuali.kfs.pdp.PdpKeyConstants; 028 import org.kuali.kfs.pdp.businessobject.ACHPayee; 029 import org.kuali.kfs.sys.KFSKeyConstants; 030 import org.kuali.kfs.sys.KFSPropertyConstants; 031 import org.kuali.kfs.vnd.businessobject.VendorDetail; 032 import org.kuali.rice.kim.bo.Person; 033 import org.kuali.rice.kim.util.KIMPropertyConstants; 034 import org.kuali.rice.kns.bo.BusinessObject; 035 import org.kuali.rice.kns.exception.ValidationException; 036 import org.kuali.rice.kns.lookup.CollectionIncomplete; 037 import org.kuali.rice.kns.util.BeanPropertyComparator; 038 import org.kuali.rice.kns.util.GlobalVariables; 039 import org.kuali.rice.kns.web.ui.ResultRow; 040 041 /** 042 * Payee lookupable for PDP Payee ACH. Builds off of DV Payee lookup by taking off payment reason code, and adding adding entity id 043 * to search and return url 044 */ 045 public class ACHPayeeLookupableHelperServiceImpl extends DisbursementPayeeLookupableHelperServiceImpl { 046 047 /** 048 * @see org.kuali.kfs.fp.businessobject.lookup.DisbursementPayeeLookupableHelperServiceImpl#getSearchResults(java.util.Map) 049 */ 050 @Override 051 public List<? extends BusinessObject> getSearchResults(Map<String, String> fieldValues) { 052 List<DisbursementPayee> searchResults = new ArrayList<DisbursementPayee>(); 053 054 String payeeTypeCode = fieldValues.get(KFSPropertyConstants.PAYEE_TYPE_CODE); 055 if (StringUtils.isBlank(payeeTypeCode)) { 056 GlobalVariables.getMessageMap().putInfo(KFSPropertyConstants.PAYEE_TYPE_CODE, PdpKeyConstants.MESSAGE_PDP_ACH_PAYEE_LOOKUP_NO_PAYEE_TYPE); 057 } 058 059 if (StringUtils.isNotBlank(fieldValues.get(KFSPropertyConstants.VENDOR_NUMBER)) || StringUtils.isNotBlank(fieldValues.get(KFSPropertyConstants.VENDOR_NAME)) || (StringUtils.isNotBlank(payeeTypeCode) && PdpConstants.PayeeIdTypeCodes.VENDOR_ID.equals(payeeTypeCode))) { 060 searchResults.addAll(this.getVendorsAsPayees(fieldValues)); 061 } 062 else if (StringUtils.isNotBlank(fieldValues.get(KIMPropertyConstants.Person.EMPLOYEE_ID)) || StringUtils.isNotBlank(fieldValues.get(KIMPropertyConstants.Person.ENTITY_ID)) || (StringUtils.isNotBlank(payeeTypeCode) && (PdpConstants.PayeeIdTypeCodes.EMPLOYEE.equals(payeeTypeCode) || PdpConstants.PayeeIdTypeCodes.ENTITY.equals(payeeTypeCode)))) { 063 searchResults.addAll(this.getPersonAsPayees(fieldValues)); 064 } 065 else { 066 searchResults.addAll(this.getVendorsAsPayees(fieldValues)); 067 searchResults.addAll(this.getPersonAsPayees(fieldValues)); 068 } 069 070 CollectionIncomplete results = new CollectionIncomplete(searchResults, Long.valueOf(searchResults.size())); 071 072 // sort list if default sort column given 073 List<String> defaultSortColumns = getDefaultSortColumns(); 074 if (defaultSortColumns.size() > 0) { 075 Collections.sort(results, new BeanPropertyComparator(getDefaultSortColumns(), true)); 076 } 077 078 return results; 079 } 080 081 082 /** 083 * Override to set entity id as the payee id and set the pdp payee type 084 * 085 * @see org.kuali.kfs.fp.businessobject.lookup.DisbursementPayeeLookupableHelperServiceImpl#getPayeeFromPerson(org.kuali.rice.kim.bo.Person, 086 * java.util.Map) 087 */ 088 @Override 089 protected DisbursementPayee getPayeeFromPerson(Person personDetail, Map<String, String> fieldValues) { 090 DisbursementPayee payee = super.getPayeeFromPerson(personDetail, fieldValues); 091 092 String payeeTypeCode = (String) fieldValues.get(KFSPropertyConstants.PAYEE_TYPE_CODE); 093 094 ACHPayee achPayee = new ACHPayee(); 095 096 if (PdpConstants.PayeeIdTypeCodes.ENTITY.equals(payeeTypeCode)) { 097 achPayee.setPayeeIdNumber(personDetail.getEntityId()); 098 achPayee.setPayeeTypeCode(PdpConstants.PayeeIdTypeCodes.ENTITY); 099 } 100 else { 101 achPayee.setPayeeIdNumber(personDetail.getEmployeeId()); 102 achPayee.setPayeeTypeCode(PdpConstants.PayeeIdTypeCodes.EMPLOYEE); 103 } 104 105 achPayee.setPayeeName(payee.getPayeeName()); 106 achPayee.setPrincipalId(payee.getPrincipalId()); 107 achPayee.setTaxNumber(payee.getTaxNumber()); 108 achPayee.setAddress(payee.getAddress()); 109 achPayee.setActive(payee.isActive()); 110 111 return achPayee; 112 } 113 114 115 /** 116 * @see org.kuali.kfs.fp.businessobject.lookup.DisbursementPayeeLookupableHelperServiceImpl#getPayeeFromVendor(org.kuali.kfs.vnd.businessobject.VendorDetail, 117 * java.util.Map) 118 */ 119 @Override 120 protected DisbursementPayee getPayeeFromVendor(VendorDetail vendorDetail, Map<String, String> fieldValues) { 121 DisbursementPayee payee = super.getPayeeFromVendor(vendorDetail, fieldValues); 122 123 ACHPayee achPayee = new ACHPayee(); 124 125 achPayee.setPayeeIdNumber(payee.getPayeeIdNumber()); 126 achPayee.setPayeeTypeCode(PdpConstants.PayeeIdTypeCodes.VENDOR_ID); 127 achPayee.setPayeeName(payee.getPayeeName()); 128 achPayee.setPrincipalId(payee.getPrincipalId()); 129 achPayee.setTaxNumber(payee.getTaxNumber()); 130 achPayee.setAddress(payee.getAddress()); 131 achPayee.setActive(payee.isActive()); 132 133 return achPayee; 134 } 135 136 137 /** 138 * @see org.kuali.kfs.fp.businessobject.lookup.DisbursementPayeeLookupableHelperServiceImpl#validateSearchParameters(java.util.Map) 139 */ 140 @Override 141 public void validateSearchParameters(Map fieldValues) { 142 super.validateSearchParameters(fieldValues); 143 144 String vendorName = (String) fieldValues.get(KFSPropertyConstants.VENDOR_NAME); 145 String vendorNumber = (String) fieldValues.get(KFSPropertyConstants.VENDOR_NUMBER); 146 String employeeId = (String) fieldValues.get(KIMPropertyConstants.Person.EMPLOYEE_ID); 147 String entityId = (String) fieldValues.get(KIMPropertyConstants.Person.ENTITY_ID); 148 String payeeTypeCode = (String) fieldValues.get(KFSPropertyConstants.PAYEE_TYPE_CODE); 149 150 // only can use the vendor name and vendor number fields or the employee id field, but not both. 151 boolean isVendorInfoEntered = StringUtils.isNotBlank(vendorName) || StringUtils.isNotBlank(vendorNumber); 152 if (StringUtils.isNotBlank(entityId) && isVendorInfoEntered) { 153 String messageKey = KFSKeyConstants.ERROR_DV_VENDOR_EMPLOYEE_CONFUSION; 154 155 String vendorNameLabel = this.getAttributeLabel(KFSPropertyConstants.VENDOR_NAME); 156 String vendorNumberLabel = this.getAttributeLabel(KFSPropertyConstants.VENDOR_NUMBER); 157 String entityIdLabel = this.getAttributeLabel(KIMPropertyConstants.Person.ENTITY_ID); 158 159 GlobalVariables.getMessageMap().putError(KIMPropertyConstants.Person.ENTITY_ID, messageKey, entityIdLabel, vendorNameLabel, vendorNumberLabel); 160 } 161 162 boolean isEmployeeInfoEntered = StringUtils.isNotBlank(employeeId) || StringUtils.isNotBlank(entityId); 163 boolean payeeTypeEntered = StringUtils.isNotBlank(payeeTypeCode); 164 165 if (payeeTypeEntered && PdpConstants.PayeeIdTypeCodes.VENDOR_ID.equals(payeeTypeCode) && isEmployeeInfoEntered) { 166 String messageKey = PdpKeyConstants.ERROR_PAYEE_LOOKUP_VENDOR_EMPLOYEE_CONFUSION; 167 168 String employeeIdLabel = this.getAttributeLabel(KIMPropertyConstants.Person.EMPLOYEE_ID); 169 String entityIdLabel = this.getAttributeLabel(KIMPropertyConstants.Person.ENTITY_ID); 170 String payeeTypeLabel = this.getAttributeLabel(KFSPropertyConstants.PAYEE_TYPE_CODE); 171 172 GlobalVariables.getMessageMap().putError(KFSPropertyConstants.PAYEE_TYPE_CODE, messageKey, payeeTypeLabel, payeeTypeCode, employeeIdLabel, entityIdLabel); 173 } 174 else if (payeeTypeEntered && (PdpConstants.PayeeIdTypeCodes.EMPLOYEE.equals(payeeTypeCode) || PdpConstants.PayeeIdTypeCodes.ENTITY.equals(payeeTypeCode)) && isVendorInfoEntered) { 175 String messageKey = PdpKeyConstants.ERROR_PAYEE_LOOKUP_VENDOR_EMPLOYEE_CONFUSION; 176 177 String vendorNameLabel = this.getAttributeLabel(KFSPropertyConstants.VENDOR_NAME); 178 String vendorNumberLabel = this.getAttributeLabel(KFSPropertyConstants.VENDOR_NUMBER); 179 String payeeTypeLabel = this.getAttributeLabel(KFSPropertyConstants.PAYEE_TYPE_CODE); 180 181 GlobalVariables.getMessageMap().putError(KFSPropertyConstants.PAYEE_TYPE_CODE, messageKey, payeeTypeLabel, payeeTypeCode, vendorNameLabel, vendorNumberLabel); 182 } 183 184 if (GlobalVariables.getMessageMap().hasErrors()) { 185 throw new ValidationException("errors in search criteria"); 186 } 187 } 188 189 /** 190 * Override to not filter rows based on payment reason 191 * 192 * @see org.kuali.kfs.fp.businessobject.lookup.DisbursementPayeeLookupableHelperServiceImpl#filterReturnUrl(java.util.List, 193 * java.util.List, java.lang.String) 194 */ 195 @Override 196 protected void filterReturnUrl(List<ResultRow> resultRowList, List<DisbursementPayee> payeeList, String paymentReasonCode) { 197 } 198 199 }