View Javadoc
1   /*
2    * The Kuali Financial System, a comprehensive financial management system for higher education.
3    * 
4    * Copyright 2005-2014 The Kuali Foundation
5    * 
6    * This program is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Affero General Public License as
8    * published by the Free Software Foundation, either version 3 of the
9    * License, or (at your option) any later version.
10   * 
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Affero General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Affero General Public License
17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package org.kuali.kfs.pdp.businessobject.lookup;
20  
21  import java.util.ArrayList;
22  import java.util.Collections;
23  import java.util.List;
24  import java.util.Map;
25  
26  import org.apache.commons.lang.StringUtils;
27  import org.kuali.kfs.fp.businessobject.DisbursementPayee;
28  import org.kuali.kfs.fp.businessobject.lookup.AbstractPayeeLookupableHelperServiceImpl;
29  import org.kuali.kfs.pdp.PdpConstants;
30  import org.kuali.kfs.pdp.PdpKeyConstants;
31  import org.kuali.kfs.pdp.businessobject.ACHPayee;
32  import org.kuali.kfs.sys.KFSKeyConstants;
33  import org.kuali.kfs.sys.KFSPropertyConstants;
34  import org.kuali.kfs.vnd.businessobject.VendorDetail;
35  import org.kuali.rice.kim.api.identity.Person;
36  import org.kuali.rice.kim.impl.KIMPropertyConstants;
37  import org.kuali.rice.kns.web.ui.ResultRow;
38  import org.kuali.rice.krad.bo.BusinessObject;
39  import org.kuali.rice.krad.exception.ValidationException;
40  import org.kuali.rice.krad.lookup.CollectionIncomplete;
41  import org.kuali.rice.krad.util.BeanPropertyComparator;
42  import org.kuali.rice.krad.util.GlobalVariables;
43  
44  /**
45   * Payee lookupable for PDP Payee ACH. Builds off of DV Payee lookup by taking off payment reason code, and adding adding entity id
46   * to search and return url
47   */
48  public class ACHPayeeLookupableHelperServiceImpl extends AbstractPayeeLookupableHelperServiceImpl {
49  
50      /**
51       * @see org.kuali.kfs.fp.businessobject.lookup.DisbursementPayeeLookupableHelperServiceImpl#getSearchResults(java.util.Map)
52       *
53       * KRAD Conversion: Lookupable performs customization of the search results and performs a sort
54       * by retrieving the default sort columns using data dictionary service..
55       *
56       * Uses data dictionary.
57       */
58      @Override
59      public List<? extends BusinessObject> getSearchResults(Map<String, String> fieldValues) {
60          List<DisbursementPayee> searchResults = new ArrayList<DisbursementPayee>();
61  
62          String payeeTypeCode = fieldValues.get(KFSPropertyConstants.PAYEE_TYPE_CODE);
63          if (StringUtils.isBlank(payeeTypeCode)) {
64              GlobalVariables.getMessageMap().putInfo(KFSPropertyConstants.PAYEE_TYPE_CODE, PdpKeyConstants.MESSAGE_PDP_ACH_PAYEE_LOOKUP_NO_PAYEE_TYPE);
65          }
66  
67          if (StringUtils.isNotBlank(fieldValues.get(KFSPropertyConstants.VENDOR_NUMBER)) || StringUtils.isNotBlank(fieldValues.get(KFSPropertyConstants.VENDOR_NAME)) || (StringUtils.isNotBlank(payeeTypeCode) && PdpConstants.PayeeIdTypeCodes.VENDOR_ID.equals(payeeTypeCode))) {
68              searchResults.addAll(this.getVendorsAsPayees(fieldValues));
69          }
70          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)))) {
71              searchResults.addAll(this.getPersonAsPayees(fieldValues));
72          }
73          else {
74              searchResults.addAll(this.getVendorsAsPayees(fieldValues));
75              searchResults.addAll(this.getPersonAsPayees(fieldValues));
76          }
77  
78          CollectionIncomplete results = new CollectionIncomplete(searchResults, Long.valueOf(searchResults.size()));
79  
80          // sort list if default sort column given
81          List<String> defaultSortColumns = getDefaultSortColumns();
82          if (defaultSortColumns.size() > 0) {
83              Collections.sort(results, new BeanPropertyComparator(getDefaultSortColumns(), true));
84          }
85  
86          return results;
87      }
88  
89  
90      /**
91       * Override to set entity id as the payee id and set the pdp payee type
92       *
93       * @see org.kuali.kfs.fp.businessobject.lookup.DisbursementPayeeLookupableHelperServiceImpl#getPayeeFromPerson(org.kuali.rice.kim.api.identity.Person,
94       *      java.util.Map)
95       */
96      @Override
97      protected DisbursementPayee getPayeeFromPerson(Person personDetail, Map<String, String> fieldValues) {
98          DisbursementPayee payee = super.getPayeeFromPerson(personDetail, fieldValues);
99  
100         String payeeTypeCode = fieldValues.get(KFSPropertyConstants.PAYEE_TYPE_CODE);
101 
102         ACHPayee achPayee = new ACHPayee();
103 
104         if (PdpConstants.PayeeIdTypeCodes.ENTITY.equals(payeeTypeCode)) {
105             achPayee.setPayeeIdNumber(personDetail.getEntityId());
106             achPayee.setPayeeTypeCode(PdpConstants.PayeeIdTypeCodes.ENTITY);
107         }
108         else {
109             achPayee.setPayeeIdNumber(personDetail.getEmployeeId());
110             achPayee.setPayeeTypeCode(PdpConstants.PayeeIdTypeCodes.EMPLOYEE);
111         }
112 
113         achPayee.setPayeeName(payee.getPayeeName());
114         achPayee.setPrincipalId(payee.getPrincipalId());
115         achPayee.setTaxNumber(payee.getTaxNumber());
116         achPayee.setAddress(payee.getAddress());
117         achPayee.setActive(payee.isActive());
118 
119         return achPayee;
120     }
121 
122 
123     /**
124      * @see org.kuali.kfs.fp.businessobject.lookup.DisbursementPayeeLookupableHelperServiceImpl#getPayeeFromVendor(org.kuali.kfs.vnd.businessobject.VendorDetail,
125      *      java.util.Map)
126      */
127     @Override
128     protected DisbursementPayee getPayeeFromVendor(VendorDetail vendorDetail, Map<String, String> fieldValues) {
129         DisbursementPayee payee = super.getPayeeFromVendor(vendorDetail, fieldValues);
130 
131         ACHPayee achPayee = new ACHPayee();
132 
133         achPayee.setPayeeIdNumber(payee.getPayeeIdNumber());
134         achPayee.setPayeeTypeCode(PdpConstants.PayeeIdTypeCodes.VENDOR_ID);
135         achPayee.setPayeeName(payee.getPayeeName());
136         achPayee.setPrincipalId(payee.getPrincipalId());
137         achPayee.setTaxNumber(payee.getTaxNumber());
138         achPayee.setAddress(payee.getAddress());
139         achPayee.setActive(payee.isActive());
140 
141         return achPayee;
142     }
143 
144 
145     /**
146      * @see org.kuali.kfs.fp.businessobject.lookup.DisbursementPayeeLookupableHelperServiceImpl#validateSearchParameters(java.util.Map)
147      */
148     @Override
149     public void validateSearchParameters(Map fieldValues) {
150         super.validateSearchParameters(fieldValues);
151 
152         String vendorName = (String) fieldValues.get(KFSPropertyConstants.VENDOR_NAME);
153         String vendorNumber = (String) fieldValues.get(KFSPropertyConstants.VENDOR_NUMBER);
154         String employeeId = (String) fieldValues.get(KIMPropertyConstants.Person.EMPLOYEE_ID);
155         String entityId = (String) fieldValues.get(KIMPropertyConstants.Person.ENTITY_ID);
156         String payeeTypeCode = (String) fieldValues.get(KFSPropertyConstants.PAYEE_TYPE_CODE);
157 
158         // only can use the vendor name and vendor number fields or the employee id field, but not both.
159         boolean isVendorInfoEntered = StringUtils.isNotBlank(vendorName) || StringUtils.isNotBlank(vendorNumber);
160         if (StringUtils.isNotBlank(entityId) && isVendorInfoEntered) {
161             String messageKey = KFSKeyConstants.ERROR_DV_VENDOR_EMPLOYEE_CONFUSION;
162 
163             String vendorNameLabel = this.getAttributeLabel(KFSPropertyConstants.VENDOR_NAME);
164             String vendorNumberLabel = this.getAttributeLabel(KFSPropertyConstants.VENDOR_NUMBER);
165             String entityIdLabel = this.getAttributeLabel(KIMPropertyConstants.Person.ENTITY_ID);
166 
167             GlobalVariables.getMessageMap().putError(KIMPropertyConstants.Person.ENTITY_ID, messageKey, entityIdLabel, vendorNameLabel, vendorNumberLabel);
168         }
169 
170         boolean isEmployeeInfoEntered = StringUtils.isNotBlank(employeeId) || StringUtils.isNotBlank(entityId);
171         boolean payeeTypeEntered = StringUtils.isNotBlank(payeeTypeCode);
172 
173         if (payeeTypeEntered && PdpConstants.PayeeIdTypeCodes.VENDOR_ID.equals(payeeTypeCode) && isEmployeeInfoEntered) {
174             String messageKey = PdpKeyConstants.ERROR_PAYEE_LOOKUP_VENDOR_EMPLOYEE_CONFUSION;
175 
176             String employeeIdLabel = this.getAttributeLabel(KIMPropertyConstants.Person.EMPLOYEE_ID);
177             String entityIdLabel = this.getAttributeLabel(KIMPropertyConstants.Person.ENTITY_ID);
178             String payeeTypeLabel = this.getAttributeLabel(KFSPropertyConstants.PAYEE_TYPE_CODE);
179 
180             GlobalVariables.getMessageMap().putError(KFSPropertyConstants.PAYEE_TYPE_CODE, messageKey, payeeTypeLabel, payeeTypeCode, employeeIdLabel, entityIdLabel);
181         }
182         else if (payeeTypeEntered && (PdpConstants.PayeeIdTypeCodes.EMPLOYEE.equals(payeeTypeCode) || PdpConstants.PayeeIdTypeCodes.ENTITY.equals(payeeTypeCode)) && isVendorInfoEntered) {
183             String messageKey = PdpKeyConstants.ERROR_PAYEE_LOOKUP_VENDOR_EMPLOYEE_CONFUSION;
184 
185             String vendorNameLabel = this.getAttributeLabel(KFSPropertyConstants.VENDOR_NAME);
186             String vendorNumberLabel = this.getAttributeLabel(KFSPropertyConstants.VENDOR_NUMBER);
187             String payeeTypeLabel = this.getAttributeLabel(KFSPropertyConstants.PAYEE_TYPE_CODE);
188 
189             GlobalVariables.getMessageMap().putError(KFSPropertyConstants.PAYEE_TYPE_CODE, messageKey, payeeTypeLabel, payeeTypeCode, vendorNameLabel, vendorNumberLabel);
190         }
191 
192         if (GlobalVariables.getMessageMap().hasErrors()) {
193             throw new ValidationException("errors in search criteria");
194         }
195     }
196     /**
197      * Override to not filter rows based on payment reason
198      *
199      * @see org.kuali.kfs.fp.businessobject.lookup.DisbursementPayeeLookupableHelperServiceImpl#filterReturnUrl(java.util.List,
200      *      java.util.List, java.lang.String)
201      *
202      * KRAD Conversion: Performs customization of the result list of rows.
203      *
204      * No use of data dictionary
205      */
206     @Override
207 
208     protected void filterReturnUrl(List<ResultRow> resultRowList, List<DisbursementPayee> payeeList, String paymentReasonCode) {
209     }
210 
211 }