/* * 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.module.purap.document.service; import java.util.HashMap; import org.kuali.kfs.module.purap.businessobject.PurApAccountingLineBase; import org.kuali.kfs.module.purap.businessobject.PurchaseOrderItem; import org.kuali.kfs.module.purap.document.AccountsPayableDocument; import org.kuali.kfs.module.purap.document.PurchaseOrderDocument; import org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocument; import org.kuali.kfs.module.purap.util.ExpiredOrClosedAccountEntry; /** * Contains logic for use by the individual AccountsPayable documents */ public interface AccountsPayableService { /** * Generates a list of continuation accounts for expired or closed accounts as well as a list of expired or closed * accounts with no continuation accounts. * * @param document The accounts payable document whose accounts we are trying to retrieve. * @return A HashMap where the keys are the string representations of the chart and account of the * original account and the values are the ExpiredOrClosedAccountEntry. */ public HashMap<String, ExpiredOrClosedAccountEntry> getExpiredOrClosedAccountList(AccountsPayableDocument document); /** * Generates a note of where continuation accounts were used and adds them as a note to the document. * * @param document The accounts payable document to which we're adding the notes. * @param expiredOrClosedAccountList The HashMap where the keys are the string representations of the chart and * account of the original account and the values are the ExpiredOrClosedAccountEntry. */ public void generateExpiredOrClosedAccountNote(AccountsPayableDocument document, HashMap<String, ExpiredOrClosedAccountEntry> expiredOrClosedAccountList); /** * Adds a warning message to the message list if expired or closed accounts have been used on the document and the * document is not in any of these state: Initiate, In Process or Awaiting Accounts Payable Review and the * current user is a fiscal user. * * @param document The accounts payable document to which we're adding the warning message. */ public void generateExpiredOrClosedAccountWarning(AccountsPayableDocument document); /** * Performs the replacement of an expired/closed account with a continuation account. * * @param acctLineBase The accounting line whose chart and account we're going to replace. * @param expiredOrClosedAccountList The HashMap where the keys are the string representations of the chart * and account of the original account and the values are the ExpiredOrClosedAccountEntry. */ public void processExpiredOrClosedAccount(PurApAccountingLineBase acctLineBase, HashMap<String, ExpiredOrClosedAccountEntry> expiredOrClosedAccountList); /** * This method cancels a document, it uses DocumentSpecificService to call the actual logic on the PaymentRequestService * or CreditMemoService as appropriate. In certain cases it will also reopen a closed PurchaseOrderDocument * * @param apDocument The accounts payable document to be canceled. * @param currentNodeName The string representing the current node, which we'll need when we * want to update the document status by node. Note: if this is blank it is assumed * the request is not coming from workflow. */ public void cancelAccountsPayableDocument(AccountsPayableDocument apDocument, String currentNodeName); /** * This method cancels an AccountsPayableDocument according to the document status. * * @param apDocument The accounts payable document to be canceled. * @param noteText Notes users input when canceling the document */ public void cancelAccountsPayableDocumentByCheckingDocumentStatus(AccountsPayableDocument apDocument, String noteText) throws Exception; /** * Updates the item list based on what's eligible to be payed on purchase order. * * @param apDocument The accounts payable document containing the items to be updated. */ public void updateItemList(AccountsPayableDocument apDocument); /** * Determines if item is eligible for payment. * * @param poi The purchase order item whose eligibility for payment is to be determined. * @return boolean true if the item is eligible for payment. */ public boolean purchaseOrderItemEligibleForPayment(PurchaseOrderItem poi); /** * Performs all the actions on an update document. * * @param purapDocument PurchasingAccountsPayableDocument */ public void performLogicForFullEntryCompleted(PurchasingAccountsPayableDocument purapDocument); public HashMap<String, ExpiredOrClosedAccountEntry> expiredOrClosedAccountsList(PurchaseOrderDocument po); /** * checks if an accounting line with zero dollar amount can be copied from PO to PREQ. This will check * the system parameter COPY_ACCOUNTING_LINES_WITH_ZERO_AMOUNT_FROM_PO_TO_PREQ_IND and determines if the * line can be copied or not. * * @return true if the system parameter value is Y else returns N. */ public boolean canCopyAccountingLinesWithZeroAmount(); }