/*
* 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.dataaccess;
import java.sql.Date;
import java.util.Collection;
import java.util.List;
import org.kuali.kfs.module.purap.document.VendorCreditMemoDocument;
import org.kuali.kfs.module.purap.util.VendorGroupingHelper;
import org.kuali.rice.core.api.util.type.KualiDecimal;
/**
* Credit Memo DAO Interface. Defines DB access methods that a CreditMemoDaoImpl must implement.
*/
public interface CreditMemoDao {
/**
* Get all the credit memos that need to be extracted
*
* @param chartCode - if not null, limit results to a single chart
* @return - Iterator of credit memos
*/
public List<VendorCreditMemoDocument> getCreditMemosToExtract(String chartCode);
/**
* Get all the credit memos that need to be extracted for a particular vendor record.
*
* @param chartCode - if not null, limit results to a single chart
* @param vendorHeaderGeneratedIdentifier
* @param vendorDetailAssignedIdentifier
* @return - Iterator of credit memos
*/
public Collection<VendorCreditMemoDocument> getCreditMemosToExtractByVendor(String chartCode, VendorGroupingHelper vendor );
/**
* This method tests for a duplicate entry of a credit memo by the combination of vendorNumber HeaderId, vendorNumber and
* creditMemoNumber. This method accepts the three values as arguments, and returns a boolean, describing whether a duplicate
* exists in the system or not.
*
* @param vendorNumberHeaderId - vendor number header id
* @param vendorNumber - the composite two-part vendorNumber (headerId-detailId)
* @param creditMemoNumber - the vendor-supplied creditMemoNumber
* @return boolean - true if a match exists in the db, false if not
*/
public boolean duplicateExists(Integer vendorNumberHeaderId, Integer vendorNumberDetailId, String creditMemoNumber);
/**
* This method tests for a duplicate entry of a credit memo by the combination of vendor number header id, vendor detail id,
* date and amount. This method accepts the values as arguments, and returns a boolean, describing whether a duplicate exists in
* the system or not.
*
* @param vendorNumberHeaderId
* @param vendorNumberDetailId
* @param date - date of transaction
* @param amount - amount of transaction
* @return boolean - true if a match exists in the db, false if not
*/
public boolean duplicateExists(Integer vendorNumberHeaderId, Integer vendorNumberDetailId, Date date, KualiDecimal amount);
/**
* This method returns a credit memo document number by id.
*
* @param id - credit memo id
* @return - document number
*/
public String getDocumentNumberByCreditMemoId(Integer id);
/**
* Retrieves a list of potentially active credit memos for a purchase order by
* status code. Active being defined as being enroute and before final. The issue
* is that a status of vendor_tax_review may not mean that it's in review, but could be
* in final (as there isn't a final status code for payment request). Workflow status
* must be checked further after retrieval.
*
* @param purchaseOrderId
* @return
*/
public List<String> getActiveCreditMemoDocumentNumbersForPurchaseOrder(Integer purchaseOrderId);
}