/* * 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.integration.ar; import java.sql.Date; import java.util.Collection; import java.util.List; import java.util.Map; import org.kuali.kfs.integration.cg.ContractsAndGrantsBillingAgency; import org.kuali.kfs.sys.service.ElectronicPaymentClaimingDocumentGenerationStrategy; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.kew.api.exception.WorkflowException; import org.kuali.rice.krad.document.Document; /** * Methods which allow core KFS modules to interact with the Accounts Receivable module. */ public interface AccountsReceivableModuleService { /** * A method that returns an implementation of the ElectronicPaymentClaimingDocumentGenerationStrategy interface which will claim * electronic payments for the Accounts Receivable module. * * @return an appropriate implementation of ElectronicPaymentClaimingDocumentGenerationStrategy */ public abstract ElectronicPaymentClaimingDocumentGenerationStrategy getAccountsReceivablePaymentClaimingStrategy(); /** * Performs a search against AR customers with the given criteria * * @param fieldValues - Map of criteria to use (field name as map key, value as map value), supports standard lookup wildcards * @return Collection of matching Customers */ public Collection<AccountsReceivableCustomer> searchForCustomers(Map<String, String> fieldValues); /** * Returns the AccountsReceivableCustomer for the given customer number * * @param customerNumber - number of customer to find * @return AccountsReceivableCustomer instance with the customer information */ public AccountsReceivableCustomer findCustomer(String customerNumber); /** * Performs a search against AR customer addresses with the given criteria * * @param fieldValues - Map of criteria to use (field name as map key, value as map value), supports standard lookup wildcards * @return Collection of matching Customer Addresses */ public Collection<AccountsReceivableCustomerAddress> searchForCustomerAddresses(Map<String, String> fieldValues); /** * Returns the AccountsReceivableCustomerAddress for the given customer address identifier * * @param customerNumber - number of customer for address * @param customerAddressIdentifer - id for the customer address to find * @return AccountsReceivableCustomerAddress instance with the customer address information */ public AccountsReceivableCustomerAddress findCustomerAddress(String customerNumber, String customerAddressIdentifer); /** * This method Creates and Saves a customer when CG Agency document does to final. * * @param description * @param agency * @return customerNumber * @throws WorkflowException */ public String createAndSaveCustomer(String description, ContractsAndGrantsBillingAgency agency) throws WorkflowException; /** * get the open customer invoice document with the given document number * * @param customerInvoiceDocumentNumber the given customer invoice document number * @return the open customer invoice document with the given document number */ public AccountsReceivableCustomerInvoice getOpenCustomerInvoice(String customerInvoiceDocumentNumber); /** * get the open amount of the customer invoice document with the given search criteria * * @param customerTypeCodes the given customer type codes * @param customerInvoiceAge the given customer invoice age * @param invoiceDueDateFrom the from date of due date of the invoice * * @return a set of the open amounts indexed by the customer invoice numbers */ public Map<String, KualiDecimal> getCustomerInvoiceOpenAmount(List<String> customerTypeCodes, Integer customerInvoiceAge, Date invoiceDueDateFrom); /** * get the open customer invoice documents with the given search criteria * * @param customerTypeCodes the given customer type codes * @param customerInvoiceAge the given customer invoice age * @param invoiceBillingDateFrom the from date of billing date of the invoice * * @return a set of the open customer invoices */ public Collection<? extends AccountsReceivableCustomerInvoice> getOpenCustomerInvoices(List<String> customerTypeCodes, Integer customerInvoiceAge, Date invoiceBillingDateFrom); /** * Undoes the actions for any invoices which were created for the given trip id (since KFS TEM uses invoices to handle accounting for travel advances) * @param tripId the id of the trip to remove entries for * @organizationOptions the organization options which the trip used */ public void cancelInvoicesForTrip(String tripId, AccountsReceivableOrganizationOptions organizationOptions); /** * Create new Customer object * * @return AccountsReceivableCustomer instance with the new customer */ public AccountsReceivableCustomer createCustomer(); /** * Create new CustomerAddress object * * @return AccountsReceivableCustomerAddress instance with the new customer address */ public AccountsReceivableCustomerAddress createCustomerAddress(); /** * This method builds the new customer number * * @param newCustomer the new customer * @return the new customer number */ public String getNextCustomerNumber(AccountsReceivableCustomer newCustomer); /** * This method saves customer * * @param customer * @return */ public void saveCustomer(AccountsReceivableCustomer customer); /** * This method returns the AccountsReceivableCustomerType for the given customerTypeDescription * * @param customerTypeDescription * @return */ public List<AccountsReceivableCustomerType> findByCustomerTypeDescription(String customerTypeDescription); /** * This method returns Organization Options for the given chart/org. * * @param chartOfAccountsCode chart used to retrieve the Organization Options * @param organizationCode org used to retrieve the Organization Options * @return Organziation Options corresponding to the given chart/org. */ public AccountsReceivableOrganizationOptions getOrgOptionsIfExists(String chartOfAccountsCode, String organizationCode); /** * This method saves the Customer Invoice Document. * * @param customerInvoiceDocument document to save * @throws WorkflowException */ public void saveCustomerInvoiceDocument(AccountsReceivableCustomerInvoice customerInvoiceDocument) throws WorkflowException; /** * This method blanket approves the Customer Invoice Document. * * @param customerInvoiceDocument document to blanket approve * @return document that has been blanket approved * @throws WorkflowException */ public Document blanketApproveCustomerInvoiceDocument(AccountsReceivableCustomerInvoice customerInvoiceDocument) throws WorkflowException; /** * This method returns a new instance of the CustomerInvoiceRecurrenceDetails class. * * @return new CustomerInvoiceRecurrenceDetails object. */ public AccountsReceivableCustomerInvoiceRecurrenceDetails createCustomerInvoiceRecurrenceDetails(); /** * This method returns a new instnace of the AccountsReceivableDocumentHeader class. * * @return new AccountsReceivableDocumentHeader object. */ public AccountsReceivableDocumentHeader createAccountsReceivableDocumentHeader(); /** * This method returns the System Information corresponding to a given chart/org/fiscal year parameters. * * @param chartOfAccountsCode chart code used to find System Information * @param organizationCode org code used to find System Information * @param currentFiscalYear fiscal year used to find System Information * @return System Information for given parameters */ public AccountsReceivableSystemInformation getSystemInformationByProcessingChartOrgAndFiscalYear(String chartOfAccountsCode, String organizationCode, Integer currentFiscalYear); /** * This method returns a Customer Invoice Detail for the given invoice item code, chart and org. * * @param invoiceItemCode invoice item code used to search for a Customer Invoice Detail * @param processingChartCode chart code used to search for a Customer Invoice Detail * @param processingOrgCode org code used to search for a Customer Invoice Detail * * @return Customer Invoice Detail corresponding to the given parameters */ public AccountsReceivableCustomerInvoiceDetail getCustomerInvoiceDetailFromCustomerInvoiceItemCode(String invoiceItemCode, String processingChartCode, String processingOrgCode); /** * This method returns an Object code based on the value of the parameter controlling how the entries for * the accounts receivable offset are determined. * * @param customerInvoiceDetail AccountsReceivableCustomerInvoiceDetail used to determine the object code * * @return Object Code based on the offset generation parameter and the given customerInvoiceDetail */ public String getAccountsReceivableObjectCodeBasedOnReceivableParameter(AccountsReceivableCustomerInvoiceDetail customerInvoiceDetail); /** * This method is used to recalculate a customer invoice detail based on updated values * * @param customerInvoiceDocument * @param detail */ public void recalculateCustomerInvoiceDetail(AccountsReceivableCustomerInvoice customerInvoiceDocument, AccountsReceivableCustomerInvoiceDetail detail); /** * This method is used to make sure the amounts are calculated correctly and the correct AR object code is in place * * @param detail * @param customerInvoiceDocument */ public void prepareCustomerInvoiceDetailForAdd(AccountsReceivableCustomerInvoiceDetail detail, AccountsReceivableCustomerInvoice customerInvoiceDocument); /** * This method returns the total open amount for a given Customer Invoice document. * * @param invoice Customer Invoice document used to calculate the open amount * @return open amount for the invoice */ public KualiDecimal getOpenAmountForCustomerInvoiceDocument(AccountsReceivableCustomerInvoice invoice); /** * Look for open invoice documents by customer number and travel doc Id * * @param customerNumber * @param tripId * @return */ public Collection<AccountsReceivableCustomerInvoice> getOpenInvoiceDocumentsByCustomerNumberForTrip(String customerNumber, String travelDocId); /** * Get account receivable doc header * * @param processingChart * @param processingOrg * @return */ public AccountsReceivableDocumentHeader getNewAccountsReceivableDocumentHeader(String processingChart, String processingOrg); /** * Create customer invoice document * * @return */ public AccountsReceivableCustomerInvoice createCustomerInvoiceDocument(); /** * Create new {@link CustomerCreditMemoDocument} document * * @return */ public AccountsReceivableCustomerCreditMemo createCustomerCreditMemoDocument(); /** * Blanket approve CRM doc * * @param creditMemoDocument * @param annotation * @return * @throws WorkflowException */ public Document blanketApproveCustomerCreditMemoDocument(AccountsReceivableCustomerCreditMemo creditMemoDocument, String annotation) throws WorkflowException; /** * Populate Customer Credit Memo document detail using the document own method * * @param crmDocument * @param invoiceNumber * @param creditAmount * @return */ public AccountsReceivableCustomerCreditMemo populateCustomerCreditMemoDocumentDetails(AccountsReceivableCustomerCreditMemo crmDocument, String invoiceNumber, KualiDecimal creditAmount); }