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.Collection; 019 import java.util.List; 020 021 import org.kuali.kfs.module.ar.businessobject.Customer; 022 import org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail; 023 import org.kuali.kfs.module.ar.businessobject.NonInvoicedDistribution; 024 import org.kuali.kfs.module.ar.document.CustomerInvoiceDocument; 025 import org.kuali.rice.kns.util.KualiDecimal; 026 027 public interface CustomerInvoiceDocumentService { 028 029 /** 030 * Converts discount lines on the customer invoice document to paidapplieds. This method is only intended to be used once the 031 * document is at least in the Processed state, and will throw an error if used on a document in an earlier state. This method 032 * is intended to be called from the CustomerInvoiceDocument.handleRouteStatusChange 033 * 034 * @param invoice A populated Invoice document that is at least PROCESSED. 035 */ 036 public void convertDiscountsToPaidApplieds(CustomerInvoiceDocument invoice); 037 038 /** 039 * Retrieves all invoice documents that are Open with outstanding balances, including workflow headers. 040 * 041 * @return A collection of CustomerInvoiceDocument documents, or an empty list of no matches. 042 */ 043 public Collection<CustomerInvoiceDocument> getAllOpenCustomerInvoiceDocuments(); 044 045 /** 046 * Retrieves all invoice documents that are Open with outstanding balances. Will NOT retrieve workflow headers, so results of 047 * this are not suitable for using to route, save, or otherwise perform workflow operations upon. 048 * 049 * @return 050 */ 051 public Collection<CustomerInvoiceDocument> getAllOpenCustomerInvoiceDocumentsWithoutWorkflow(); 052 053 /** 054 * Gets invoices without workflow headers, retrieves the workflow headers and returns invoices with workflow headers. 055 * 056 * @return 057 */ 058 public Collection<CustomerInvoiceDocument> attachWorkflowHeadersToTheInvoices(Collection<CustomerInvoiceDocument> invoices); 059 060 /** 061 * Retrieves all Open Invoices for this given Customer Number. IMPORTANT - Workflow headers and status are not retrieved by this 062 * method, only the raw Customer Invoice Document from the Database. If you need a full workflow document, you can do use 063 * DocumentService to retrieve each by document number. 064 * 065 * @param customerNumber 066 * @return 067 */ 068 public Collection<CustomerInvoiceDocument> getOpenInvoiceDocumentsByCustomerNumber(String customerNumber); 069 070 /** 071 * Retrieves all Open Invoices for the given Customer Name and Customer Type Code Note that the customerName field is turned 072 * into a 'LIKE customerName*' query. IMPORTANT - Workflow headers and status are not retrieved by this method, only the raw 073 * Customer Invoice Document from the Database. If you need a full workflow document, you can do use DocumentService to retrieve 074 * each by document number. 075 * 076 * @param customerName 077 * @param customerTypeCode 078 * @return 079 */ 080 public Collection getOpenInvoiceDocumentsByCustomerNameByCustomerType(String customerName, String customerTypeCode); 081 082 /** 083 * Retrieves all Open Invoices for the given Customer Name. Note that this is a leading substring search, so whatever is entered 084 * into the customerName field is turned into a 'LIKE customerName*' query. IMPORTANT - Workflow headers and status are not 085 * retrieved by this method, only the raw Customer Invoice Document from the Database. If you need a full workflow document, you 086 * can do use DocumentService to retrieve each by document number. 087 * 088 * @param customerName 089 * @return 090 */ 091 public Collection<CustomerInvoiceDocument> getOpenInvoiceDocumentsByCustomerName(String customerName); 092 093 /** 094 * Retrieves all Open Invoices for the given Customer Type Code. IMPORTANT - Workflow headers and status are not retrieved by 095 * this method, only the raw Customer Invoice Document from the Database. If you need a full workflow document, you can do use 096 * DocumentService to retrieve each by document number. 097 * 098 * @param customerTypeCode 099 * @return 100 */ 101 public Collection<CustomerInvoiceDocument> getOpenInvoiceDocumentsByCustomerType(String customerTypeCode); 102 103 /** 104 * This method sets up default values for customer invoice document on initiation. 105 * 106 * @param document 107 */ 108 public void setupDefaultValuesForNewCustomerInvoiceDocument(CustomerInvoiceDocument document); 109 110 /** 111 * This method sets up default values for customer invoice document when copied. 112 * 113 * @param customerInvoiceDocument 114 */ 115 public void setupDefaultValuesForCopiedCustomerInvoiceDocument(CustomerInvoiceDocument customerInvoiceDocument); 116 117 /** 118 * If the customer number and address identifiers are present, display customer information 119 */ 120 public void loadCustomerAddressesForCustomerInvoiceDocument(CustomerInvoiceDocument customerInvoiceDocument); 121 122 /** 123 * @param customerNumber 124 * @return 125 */ 126 public Collection<CustomerInvoiceDocument> getCustomerInvoiceDocumentsByCustomerNumber(String customerNumber); 127 128 /** 129 * @param customerInvoiceDocumentNumber 130 * @return 131 */ 132 public Collection<CustomerInvoiceDetail> getCustomerInvoiceDetailsForCustomerInvoiceDocument(String customerInvoiceDocumentNumber); 133 134 /** 135 * @param customerInvoiceDocument 136 * @return 137 */ 138 public Collection<CustomerInvoiceDetail> getCustomerInvoiceDetailsForCustomerInvoiceDocument(CustomerInvoiceDocument customerInvoiceDocument); 139 140 141 /** 142 * Cached for better performance 143 * 144 * @param customerInvoiceDocument 145 * @return 146 */ 147 public Collection<CustomerInvoiceDetail> getCustomerInvoiceDetailsForCustomerInvoiceDocumentWithCaching(CustomerInvoiceDocument customerInvoiceDocument); 148 149 /** 150 * @param invoiceNumber 151 * @return 152 */ 153 public Customer getCustomerByOrganizationInvoiceNumber(String invoiceNumber); 154 155 /** 156 * @param organizationInvoiceNumber 157 * @return 158 */ 159 public CustomerInvoiceDocument getInvoiceByOrganizationInvoiceNumber(String organizationInvoiceNumber); 160 161 /** 162 * @param documentNumber 163 * @return 164 */ 165 public Customer getCustomerByInvoiceDocumentNumber(String documentNumber); 166 167 /** 168 * @param invoiceDocumentNumber 169 * @return 170 */ 171 public CustomerInvoiceDocument getInvoiceByInvoiceDocumentNumber(String invoiceDocumentNumber); 172 173 public List<CustomerInvoiceDocument> getPrintableCustomerInvoiceDocumentsByInitiatorPrincipalName(String initiatorPrincipalName); 174 175 public List<CustomerInvoiceDocument> getPrintableCustomerInvoiceDocumentsByBillingChartAndOrg(String chartOfAccountsCode, String organizationCode); 176 177 public List<CustomerInvoiceDocument> getPrintableCustomerInvoiceDocumentsForBillingStatementByBillingChartAndOrg(String chartOfAccountsCode, String organizationCode); 178 179 public List<CustomerInvoiceDocument> getPrintableCustomerInvoiceDocumentsByProcessingChartAndOrg(String chartOfAccountsCode, String organizationCode); 180 181 public List<CustomerInvoiceDocument> getCustomerInvoiceDocumentsByBillingChartAndOrg(String chartOfAccountsCode, String organizationCode); 182 183 public List<CustomerInvoiceDocument> getCustomerInvoiceDocumentsByProcessingChartAndOrg(String chartOfAccountsCode, String organizationCode); 184 185 public Collection<CustomerInvoiceDocument> getCustomerInvoiceDocumentsByAccountNumber(String accountNumber); 186 187 /** 188 * @param documentNumber 189 * @return 190 */ 191 // public Collection<InvoicePaidApplied> getInvoicePaidAppliedsForInvoice(String documentNumber); 192 /** 193 * @param documentNumber 194 * @return 195 */ 196 public Collection<NonInvoicedDistribution> getNonInvoicedDistributionsForInvoice(String documentNumber); 197 198 /** 199 * @param documentNumber 200 * @return 201 */ 202 public KualiDecimal getNonInvoicedTotalForInvoice(String documentNumber); 203 204 /** 205 * @param invoice 206 * @return 207 */ 208 public KualiDecimal getNonInvoicedTotalForInvoice(CustomerInvoiceDocument invoice); 209 210 /** 211 * @param documentNumber 212 * @return 213 */ 214 public KualiDecimal getPaidAppliedTotalForInvoice(String documentNumber); 215 216 /** 217 * @param invoice 218 * @return 219 */ 220 public KualiDecimal getPaidAppliedTotalForInvoice(CustomerInvoiceDocument invoice); 221 222 /** 223 * This method updates the open invoice indicator if amounts have been completely paid off 224 * 225 * @param invoice 226 */ 227 public void closeCustomerInvoiceDocument(CustomerInvoiceDocument customerInvoiceDocument); 228 229 /** 230 * This method... 231 * 232 * @param customerInvoiceDocumentNumber 233 * @return 234 */ 235 public KualiDecimal getOpenAmountForCustomerInvoiceDocument(String customerInvoiceDocumentNumber); 236 237 238 /** 239 * This method... 240 * 241 * @param customerInvoiceDocumentNumber 242 * @return 243 */ 244 public KualiDecimal getOpenAmountForCustomerInvoiceDocument(CustomerInvoiceDocument customerInvoiceDocument); 245 246 public KualiDecimal getOriginalTotalAmountForCustomerInvoiceDocument(CustomerInvoiceDocument customerInvoiceDocument); 247 248 public boolean checkIfInvoiceNumberIsFinal(String invDocumentNumber); 249 }