View Javadoc
1   /*
2    * Copyright 2007 The Kuali Foundation
3    * 
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    * http://www.opensource.org/licenses/ecl2.php
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.ole.module.purap.document.service;
17  
18  import org.kuali.ole.module.purap.businessobject.PurApAccountingLineBase;
19  import org.kuali.ole.module.purap.businessobject.PurchaseOrderItem;
20  import org.kuali.ole.module.purap.document.AccountsPayableDocument;
21  import org.kuali.ole.module.purap.document.PurchaseOrderDocument;
22  import org.kuali.ole.module.purap.document.PurchasingAccountsPayableDocument;
23  import org.kuali.ole.module.purap.util.ExpiredOrClosedAccountEntry;
24  
25  import java.util.HashMap;
26  
27  /**
28   * Contains logic for use by the individual AccountsPayable documents
29   */
30  public interface AccountsPayableService {
31  
32      /**
33       * Generates a list of continuation accounts for expired or closed accounts as well as a list of expired or closed
34       * accounts with no continuation accounts.
35       *
36       * @param document The accounts payable document whose accounts we are trying to retrieve.
37       * @return A HashMap where the keys are the string representations of the chart and account of the
38       *         original account and the values are the ExpiredOrClosedAccountEntry.
39       */
40      public HashMap<String, ExpiredOrClosedAccountEntry> getExpiredOrClosedAccountList(AccountsPayableDocument document);
41  
42      /**
43       * Generates a note of where continuation accounts were used and adds them as a note to the document.
44       *
45       * @param document                   The accounts payable document to which we're adding the notes.
46       * @param expiredOrClosedAccountList The HashMap where the keys are the string representations of the chart and
47       *                                   account of the original account and the values are the ExpiredOrClosedAccountEntry.
48       */
49      public void generateExpiredOrClosedAccountNote(AccountsPayableDocument document, HashMap<String, ExpiredOrClosedAccountEntry> expiredOrClosedAccountList);
50  
51      /**
52       * Adds a warning message to the message list if expired or closed accounts have been used on the document and the
53       * document is not in any of these state: Initiate, In Process or Awaiting Accounts Payable Review and the
54       * current user is a fiscal user.
55       *
56       * @param document The accounts payable document to which we're adding the warning message.
57       */
58      public void generateExpiredOrClosedAccountWarning(AccountsPayableDocument document);
59  
60      /**
61       * Performs the replacement of an expired/closed account with a continuation account.
62       *
63       * @param acctLineBase               The accounting line whose chart and account we're going to replace.
64       * @param expiredOrClosedAccountList The HashMap where the keys are the string representations of the chart
65       *                                   and account of the original account and the values are the ExpiredOrClosedAccountEntry.
66       */
67      public void processExpiredOrClosedAccount(PurApAccountingLineBase acctLineBase, HashMap<String, ExpiredOrClosedAccountEntry> expiredOrClosedAccountList);
68  
69      /**
70       * This method cancels a document, it uses DocumentSpecificService to call the actual logic on the PaymentRequestService
71       * or CreditMemoService as appropriate.  In certain cases it will also reopen a closed PurchaseOrderDocument
72       *
73       * @param apDocument      The accounts payable document to be canceled.
74       * @param currentNodeName The string representing the current node, which we'll need when we
75       *                        want to update the document status by node.  Note: if this is blank it is assumed
76       *                        the request is not coming from workflow.
77       */
78      public void cancelAccountsPayableDocument(AccountsPayableDocument apDocument, String currentNodeName);
79  
80      /**
81       * This method cancels an AccountsPayableDocument according to the document status.
82       *
83       * @param apDocument The accounts payable document to be canceled.
84       * @param noteText   Notes users input when canceling the document
85       */
86      public void cancelAccountsPayableDocumentByCheckingDocumentStatus(AccountsPayableDocument apDocument, String noteText) throws Exception;
87  
88      /**
89       * Updates the item list based on what's eligible to be payed on purchase order.
90       *
91       * @param apDocument The accounts payable document containing the items to be updated.
92       */
93      public void updateItemList(AccountsPayableDocument apDocument);
94  
95      /**
96       * Determines if item is eligible for payment.
97       *
98       * @param poi The purchase order item whose eligibility for payment is to be determined.
99       * @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     /**
114      * checks if an accounting line with zero dollar amount can be copied from PO to PREQ.  This will check
115      * the system parameter COPY_ACCOUNTING_LINES_WITH_ZERO_AMOUNT_FROM_PO_TO_PREQ_IND and determines if the
116      * line can be copied or not.
117      *
118      * @return true if the system parameter value is Y else returns N.
119      */
120     public boolean canCopyAccountingLinesWithZeroAmount();
121 }