/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.fp.document.service; import java.util.List; import org.kuali.kfs.fp.document.CashReceiptDocument; import org.kuali.rice.kim.api.identity.Person; /** * * This service interface defines the methods that a CashReceiptService implementation must provide. */ public interface CashReceiptService { /** * This method retrieves the cash receipt verification unit for the given user. * * TODO: change this to do something other than return null (which will require updating CashReceiptDocumentAuthorizer, since * that's the one place I'm sure that returning a null is interpreted to mean that a user is a member of no verificationUnit) * * @param user The user to retrieve the cash receipt verification unit for. * @return Cash receipt verificationUnit campusCode associated with the given user; null if the user is not a member of any verification campus. */ public String getCashReceiptVerificationUnitForUser(Person user); /** * Returns a List of CashReceiptDocuments for the given verification unit whose status matches the given status code. * * @param verificationUnit A verification unit for a cash receipt. * @param statusCode A cash receipt status code. * @return List of CashReceiptDocument instances. * @throws IllegalArgumentException Thrown if verificationUnit is blank * @throws IllegalArgumentException Thrown if statusCode is blank */ public List getCashReceipts(String verificationUnit, String statusCode); /** * Returns a List of CashReceiptDocuments for the given verificationUnit whose status matches any of the status codes in the * given String[]. * * @param verificationUnit A verification unit for a cash receipt. * @param statii A collection of potential cash receipt document statuses. * @return List of CashReceiptDocument instances. * @throws IllegalArgumentException Thrown if verificationUnit is blank * @throws IllegalArgumentException Thrown if statii is null or empty or contains any blank statusCodes */ public List getCashReceipts(String verificationUnit, String[] statii); /** * This adds the currency and coin details associated with this Cash Receipt document to the proper cash drawer and to the * cumulative Cash Receipt details for the document which opened the cash drawer. * * @param crDoc The cash receipt document with cash details to add to the cash drawer. */ public void addCashDetailsToCashDrawer(CashReceiptDocument crDoc); /** * Deprecated: Please use areCashAmountsInvalid. * Checks whether the CashReceiptDocument's cash totals are invalid, generating global errors if so. * * @param cashReceiptDocument submitted cash receipt document * @return true if CashReceiptDocument's cash totals are valid */ @Deprecated public abstract boolean areCashTotalsInvalid(CashReceiptDocument cashReceiptDocument); /** * Checks whether the CashReceiptDocument's detail and total amounts in each category is invalid, generating global errors if so. * A Cash Receipt document is considered containing invalid amount if any of the following is true: * 1. The total check amount is negative; * 2. The total currency amount or coin amount is negative; * 3. The total change currency or coin amount is negative. * We are not checking the net total here, because that will be checked when the document routes. * Note: * This method now is optional, since we've added DD validation for each currency/coin roll/count field, to only allow * positive integer. This means that each individual denomination amount will be non-negative, resulting in only non-negative * total amount in each category. Further more, check amount is validated to be non-negative each time a new check is added, * which ensures that total check amount will be non-negative. Non the less, this method serves as a safe guard in case * amounts are set elsewhere other than from the CR document UI. * * @param cashReceiptDocument submitted cash receipt document * @return true if any of CashReceiptDocument's amount is invalid */ public abstract boolean areCashAmountsInvalid(CashReceiptDocument cashReceiptDocument); }