001/*
002 * Copyright 2008 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 */
016package org.kuali.ole.fp.document.service;
017
018import java.util.Collection;
019
020import org.kuali.ole.fp.businessobject.DisbursementPayee;
021import org.kuali.ole.fp.businessobject.PaymentReasonCode;
022import org.kuali.rice.kns.util.MessageList;
023
024/**
025 * define a set of service methods related to payment reason code
026 */
027public interface DisbursementVoucherPaymentReasonService {
028
029    /**
030     * determine whether the given payee is qualified for the payment with the given reason code
031     * 
032     * @param payee the given payee
033     * @param paymentReasonCode the givne payment reason code
034     * @return true if the given payee is qualified for the payment with the given reason code; otherwise, return false
035     */
036    public boolean isPayeeQualifiedForPayment(DisbursementPayee payee, String paymentReasonCode);
037
038    /**
039     * determine whether the given payee is qualified for the payment with the given reason code and the payee type must be in the
040     * given payee type code list.
041     * 
042     * @param payee the given payee
043     * @param paymentReasonCode the givne payment reason code
044     * @param payeeTypeCodes the given payee type codes
045     * @return true if the given payee is qualified for the payment with the given reason code; otherwise, return false
046     */
047    public boolean isPayeeQualifiedForPayment(DisbursementPayee payee, String paymentReasonCode, Collection<String> payeeTypeCodes);
048
049    /**
050     * determine whether the given payment reason is a non-employee travel payment reason
051     * 
052     * @param paymentReasonCode the givne payment reason code
053     * @return true if the given payment reason is a moving payment reason; otherwise, return false
054     */
055    public boolean isNonEmployeeTravelPaymentReason(String paymentReasonCode);
056
057    /**
058     * determine whether the given payment reason is a moving payment reason
059     * 
060     * @param paymentReasonCode the givne payment reason code
061     * @return true if the given payment reason is a moving payment reason; otherwise, return false
062     */
063    public boolean isMovingPaymentReason(String paymentReasonCode);
064
065    /**
066     * determine whether the given payment reason is a prepaid travel payment reason
067     * 
068     * @param paymentReasonCode the givne payment reason code
069     * @return true if the given payment reason is a prepaid travel payment reason; otherwise, return false
070     */
071    public boolean isPrepaidTravelPaymentReason(String paymentReasonCode);
072
073    /**
074     * determine whether the given payment reason is a research payment reason
075     * 
076     * @param paymentReasonCode the givne payment reason code
077     * @return true if the given payment reason is a research payment reason; otherwise, return false
078     */
079    public boolean isResearchPaymentReason(String paymentReasonCode);
080
081    /**
082     * determine whether the given payment reason is a revolving fund payment reason
083     * 
084     * @param paymentReasonCode the givne payment reason code
085     * @return true if the given payment reason is a revolving fund payment reason; otherwise, return false
086     */
087    public boolean isRevolvingFundPaymentReason(String paymentReasonCode);
088    
089    /**
090     * determine whether the given payment reason is a decedent compensation payment reason
091     * 
092     * @param paymentReasonCode the givne payment reason code
093     * @return true if the given payment reason is a decedent compensation payment reason; otherwise, return false
094     */
095    public boolean isDecedentCompensationPaymentReason(String paymentReasonCode);
096
097    /**
098     * determine whether the given payment reason is of type that is specified by the given type parameter name. The type parameter
099     * must be defined as an application parameter(@see org.kuali.rice.core.api.parameter.Parameter)
100     * 
101     * @param typeParameterName the given type parameter name
102     * @param paymentReasonCode the given reason code
103     * @return true if the given payment reason is of type that is specified by typeParameterName; otherwise, false
104     */
105    public boolean isPaymentReasonOfType(String typeParameterName, String paymentReasonCode);
106
107    /**
108     * get the payment limit to research non-vendor employee for research payment reason
109     * 
110     * @return the payment limit to research non-vendor employee for research payment reason.
111     */
112    public String getReserchNonVendorPayLimit();
113
114    /**
115     * get the payee type codes valid for the given payment reason
116     * 
117     * @param paymentReasonCode the given payment reason
118     * @return the payee type codes valid for the given payment reason
119     */
120    public Collection<String> getPayeeTypesByPaymentReason(String paymentReasonCode);
121
122    /**
123     * get the payment reason with its primary key: the given payment reason code
124     * 
125     * @param paymentReasonCode the given payment reason
126     * @return the payment reason with its primary key: the given payment reason code
127     */
128    public PaymentReasonCode getPaymentReasonByPrimaryId(String paymentReasonCode);
129
130    /**
131     * post the usage of the given payment reason code into error map
132     * 
133     * @param paymentReasonCode the given payment reason code
134     * @param messageList the message list that will hold the usage of the given payment reason
135     */
136    public void postPaymentReasonCodeUsage(String paymentReasonCode, MessageList messageList);
137
138    /**
139     * determine whether the given payment reason is required for tax review
140     * 
141     * @param paymentReasonCode the given payment reason
142     * @return true if the given payment reason is required for tax review; otherwise, false
143     */
144    public boolean isTaxReviewRequired(String paymentReasonCode);
145
146    /**
147     * get the vendor owership type codes for the given payment reason code
148     * 
149     * @param paymentReasonCode the given payment reason code
150     * @return the vendor owership type codes for the given payment reason code if any; otherwise, null
151     */
152    public Collection<String> getVendorOwnershipTypesByPaymentReason(String paymentReasonCode);
153}