1 /* 2 * The Kuali Financial System, a comprehensive financial management system for higher education. 3 * 4 * Copyright 2005-2014 The Kuali Foundation 5 * 6 * This program is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU Affero General Public License as 8 * published by the Free Software Foundation, either version 3 of the 9 * License, or (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU Affero General Public License for more details. 15 * 16 * You should have received a copy of the GNU Affero General Public License 17 * along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 package org.kuali.kfs.module.purap.document.service; 20 21 import java.sql.Date; 22 import java.util.Collection; 23 import java.util.Iterator; 24 import java.util.List; 25 import java.util.Set; 26 27 import org.kuali.kfs.module.purap.businessobject.PurchaseOrderItem; 28 import org.kuali.kfs.module.purap.document.PurchaseOrderDocument; 29 import org.kuali.kfs.module.purap.document.VendorCreditMemoDocument; 30 import org.kuali.kfs.module.purap.util.VendorGroupingHelper; 31 32 /** 33 * Defines methods that must be implemented by a CreditMemoService implementation. 34 */ 35 public interface CreditMemoService extends AccountsPayableDocumentSpecificService { 36 37 /** 38 * Populates the document from either the associated payment request document, purchase order document, or vendor detail based 39 * on the credit memo type. 40 * 41 * @param cmDocument - Credit Memo Document to Populate 42 */ 43 public void populateDocumentAfterInit(VendorCreditMemoDocument cmDocument); 44 45 /** 46 * Gets the Credit memos that can be extracted. 47 * 48 * @param chartCode Chart to select from. 49 * @return Iterator of credit memos. 50 */ 51 public List<VendorCreditMemoDocument> getCreditMemosToExtract(String chartCode); 52 53 /** 54 * Pulls a distinct list of all vendors on CM documents which are ready for extraction. 55 * 56 * @param chartCode 57 * @return 58 */ 59 public Set<VendorGroupingHelper> getVendorsOnCreditMemosToExtract( String chartCode); 60 61 /** 62 * Pulls all extractable credit memo documents for a given vendor. 63 * 64 * @param chartCode 65 * @param vendor 66 * @return 67 */ 68 public Collection<VendorCreditMemoDocument> getCreditMemosToExtractByVendor( String chartCode, VendorGroupingHelper vendor ); 69 70 /** 71 * Get a credit memo by document number. 72 * 73 * @param documentNumber The document number of the credit memo to be retrieved. 74 * @return The credit memo document whose document number matches the input parameter. 75 */ 76 public VendorCreditMemoDocument getCreditMemoByDocumentNumber(String documentNumber); 77 78 /** 79 * Retrieves the Credit Memo document by the purapDocumentIdentifier. 80 * 81 * @param purchasingDocumentIdentifier The purapDocumentIdentifier of the credit memo to be retrieved. 82 * @return The credit memo document whose purapDocumentIdentifier matches the input parameter. 83 */ 84 public VendorCreditMemoDocument getCreditMemoDocumentById(Integer purchasingDocumentIdentifier); 85 86 /** 87 * Makes call to dao to check for duplicate credit memos, and if one is found a message is returned. A duplicate error happens 88 * if there is an existing credit memo with the same vendor number and credit memo number as the one which is being created, or 89 * same vendor number and credit memo date. 90 * 91 * @param cmDocument - CreditMemoDocument to run duplicate check on. 92 * @return String - message indicating a duplicate was found. 93 */ 94 public String creditMemoDuplicateMessages(VendorCreditMemoDocument cmDocument); 95 96 /** 97 * Iterates through the items of the purchase order document and checks for items that have been invoiced. 98 * 99 * @param poDocument - purchase order document containing the lines to check. 100 * @return List<PurchaseOrderItem> - list of invoiced items found. 101 */ 102 public List<PurchaseOrderItem> getPOInvoicedItems(PurchaseOrderDocument poDocument); 103 104 /** 105 * Persists the credit memo with business rule checks. 106 * 107 * @param creditMemoDocument - credit memo document to save. 108 */ 109 public void populateAndSaveCreditMemo(VendorCreditMemoDocument creditMemoDocument); 110 111 /** 112 * Performs the credit memo item extended price calculation. 113 * 114 * @param cmDocument - credit memo document to calculate. 115 */ 116 public void calculateCreditMemo(VendorCreditMemoDocument cmDocument); 117 118 /** 119 * Marks a credit memo as on hold. 120 * 121 * @param cmDocument - credit memo document to hold. 122 * @param note - note explaining why the document is being put on hold. 123 * @return the CreditMemoDocument with updated information. 124 * @throws Exception 125 */ 126 public VendorCreditMemoDocument addHoldOnCreditMemo(VendorCreditMemoDocument cmDocument, String note) throws Exception; 127 128 /** 129 * Removes a hold on the credit memo document. 130 * 131 * @param cmDocument - credit memo document to remove hold on. 132 * @param note - note explaining why the credit memo is being taken off hold. 133 * @return the CreditMemoDocument with updated information. 134 */ 135 public VendorCreditMemoDocument removeHoldOnCreditMemo(VendorCreditMemoDocument cmDocument, String note) throws Exception; 136 137 /** 138 * This is called by PDP to cancel a CreditMemoDocument that has already been extracted 139 * @param cmDocument The credit memo document to be resetted. 140 * @param note The note to be added to the credit memo document. 141 */ 142 public void resetExtractedCreditMemo(VendorCreditMemoDocument cmDocument, String note); 143 144 /** 145 * This is called by PDP to cancel a CreditMemoDocument that has already been extracted 146 * 147 * @param cmDocument The credit memo document to be canceled. 148 * @param note The note to be added to the document to be canceled. 149 */ 150 public void cancelExtractedCreditMemo(VendorCreditMemoDocument cmDocument, String note); 151 152 /** 153 * Reopens the purchase order document related to the given credit memo 154 * document if it is closed. 155 * 156 * @param cmDocument The credit memo document to be used to obtained the 157 * purchase order document to be closed. 158 */ 159 public void reopenClosedPO(VendorCreditMemoDocument cmDocument); 160 161 /** 162 * Mark a credit memo is being used on a payment 163 * 164 * @param cm The credit memo document to be marked as paid. 165 * @param processDate The date to be set as the credit memo's paid timestamp. 166 */ 167 public void markPaid(VendorCreditMemoDocument cm, Date processDate); 168 169 /** 170 * Determines if there are active credit memos for a purchase order. 171 * 172 * @param purchaseOrderIdentifier 173 * @return 174 */ 175 public boolean hasActiveCreditMemosForPurchaseOrder(Integer purchaseOrderIdentifier); 176 177 } 178