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.ar.document.service;
017
018 import java.util.List;
019
020 import org.kuali.kfs.module.ar.businessobject.CashControlDetail;
021 import org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail;
022 import org.kuali.kfs.module.ar.businessobject.InvoicePaidApplied;
023 import org.kuali.kfs.module.ar.document.CashControlDocument;
024 import org.kuali.kfs.module.ar.document.CustomerInvoiceDocument;
025 import org.kuali.kfs.module.ar.document.PaymentApplicationDocument;
026 import org.kuali.rice.kew.exception.WorkflowException;
027
028 public interface PaymentApplicationDocumentService {
029
030 /**
031 *
032 * Retrieves the CashControlDetail line associated with the passed-in PaymentApplication Document.
033 *
034 * @param document A valid PaymentApplication Document
035 * @return The associated CashControlDetail, if exists, or null if not.
036 */
037 public CashControlDetail getCashControlDetailForPaymentApplicationDocument(PaymentApplicationDocument document);
038
039 /**
040 *
041 * Retrieves the CashControlDetail line associated with the passed-in PaymentApplication Document number.
042 *
043 * @param payAppDocNumber A valid PaymentApplication Document Number
044 * @return The associated CashControlDetail, if exists, or null if not.
045 */
046 public CashControlDetail getCashControlDetailForPayAppDocNumber(String payAppDocNumber);
047
048 /**
049 *
050 * Retrieves the CashControlDocument associated with the passed-in PaymentApplication Document.
051 *
052 * @param document A valid PaymentApplication Document
053 * @return The associated CashControlDocument, if exists, or null if not.
054 */
055 public CashControlDocument getCashControlDocumentForPaymentApplicationDocument(PaymentApplicationDocument document);
056
057 /**
058 *
059 * Retrieves the CashControlDocument associated with the passed-in PaymentApplication Document number.
060 * @param payAppDocNumber A valid PaymentApplication Document number
061 * @return The associated CashControlDocument, if exists, or null if not.
062 */
063 public CashControlDocument getCashControlDocumentForPayAppDocNumber(String payAppDocNumber);
064
065 /**
066 *
067 * Creates PaidApplieds for all the invoice lines on the passed in InvoiceDocument, on the passed in
068 * PaymentApplicationDocument.
069 *
070 * This method will overwrite any existing PaidApplieds on the document, it assumes an empty
071 * PayApp doc with no paidapplieds.
072 *
073 * This method does no checking to prevent over or under applying, it assumes that the documents have
074 * been setup such that it will work correctly. So if this method is used to over or under apply, then
075 * the resulting PaymentApplicationDocument will fail business rules validation.
076 *
077 * @param customerInvoiceDocument
078 * @param paymentApplicationDocument
079 * @return
080 */
081 public PaymentApplicationDocument createInvoicePaidAppliedsForEntireInvoiceDocument(CustomerInvoiceDocument customerInvoiceDocument, PaymentApplicationDocument paymentApplicationDocument);
082
083 /**
084 * This method creates an invoice paid applied for the given customer invoice detail.
085 *
086 * This method assumes that no existing paidApplieds are already on the document.
087 *
088 * @param customerInvoiceDetail the customer invoice detail for which we want to create the invoice paid applied
089 * @param applicationDocNbr the payment application document number
090 * @param universityFiscalYear the university fiscal year
091 * @param universityFiscalPeriodCode the university fiscal period code
092 * @param amount the amount to be applied
093 * @return the created invoice paid applied if it did not exist, null otherwise
094 */
095 public InvoicePaidApplied createInvoicePaidAppliedForInvoiceDetail(CustomerInvoiceDetail customerInvoiceDetail, PaymentApplicationDocument paymentApplicationDocument, Integer paidAppliedItemNumber);
096
097 /**
098 * This method is used in the lockbox process to create a PA document which is then auto-approved when the amount on the invoice matches
099 * the amount on the lockbox.
100 *
101 * @param customerInvoiceDocument
102 * @return
103 */
104 public PaymentApplicationDocument createPaymentApplicationToMatchInvoice(CustomerInvoiceDocument customerInvoiceDocument) throws WorkflowException;
105
106 public PaymentApplicationDocument createSaveAndApprovePaymentApplicationToMatchInvoice(CustomerInvoiceDocument customerInvoiceDocument, String approvalAnnotation, List workflowNotificationRecipients) throws WorkflowException;
107 public PaymentApplicationDocument createAndSavePaymentApplicationToMatchInvoice(CustomerInvoiceDocument customerInvoiceDocument) throws WorkflowException;
108
109 /**
110 * This method returns true if invoicePaidApplied is the applied payment for
111 * the customer invoice detail based on document number and item/sequence number.
112 *
113 * @param customerInvoiceDetail
114 * @param invoicePaidApplied
115 * @return
116 */
117 public boolean customerInvoiceDetailPairsWithInvoicePaidApplied(CustomerInvoiceDetail customerInvoiceDetail, InvoicePaidApplied invoicePaidApplied);
118
119 }