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.PurchaseOrderItem;
19 import org.kuali.ole.module.purap.document.PurchaseOrderDocument;
20 import org.kuali.ole.module.purap.document.VendorCreditMemoDocument;
21 import org.kuali.ole.module.purap.util.VendorGroupingHelper;
22
23 import java.sql.Date;
24 import java.util.Collection;
25 import java.util.List;
26 import java.util.Set;
27
28 /**
29 * Defines methods that must be implemented by a CreditMemoService implementation.
30 */
31 public interface CreditMemoService extends AccountsPayableDocumentSpecificService {
32
33 /**
34 * Populates the document from either the associated payment request document, purchase order document, or vendor detail based
35 * on the credit memo type.
36 *
37 * @param cmDocument - Credit Memo Document to Populate
38 */
39 public void populateDocumentAfterInit(VendorCreditMemoDocument cmDocument);
40
41 /**
42 * Gets the Credit memos that can be extracted.
43 *
44 * @param chartCode Chart to select from.
45 * @return Iterator of credit memos.
46 */
47 public List<VendorCreditMemoDocument> getCreditMemosToExtract(String chartCode);
48
49 /**
50 * Pulls a distinct list of all vendors on CM documents which are ready for extraction.
51 *
52 * @param chartCode
53 * @return
54 */
55 public Set<VendorGroupingHelper> getVendorsOnCreditMemosToExtract(String chartCode);
56
57 /**
58 * Pulls all extractable credit memo documents for a given vendor.
59 *
60 * @param chartCode
61 * @param vendor
62 * @return
63 */
64 public Collection<VendorCreditMemoDocument> getCreditMemosToExtractByVendor(String chartCode, VendorGroupingHelper vendor);
65
66 /**
67 * Get a credit memo by document number.
68 *
69 * @param documentNumber The document number of the credit memo to be retrieved.
70 * @return The credit memo document whose document number matches the input parameter.
71 */
72 public VendorCreditMemoDocument getCreditMemoByDocumentNumber(String documentNumber);
73
74 /**
75 * Retrieves the Credit Memo document by the purapDocumentIdentifier.
76 *
77 * @param purchasingDocumentIdentifier The purapDocumentIdentifier of the credit memo to be retrieved.
78 * @return The credit memo document whose purapDocumentIdentifier matches the input parameter.
79 */
80 public VendorCreditMemoDocument getCreditMemoDocumentById(Integer purchasingDocumentIdentifier);
81
82 /**
83 * Makes call to dao to check for duplicate credit memos, and if one is found a message is returned. A duplicate error happens
84 * if there is an existing credit memo with the same vendor number and credit memo number as the one which is being created, or
85 * same vendor number and credit memo date.
86 *
87 * @param cmDocument - CreditMemoDocument to run duplicate check on.
88 * @return String - message indicating a duplicate was found.
89 */
90 public String creditMemoDuplicateMessages(VendorCreditMemoDocument cmDocument);
91
92 /**
93 * Iterates through the items of the purchase order document and checks for items that have been invoiced.
94 *
95 * @param poDocument - purchase order document containing the lines to check.
96 * @return List<PurchaseOrderItem> - list of invoiced items found.
97 */
98 public List<PurchaseOrderItem> getPOInvoicedItems(PurchaseOrderDocument poDocument);
99
100 /**
101 * Persists the credit memo with business rule checks.
102 *
103 * @param creditMemoDocument - credit memo document to save.
104 */
105 public void populateAndSaveCreditMemo(VendorCreditMemoDocument creditMemoDocument);
106
107 /**
108 * Performs the credit memo item extended price calculation.
109 *
110 * @param cmDocument - credit memo document to calculate.
111 */
112 public void calculateCreditMemo(VendorCreditMemoDocument cmDocument);
113
114 /**
115 * Marks a credit memo as on hold.
116 *
117 * @param cmDocument - credit memo document to hold.
118 * @param note - note explaining why the document is being put on hold.
119 * @return the CreditMemoDocument with updated information.
120 * @throws Exception
121 */
122 public VendorCreditMemoDocument addHoldOnCreditMemo(VendorCreditMemoDocument cmDocument, String note) throws Exception;
123
124 /**
125 * Removes a hold on the credit memo document.
126 *
127 * @param cmDocument - credit memo document to remove hold on.
128 * @param note - note explaining why the credit memo is being taken off hold.
129 * @return the CreditMemoDocument with updated information.
130 */
131 public VendorCreditMemoDocument removeHoldOnCreditMemo(VendorCreditMemoDocument cmDocument, String note) throws Exception;
132
133 /**
134 * This is called by PDP to cancel a CreditMemoDocument that has already been extracted
135 *
136 * @param cmDocument The credit memo document to be resetted.
137 * @param note The note to be added to the credit memo document.
138 */
139 public void resetExtractedCreditMemo(VendorCreditMemoDocument cmDocument, String note);
140
141 /**
142 * This is called by PDP to cancel a CreditMemoDocument that has already been extracted
143 *
144 * @param cmDocument The credit memo document to be canceled.
145 * @param note The note to be added to the document to be canceled.
146 */
147 public void cancelExtractedCreditMemo(VendorCreditMemoDocument cmDocument, String note);
148
149 /**
150 * Reopens the purchase order document related to the given credit memo
151 * document if it is closed.
152 *
153 * @param cmDocument The credit memo document to be used to obtained the
154 * purchase order document to be closed.
155 */
156 public void reopenClosedPO(VendorCreditMemoDocument cmDocument);
157
158 /**
159 * Mark a credit memo is being used on a payment
160 *
161 * @param cm The credit memo document to be marked as paid.
162 * @param processDate The date to be set as the credit memo's paid timestamp.
163 */
164 public void markPaid(VendorCreditMemoDocument cm, Date processDate);
165
166 /**
167 * Determines if there are active credit memos for a purchase order.
168 *
169 * @param purchaseOrderIdentifier
170 * @return
171 */
172 public boolean hasActiveCreditMemosForPurchaseOrder(Integer purchaseOrderIdentifier);
173
174 }
175