001 /*
002 * Copyright 2011 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 package org.kuali.kfs.module.purap.document.service;
017
018 import java.util.HashMap;
019
020 import org.kuali.kfs.module.purap.businessobject.PurApAccountingLineBase;
021 import org.kuali.kfs.module.purap.businessobject.PurchaseOrderItem;
022 import org.kuali.kfs.module.purap.document.AccountsPayableDocument;
023 import org.kuali.kfs.module.purap.document.PurchaseOrderDocument;
024 import org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocument;
025 import org.kuali.kfs.module.purap.util.ExpiredOrClosedAccountEntry;
026
027 /**
028 * Contains logic for use by the individual AccountsPayable documents
029 */
030 public interface AccountsPayableService {
031
032 /**
033 * Generates a list of continuation accounts for expired or closed accounts as well as a list of expired or closed
034 * accounts with no continuation accounts.
035 *
036 * @param document The accounts payable document whose accounts we are trying to retrieve.
037 * @return A HashMap where the keys are the string representations of the chart and account of the
038 * original account and the values are the ExpiredOrClosedAccountEntry.
039 */
040 public HashMap<String, ExpiredOrClosedAccountEntry> getExpiredOrClosedAccountList(AccountsPayableDocument document);
041
042 /**
043 * Generates a note of where continuation accounts were used and adds them as a note to the document.
044 *
045 * @param document The accounts payable document to which we're adding the notes.
046 * @param expiredOrClosedAccountList The HashMap where the keys are the string representations of the chart and
047 * account of the original account and the values are the ExpiredOrClosedAccountEntry.
048 */
049 public void generateExpiredOrClosedAccountNote(AccountsPayableDocument document, HashMap<String, ExpiredOrClosedAccountEntry> expiredOrClosedAccountList);
050
051 /**
052 * Adds a warning message to the message list if expired or closed accounts have been used on the document and the
053 * document is not in any of these state: Initiate, In Process or Awaiting Accounts Payable Review and the
054 * current user is a fiscal user.
055 *
056 * @param document The accounts payable document to which we're adding the warning message.
057 */
058 public void generateExpiredOrClosedAccountWarning(AccountsPayableDocument document);
059
060 /**
061 * Performs the replacement of an expired/closed account with a continuation account.
062 *
063 * @param acctLineBase The accounting line whose chart and account we're going to replace.
064 * @param expiredOrClosedAccountList The HashMap where the keys are the string representations of the chart
065 * and account of the original account and the values are the ExpiredOrClosedAccountEntry.
066 */
067 public void processExpiredOrClosedAccount(PurApAccountingLineBase acctLineBase, HashMap<String, ExpiredOrClosedAccountEntry> expiredOrClosedAccountList);
068
069 /**
070 * This method cancels a document, it uses DocumentSpecificService to call the actual logic on the PaymentRequestService
071 * or CreditMemoService as appropriate. In certain cases it will also reopen a closed PurchaseOrderDocument
072 *
073 * @param apDocument The accounts payable document to be canceled.
074 * @param currentNodeName The string representing the current node, which we'll need when we
075 * want to update the document status by node. Note: if this is blank it is assumed
076 * the request is not coming from workflow.
077 */
078 public void cancelAccountsPayableDocument(AccountsPayableDocument apDocument, String currentNodeName);
079
080 /**
081 * This method cancels an AccountsPayableDocument according to the document status.
082 *
083 * @param apDocument The accounts payable document to be canceled.
084 * @param noteText Notes users input when canceling the document
085 */
086 public void cancelAccountsPayableDocumentByCheckingDocumentStatus(AccountsPayableDocument apDocument, String noteText) throws Exception;
087
088 /**
089 * Updates the item list based on what's eligible to be payed on purchase order.
090 *
091 * @param apDocument The accounts payable document containing the items to be updated.
092 */
093 public void updateItemList(AccountsPayableDocument apDocument);
094
095 /**
096 * Determines if item is eligible for payment.
097 *
098 * @param poi The purchase order item whose eligibility for payment is to be determined.
099 * @return boolean true if the item is eligible for payment.
100 */
101 public boolean purchaseOrderItemEligibleForPayment(PurchaseOrderItem poi);
102
103 /**
104 * Performs all the actions on an update document.
105 *
106 * @param purapDocument PurchasingAccountsPayableDocument
107 */
108 public void performLogicForFullEntryCompleted(PurchasingAccountsPayableDocument purapDocument);
109
110
111 public HashMap<String, ExpiredOrClosedAccountEntry> expiredOrClosedAccountsList(PurchaseOrderDocument po);
112
113 }