001/*
002 * Copyright 2007 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/*
017 * Created on Aug 12, 2004
018 */
019package org.kuali.ole.pdp.service;
020
021import org.kuali.rice.kim.api.identity.Person;
022
023/**
024 * This class has methods for payment maintenance.
025 */
026public interface PaymentMaintenanceService {
027
028    /**
029     * This method cancels the pending payment of the given payment id if the following rules apply. -
030     * Payment status must be: "open", "held", or "pending/ACH".
031     * @param paymentGroupId Primary key of the PaymentGroup that the Payment Detail to be canceled belongs to.
032     * @param paymentDetailId Primary key of the PaymentDetail that was actually canceled.
033     * @param note Change note text entered by user.
034     * @param user The user that cancels the payment
035     * @return true if cancel payment succesful, false otherwise
036     */
037    public boolean cancelPendingPayment(Integer paymentGroupId, Integer paymentDetailId, String note, Person user);
038
039    /**
040     * This method holds pending payment of the given payment id if the following rules apply. - Payment status
041     * must be: "open".
042     * @param paymentGroupId Primary key of the PaymentGroup that the Payment Detail to be held belongs to.
043     * @param note Change note text entered by user.
044     * @param user The user that holds the payment
045     */
046    public boolean holdPendingPayment(Integer paymentGroupId, String note, Person user);
047
048    /**
049     * This method removes holds on pending payments of the given payment id if the following rules
050     * apply. - Payment status must be: "held".
051     * 
052     * @param paymentGroupId Primary key of the PaymentGroup that the Payment Detail to be un-held belongs to
053     * @param note  Change note text entered by user.
054     * @param user the user that removes hold on payment
055     */
056    public boolean removeHoldPendingPayment(Integer paymentGroupId, String note, Person user);
057
058    /**
059     * This method cancels all disbursements with the same disbursment number as that of the given payment id
060     * if the following rules apply. - Payment status must be: "extr".
061     * @param paymentGroupId Primary key of the PaymentGroup that the Payment Detail to be cancelled belongs to.
062     * @param paymentDetailId Primary key of the PaymentDetail that was actually cancelled.
063     * @param note Change note text entered by user.
064     * @param user The user that cancels the disbursement
065     */
066    public boolean cancelDisbursement(Integer paymentGroupId, Integer paymentDetailId, String note, Person user);
067
068    /**
069     * This method re-opens all disbursements with the same disbursment number as that of
070     * the given payment id if the following rules apply. - Payment status must be: "cdis".
071     * @param paymentGroupId Primary key of the PaymentGroup that the Payment Detail to be canceled/reissued belongs to.
072     * @param changeText Change note text entered by user.
073     * @param user The user that cancels/reissues disbursement
074     */
075    public boolean reissueDisbursement(Integer paymentGroupId, String changeText, Person user);
076
077    /**
078     * This method cancels and re-opens all disbursements with the same disbursment number as that of
079     * the given payment id if the following rules apply. - Payment status must be: "extr".
080     * @param paymentGroupId Primary key of the PaymentGroup that the Payment Detail to be canceled/reissued belongs to.
081     * @param changeText Change note text entered by user.
082     * @param user The user that cancels/reissues disbursement
083     */
084    public boolean cancelReissueDisbursement(Integer paymentGroupId, String changeText, Person user);
085
086    /**
087     * This method changes the immediate flag
088     * @param paymentGroupId the payment group id
089     * @param changeText the change text
090     * @param user the user that changes the immediate flag
091     */
092    public void changeImmediateFlag(Integer paymentGroupId, String changeText, Person user);
093}
094