View Javadoc
1   /*
2    * Copyright 2007 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.ole.vnd.document.service;
17  
18  import java.util.Collection;
19  import java.util.List;
20  
21  import org.kuali.ole.sys.businessobject.Building;
22  import org.kuali.ole.vnd.businessobject.VendorAddress;
23  import org.kuali.ole.vnd.businessobject.VendorContract;
24  import org.kuali.ole.vnd.businessobject.VendorDetail;
25  import org.kuali.ole.vnd.businessobject.VendorHeader;
26  import org.kuali.ole.vnd.businessobject.VendorRoutingComparable;
27  import org.kuali.rice.core.api.util.type.KualiDecimal;
28  import org.kuali.rice.krad.bo.Note;
29  import org.kuali.rice.krad.document.Document;
30  
31  public interface VendorService {
32  
33      public void saveVendorHeader(VendorDetail vendorDetail);
34  
35      /**
36       * get the vendor detail with the given vendor number
37       * @param vendorNumber the given vendor number
38       * @return the vendor detail with the given vendor number if the vendor exists, otherwise, return null
39       */
40      public VendorDetail getByVendorNumber(String vendorNumber);
41  
42      public VendorDetail getVendorDetail(String vendorNumber);
43  
44      public VendorDetail getVendorDetail(Integer headerId, Integer detailId);
45  
46      /**
47       * Retrieves the VendorDetail which is the parent vendor with the given headerId. This is the method to use when working
48       * backward from a division vendor to its parent vendor. This method throws RuntimeExceptions if there are found to be no parent
49       * vendor or more than one parent vendor for the associated corporate structure.
50       *
51       * @param vendorHeaderGeneratedIdentifier The Header Id in Integer form
52       * @return The VendorDetail of the parent vendor associated with the corporate structure indicated by the given Header Id, or
53       *         null if there are no vendors associated with it.
54       */
55      public VendorDetail getParentVendor(Integer vendorHeaderGeneratedIdentifier);
56  
57      /**
58       * Retrieves the VendorDetail using its vendorDunsNumber.
59       * @param vendorDunsNumber the vendor's DUN number.
60       * @return
61       */
62      public VendorDetail getVendorByDunsNumber(String vendorDunsNumber);
63  
64      /**
65       * Gets the apo limit for the given parameters using the following logic:<br>
66       * <br>
67       * First it checks to see if an existing {@link org.kuali.ole.vnd.businessobject.VendorContractOrganization} object exists for the
68       * associated parameters. If one exists and it is not excluded (see
69       * {@link org.kuali.ole.vnd.businessobject.VendorContractOrganization#isVendorContractExcludeIndicator()}) this will return the value
70       * of {@link org.kuali.ole.vnd.businessobject.VendorContractOrganization#getVendorContractPurchaseOrderLimitAmount()}.<br>
71       * <br>
72       * If an associated {@link org.kuali.ole.vnd.businessobject.VendorContractOrganization} object cannot be found then a valid
73       * {@link org.kuali.ole.vnd.businessobject.VendorContract} object will be sought. If one is found this method will return the value of
74       * {@link org.kuali.ole.vnd.businessobject.VendorContract#getOrganizationAutomaticPurchaseOrderLimit()}.<br>
75       * <br>
76       * If no valid {@link org.kuali.ole.vnd.businessobject.VendorContractOrganization} or
77       * {@link org.kuali.ole.vnd.businessobject.VendorContract} objects can be found for the given parameters this method will return null.
78       *
79       * @param contractId id used to find {@link org.kuali.ole.vnd.businessobject.VendorContractOrganization} object and
80       *        {@link org.kuali.ole.vnd.businessobject.VendorContract} object
81       * @param chart chart code for use in finding {@link org.kuali.ole.vnd.businessobject.VendorContractOrganization} object
82       * @param org org code for use in finding {@link org.kuali.ole.vnd.businessobject.VendorContractOrganization} object
83       * @return the automatic purchase order limit amount from the contract found using the parameters. If parameters do not find
84       *         valid vendor contract objects then null is returned.
85       */
86      public KualiDecimal getApoLimitFromContract(Integer contractId, String chart, String org);
87  
88      /**
89       * Finds the addresses for the given vendor and then calls the method to determine the default address from this list.
90       *
91       * @param vendorHeaderId Integer - Header ID of vendor.
92       * @param vendorDetailId Integer - Detail ID of vendor.
93       * @param addressType String - Address type of desired default.
94       * @param campus String - Campus of desired default.
95       * @return VendorAddress Desired default address; return null is possible if no defaults set.
96       */
97      public VendorAddress getVendorDefaultAddress(Integer vendorHeaderId, Integer vendorDetailId, String addressType, String campus);
98  
99      /**
100      * Finds the default address for the given addressType and campus from the address list passed in based on the following logic:
101      * 1) The allDefaultAddress is defined by defaultAddressIndicator on VendorAddress. 2) If campus passed in is null, return
102      * allDefaultAddress if found. 3) If campus passed in is not null, look in campus lists of addresses to see if given campus is
103      * found for the given address type. If match found, return address. If no match found, return allDefaultAddress.
104      *
105      * @param addresses List of addresses for a vendor.
106      * @param addressType String - Address type of the desired default sought.
107      * @param campus String - Campus of the desired default sought.
108      * @return VendorAddress Desired default address; return null is possible if no defaults set.
109      */
110     public VendorAddress getVendorDefaultAddress(Collection<VendorAddress> addresses, String addressType, String campus);
111 
112     /**
113      * Checks to see if a the Vendor Document associated with the given document ID should route to the route path branch in
114      * workflow where the document will stop for approvals.
115      *
116      * @param documentId
117      * @return true if the vendor should be take the approval patch... false if the vendor can be 'auto approved'
118      */
119     public boolean shouldVendorRouteForApproval(String documentId);
120 
121     /**
122      * Compares lists which have an isEqualForRouting method by using that method. An Equals() method would be wrong for the purpose
123      * of comparing these because we want to compare only using certain specified attributes, which is what our isEqualForRouting
124      * methods will do.
125      *
126      * @param list_a A List which implements VendorRoutingComparable (specifies isEqualForRouting)
127      * @param list_b Another such list
128      * @return True if all the member objects in the given lists are equal (as far as routing is concerned) at the same locations in
129      *         the lists.
130      */
131     public boolean equalMemberLists(List<? extends VendorRoutingComparable> list_a, List<? extends VendorRoutingComparable> list_b);
132 
133     /**
134      * This method is the place to put the calls to equality checks that are needed when deciding whether to route a vendor for
135      * approval or directly to final status on the basis of what has changed. This method has been split out from
136      * shouldVendorRouteForApproval for the convenience of unit testing, but might be useful for other purposes.
137      *
138      * @param newVDtl A VendorDetail object representing the state of the proposed change
139      * @param newVHdr A VendorHeader object representing the state of the proposed change
140      * @param oldVDtl A VendorDetail object from before the change
141      * @param oldVHdr A VendorHeader object from before the change
142      * @return True if no route-significant change occurred
143      */
144     public boolean noRouteSignificantChangeOccurred(VendorDetail newVDtl, VendorHeader newVHdr, VendorDetail oldVDtl, VendorHeader oldVHdr);
145 
146     /**
147      * Indicates whether the vendor identified by the given <code>vendorHeaderGeneratedIdentifier</code> is an employee of the
148      * institution. The vendor must have a valid tax id and it must be of type SSN (see
149      * {@link org.kuali.ole.vnd.VendorConstants#TAX_TYPE_SSN}).
150      *
151      * @param vendorHeaderGeneratedIdentifier The Header Id in Integer form
152      * @return true if the vendor identified by the <code>vendorHeaderGeneratedIdentifier</code> given is an employee of the
153      *         institution
154      */
155     public boolean isVendorInstitutionEmployee(Integer vendorHeaderGeneratedIdentifier);
156 
157     /**
158      * Indicates whether the vendor identified by the given <code>vendorHeaderGeneratedIdentifier</code> is a non-resident alien
159      * by checking the value of {@link org.kuali.ole.vnd.businessobject.VendorHeader#getVendorForeignIndicator()}.
160      *
161      * @param vendorHeaderGeneratedIdentifier The Header Id in Integer form
162      * @return true if the vendor identified by the <code>vendorHeaderGeneratedIdentifier</code> given is valid and is marked as a
163      *         foreign vendor
164      */
165     public boolean isVendorForeign(Integer vendorHeaderGeneratedIdentifier);
166 
167     /**
168      * Indicates whether the vendor identified by the given <code>vendorHeaderGeneratedIdentifier</code> is a subject payment vendor
169      * by checking the value of {@link org.kuali.ole.vnd.businessobject.VendorHeader#getVendorTypeCode()} to see if it equals "SP".
170      *
171      * @param vendorHeaderGeneratedIdentifier The Header Id in Integer form
172      * @return true if the vendor identified by the <code>vendorHeaderGeneratedIdentifier</code> given is valid and has a vendor type code of "SP"
173      */
174     public boolean isSubjectPaymentVendor(Integer vendorHeaderGeneratedIdentifier);
175 
176     /**
177      * Indicates whether the vendor identified by the given <code>vendorHeaderGeneratedIdentifier</code> is a revolving fund code vendor
178      * by checking the value of {@link org.kuali.ole.vnd.businessobject.VendorHeader#getVendorTypeCode()} to see if it equals "RF".
179      *
180      * @param vendorHeaderGeneratedIdentifier The Header Id in Integer form
181      * @return true if the vendor identified by the <code>vendorHeaderGeneratedIdentifier</code> given is valid and has a vendor type code of "RF"
182      */
183     public boolean isRevolvingFundCodeVendor(Integer vendorHeaderGeneratedIdentifier);
184 
185     /**
186      * This method retrieves the B2B Contract for the given Vendor (see method in VendorDao for criteria).
187      *
188      * @param vendorDetail Vendor info
189      * @param campus Campus
190      * @return VendorContract B2B Contract for given vendor
191      */
192     public VendorContract getVendorB2BContract(VendorDetail vendorDetail, String campus);
193 
194     public Building getBuildingDetails(String campusCode, String buildingCode);
195 
196     List<Note> getVendorNotes(VendorDetail vendorDetail);
197 
198     /**
199      * REQ should have failed APO rules and routed to Contract Mgr Assignment since the REQ had a contracted vendor
200      * used where the contract end date is expired (regardless of the Active Indicator).
201      * Notes tab should reflect that the vendor on REQ has an expired contract.
202      *
203      * @param poDocument
204      * @param vendorDetail
205      * @return true if vendor contract expired end date is not expired else retur false.
206      */
207     public boolean isVendorContractExpired(Document document, VendorDetail vendorDetail);
208 }