001: /*
002: * Copyright 2007 The Kuali Foundation.
003: *
004: * Licensed under the Educational Community License, Version 1.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/ecl1.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.module.vendor.service;
017:
018: import java.util.List;
019:
020: import org.kuali.core.util.KualiDecimal;
021: import org.kuali.module.vendor.bo.VendorAddress;
022: import org.kuali.module.vendor.bo.VendorDetail;
023: import org.kuali.module.vendor.bo.VendorHeader;
024: import org.kuali.module.vendor.util.VendorRoutingComparable;
025:
026: public interface VendorService {
027:
028: public void saveVendorHeader(VendorDetail vendorDetail);
029:
030: public VendorDetail getVendorDetail(Integer headerId,
031: Integer detailId);
032:
033: /**
034: * Retrieves the VendorDetail which is the parent vendor with the given headerId. This is the method to use when working
035: * backward from a division vendor to its parent vendor. This method throws RuntimeExceptions if there are found to be no parent
036: * vendor or more than one parent vendor for the associated corporate structure.
037: *
038: * @param vendorHeaderGeneratedIdentifier The Header Id in Integer form
039: * @return The VendorDetail of the parent vendor associated with the corporate structure indicated by the given Header Id, or
040: * null if there are no vendors associated with it.
041: */
042: public VendorDetail getParentVendor(
043: Integer vendorHeaderGeneratedIdentifier);
044:
045: /**
046: * Gets the apo limit for the given parameters using the following logic:<br>
047: * <br>
048: * First it checks to see if an existing {@link org.kuali.module.vendor.bo.VendorContractOrganization} object exists for the
049: * associated parameters. If one exists and it is not excluded (see
050: * {@link org.kuali.module.vendor.bo.VendorContractOrganization#isVendorContractExcludeIndicator()}) this will return the value
051: * of {@link org.kuali.module.vendor.bo.VendorContractOrganization#getVendorContractPurchaseOrderLimitAmount()}.<br>
052: * <br>
053: * If an associated {@link org.kuali.module.vendor.bo.VendorContractOrganization} object cannot be found then a valid
054: * {@link org.kuali.module.vendor.bo.VendorContract} object will be sought. If one is found this method will return the value of
055: * {@link org.kuali.module.vendor.bo.VendorContract#getOrganizationAutomaticPurchaseOrderLimit()}.<br>
056: * <br>
057: * If no valid {@link org.kuali.module.vendor.bo.VendorContractOrganization} or
058: * {@link org.kuali.module.vendor.bo.VendorContract} objects can be found for the given parameters this method will return null.
059: *
060: * @param contractId id used to find {@link org.kuali.module.vendor.bo.VendorContractOrganization} object and
061: * {@link org.kuali.module.vendor.bo.VendorContract} object
062: * @param chart chart code for use in finding {@link org.kuali.module.vendor.bo.VendorContractOrganization} object
063: * @param org org code for use in finding {@link org.kuali.module.vendor.bo.VendorContractOrganization} object
064: * @return the automatic purchase order limit amount from the contract found using the parameters. If parameters do not find
065: * valid vendor contract objects then null is returned.
066: */
067: public KualiDecimal getApoLimitFromContract(Integer contractId,
068: String chart, String org);
069:
070: /**
071: * Finds the addresses for the given vendor and then calls the method to determine the default address from this list.
072: *
073: * @param vendorHeaderId Integer - Header ID of vendor.
074: * @param vendorDetailId Integer - Detail ID of vendor.
075: * @param addressType String - Address type of desired default.
076: * @param campus String - Campus of desired default.
077: * @return VendorAddress Desired default address; return null is possible if no defaults set.
078: */
079: public VendorAddress getVendorDefaultAddress(
080: Integer vendorHeaderId, Integer vendorDetailId,
081: String addressType, String campus);
082:
083: /**
084: * Finds the default address for the given addressType and campus from the address list passed in based on the following logic:
085: * 1) The allDefaultAddress is defined by defaultAddressIndicator on VendorAddress. 2) If campus passed in is null, return
086: * allDefaultAddress if found. 3) If campus passed in is not null, look in campus lists of addresses to see if given campus is
087: * found for the given address type. If match found, return address. If no match found, return allDefaultAddress.
088: *
089: * @param addresses List of addresses for a vendor.
090: * @param addressType String - Address type of the desired default sought.
091: * @param campus String - Campus of the desired default sought.
092: * @return VendorAddress Desired default address; return null is possible if no defaults set.
093: */
094: public VendorAddress getVendorDefaultAddress(
095: List<VendorAddress> addresses, String addressType,
096: String campus);
097:
098: /**
099: * Checks to see if a the Vendor Document associated with the given document ID should route to the route path branch in
100: * workflow where the document will stop for approvals.
101: *
102: * @param documentId
103: * @return true if the vendor should be take the approval patch... false if the vendor can be 'auto approved'
104: */
105: public boolean shouldVendorRouteForApproval(String documentId);
106:
107: /**
108: * Compares lists which have an isEqualForRouting method by using that method. An Equals() method would be wrong for the purpose
109: * of comparing these because we want to compare only using certain specified attributes, which is what our isEqualForRouting
110: * methods will do.
111: *
112: * @param list_a A List which implements VendorRoutingComparable (specifies isEqualForRouting)
113: * @param list_b Another such list
114: * @return True if all the member objects in the given lists are equal (as far as routing is concerned) at the same locations in
115: * the lists.
116: */
117: public boolean equalMemberLists(
118: List<? extends VendorRoutingComparable> list_a,
119: List<? extends VendorRoutingComparable> list_b);
120:
121: /**
122: * This method is the place to put the calls to equality checks that are needed when deciding whether to route a vendor for
123: * approval or directly to final status on the basis of what has changed. This method has been split out from
124: * shouldVendorRouteForApproval for the convenience of unit testing, but might be useful for other purposes.
125: *
126: * @param newVDtl A VendorDetail object representing the state of the proposed change
127: * @param newVHdr A VendorHeader object representing the state of the proposed change
128: * @param oldVDtl A VendorDetail object from before the change
129: * @param oldVHdr A VendorHeader object from before the change
130: * @return True if no route-significant change occurred
131: */
132: public boolean noRouteSignificantChangeOccurred(
133: VendorDetail newVDtl, VendorHeader newVHdr,
134: VendorDetail oldVDtl, VendorHeader oldVHdr);
135:
136: /**
137: * Indicates whether the vendor identified by the given <code>vendorHeaderGeneratedIdentifier</code> is an employee of the
138: * institution. The vendor must have a valid tax id and it must be of type SSN (see
139: * {@link org.kuali.module.vendor.VendorConstants#TAX_TYPE_SSN}).
140: *
141: * @param vendorHeaderGeneratedIdentifier The Header Id in Integer form
142: * @return true if the vendor identified by the <code>vendorHeaderGeneratedIdentifier</code> given is an employee of the
143: * institution
144: */
145: public boolean isVendorInstitutionEmployee(
146: Integer vendorHeaderGeneratedIdentifier);
147:
148: /**
149: * Indicates whether the vendor identified by the given <code>vendorHeaderGeneratedIdentifier</code> is a non-resident alien
150: * by checking the value of {@link org.kuali.module.vendor.bo.VendorHeader#getVendorForeignIndicator()}.
151: *
152: * @param vendorHeaderGeneratedIdentifier The Header Id in Integer form
153: * @return true if the vendor identified by the <code>vendorHeaderGeneratedIdentifier</code> given is valid and is marked as a
154: * foreign vendor
155: */
156: public boolean isVendorForeign(
157: Integer vendorHeaderGeneratedIdentifier);
158: }
|