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 }