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
019 import java.util.Collection;
020 import java.util.Map;
021
022 import org.kuali.kfs.coa.businessobject.ObjectCode;
023 import org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail;
024 import org.kuali.kfs.module.ar.businessobject.CustomerInvoiceWriteoffLookupResult;
025 import org.kuali.kfs.module.ar.document.CustomerInvoiceDocument;
026 import org.kuali.kfs.module.ar.document.CustomerInvoiceWriteoffDocument;
027 import org.kuali.rice.kew.exception.WorkflowException;
028 import org.kuali.rice.kim.bo.Person;
029
030 public interface CustomerInvoiceWriteoffDocumentService {
031
032 /**
033 *
034 * Finalizes the actions of a Writeoff document, once its been completely approved.
035 *
036 * Generates paid applieds for the source invoice, and closes the source invoice.
037 *
038 * @param writeoff The approved Writeoff document to complete.
039 */
040 public void completeWriteoffProcess(CustomerInvoiceWriteoffDocument writeoff);
041
042 /**
043 * This method setups any default values for a new customer invoice document
044 * @param customerInvoiceWriteoffDocument
045 */
046 public void setupDefaultValuesForNewCustomerInvoiceWriteoffDocument(CustomerInvoiceWriteoffDocument customerInvoiceWriteoffDocument);
047
048 /**
049 * This method returns true if a customer invoice writeoff document is approved
050 * @param customerInvoiceWriteoffDocumentNumber
051 * @return
052 */
053 public boolean isCustomerInvoiceWriteoffDocumentApproved(String customerInvoiceWriteoffDocumentNumber);
054
055 /**
056 * This method returns a collection of customer invoice documents that are eligible for writeoff
057 * @param fieldValues
058 * @return
059 */
060 public Collection<CustomerInvoiceWriteoffLookupResult> getCustomerInvoiceDocumentsForInvoiceWriteoffLookup(Map<String, String> fieldValues);
061
062 /**
063 * This method filters invoices which have related CRMs and/or writeoffs in route
064 * @param customerInvoiceDocuments
065 * @return filteredInvoices
066 */
067 public Collection<CustomerInvoiceDocument> filterInvoices(Collection<CustomerInvoiceDocument> customerInvoiceDocuments);
068
069 /**
070 * This method checks if there is no another CRM in route for the invoice
071 * Not in route if CRM status is one of the following: processed, cancelled, or disapproved
072 * @param invoice
073 * @return
074 */
075 public boolean checkIfThereIsNoAnotherCRMInRouteForTheInvoice(String invoiceDocumentNumber);
076
077 /**
078 * This method checks if there is no another writeoff in route for the invoice
079 * Not in route if writeoff status is one of the following: processed, cancelled, or disapproved
080 *
081 * @param invoice
082 * @return
083 */
084 public boolean checkIfThereIsNoAnotherWriteoffInRouteForTheInvoice(String invoiceDocumentNumber);
085
086 /**
087 *
088 * Accepts a lookup result and creates a batch file dropped into the batch system for later asynchronous
089 * processing.
090 *
091 * @param personId
092 * @param customerInvoiceWriteoffLookupResults
093 * @return filename and path of created batch file
094 */
095 public String sendCustomerInvoiceWriteoffDocumentsToBatch(Person person, Collection<CustomerInvoiceWriteoffLookupResult> customerInvoiceWriteoffLookupResults);
096
097 /**
098 *
099 * Creates a new Invoice Writeoff Document based on the indicated Invoice doc number and the initiator.
100 * @param initiator Person who initiated the writeoffs.
101 * @param invoiceNumber Invoice document number to base the writeoff on.
102 * @param note User note to be added to the document.
103 * @return Returns the Document Number of the Invoice Writeoff document created.
104 * @throws WorkflowException
105 */
106 public String createCustomerInvoiceWriteoffDocument(Person initiator, String invoiceNumber, String note) throws WorkflowException;
107
108
109 public String getFinancialObjectCode(CustomerInvoiceDetail postable, CustomerInvoiceWriteoffDocument poster, boolean isUsingOrgAcctDefaultWriteoffFAU, boolean isUsingChartForWriteoff, String chartOfAccountsCode);
110
111
112 public ObjectCode getObjectCode(CustomerInvoiceDetail postable, CustomerInvoiceWriteoffDocument poster, boolean isUsingOrgAcctDefaultWriteoffFAU, boolean isUsingChartForWriteoff, String chartOfAccountsCode);
113
114 }