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.CustomerCreditMemoDetail;
022 import org.kuali.kfs.module.ar.businessobject.CustomerInvoiceDetail;
023 import org.kuali.kfs.module.ar.document.CustomerInvoiceDocument;
024
025 /**
026 * This class provides services related to the customer invoice document
027 */
028 public interface CustomerInvoiceDetailService {
029
030 /**
031 * This method returns a customer invoice detail for use on the CustomerInvoiceDocumentAction. If corresponding organization
032 * accounting default exists for billing chart and org, then the customer invoice detail is defaulted using the organization
033 * accounting default values.
034 *
035 * @return
036 */
037 public CustomerInvoiceDetail getCustomerInvoiceDetailFromOrganizationAccountingDefault(Integer universityFiscalYear, String chartOfAccountsCode, String organizationCode);
038
039 /**
040 * This method returns a customer invoice detail for current user and current fiscal year for use on the
041 * CustomerInvoiceDocumentAction. If corresponding organization accounting default exists for billing chart and org, then the
042 * customer invoice detail is defaulted using the organization accounting default values.
043 *
044 * @return
045 */
046 public CustomerInvoiceDetail getCustomerInvoiceDetailFromOrganizationAccountingDefaultForCurrentYear();
047
048 /**
049 * This method ...
050 *
051 * @param accountNumber
052 * @return
053 */
054 public List<String> getCustomerInvoiceDocumentNumbersByAccountNumber(String accountNumber);
055
056 /**
057 * This method returns a customer invoice detail from a customer invoice item code for a current user
058 *
059 * @param invoiceItemCode
060 * @return
061 */
062 public CustomerInvoiceDetail getCustomerInvoiceDetailFromCustomerInvoiceItemCodeForCurrentUser(String invoiceItemCode);
063
064 /**
065 * This method...
066 *
067 * @param invoiceItemCode
068 * @param chartOfAccountsCode
069 * @param organizationCode
070 * @return
071 */
072 public CustomerInvoiceDetail getCustomerInvoiceDetailFromCustomerInvoiceItemCode(String invoiceItemCode, String chartOfAccountsCode, String organizationCode);
073
074 /**
075 * This method returns a discount customer invoice detail based on a customer invoice detail, the chart of accounts code
076 *
077 * @param customerInvoiceDetail
078 * @param chartOfAccountsCode
079 * @param organizationCode
080 * @return
081 */
082 public CustomerInvoiceDetail getDiscountCustomerInvoiceDetail(CustomerInvoiceDetail customerInvoiceDetail, Integer universityFiscalYear, String chartOfAccountsCode, String organizationCode);
083
084 /**
085 * This method returns a discount customer invoice detail for the current year
086 *
087 * @param customerInvoiceDetail
088 * @param chartOfAccountsCode
089 * @param organizationCode
090 * @return
091 */
092 public CustomerInvoiceDetail getDiscountCustomerInvoiceDetailForCurrentYear(CustomerInvoiceDetail customerInvoiceDetail, CustomerInvoiceDocument customerInvoiceDocument);
093
094 /**
095 * This method returns a customer invoice detail based on invoice document number and invoice item sequence number
096 *
097 * @param documentNumber
098 * @param sequenceNumber
099 * @return
100 */
101 public CustomerInvoiceDetail getCustomerInvoiceDetail(String documentNumber, Integer sequenceNumber);
102
103
104 /**
105 * This method is used to recalculate a customer invoice detail based on updated values
106 *
107 * @param customerInvoiceDetail
108 */
109 public void recalculateCustomerInvoiceDetail(CustomerInvoiceDocument document, CustomerInvoiceDetail customerInvoiceDetail);
110
111 /**
112 * This method is used to update account for corresponding discount line based on parent line's account
113 *
114 * @param parentDiscountCustomerInvoiceDetail
115 */
116 public void updateAccountsForCorrespondingDiscount(CustomerInvoiceDetail parentDiscountCustomerInvoiceDetail);
117
118 /**
119 * This method is used to update the accounts receivable object code if receivable options 1 or 2 are selected.
120 *
121 * @param customerInvoiceDetail
122 */
123 public void updateAccountsReceivableObjectCode(CustomerInvoiceDetail customerInvoiceDetail);
124
125 /**
126 * This method returns the correct accounts receivable object code based on a receivable parameter.
127 *
128 * @return
129 */
130 public String getAccountsReceivableObjectCodeBasedOnReceivableParameter(CustomerInvoiceDetail customerInvoiceDetail);
131
132 /**
133 * This method is used to make sure the amounts are calculated correctly and the correct AR object code is in place
134 *
135 * @param customerInvoiceDetail
136 * @param customerInvoiceDocument
137 */
138 public void prepareCustomerInvoiceDetailForAdd(CustomerInvoiceDetail customerInvoiceDetail, CustomerInvoiceDocument customerInvoiceDocument);
139
140 /**
141 * Updates the specified customerInvoiceDetail as part of the process needed when the associated customerInvoiceDocument is being corrected.
142 *
143 * @param customerInvoiceDetail the specified customerInvoiceDetail to be updated.
144 * @param customerInvoiceDocument the associated customerInvoiceDocument being corrected.
145 *
146 public void prepareCustomerInvoiceDetailForErrorCorrection(CustomerInvoiceDetail customerInvoiceDetail, CustomerInvoiceDocument customerInvoiceDocument);
147 */
148
149 /**
150 * @param customerInvoiceDocument
151 * @return
152 */
153 public Collection<CustomerInvoiceDetail> getCustomerInvoiceDetailsForInvoice(CustomerInvoiceDocument customerInvoiceDocument);
154
155 /**
156 * @param customerInvoiceDocumentNumber
157 * @return
158 */
159 public Collection<CustomerInvoiceDetail> getCustomerInvoiceDetailsForInvoice(String customerInvoiceDocumentNumber);
160
161 /**
162 * Cached for better performance...
163 *
164 * @param customerInvoiceDocumentNumber
165 * @return List of customer invoice details
166 */
167 public Collection<CustomerInvoiceDetail> getCustomerInvoiceDetailsForInvoiceWithCaching(String customerInvoiceDocumentNumber);
168
169 /**
170 * Gets the financial object code for the specified customerCreditMemoDetail.
171 *
172 * @param customerInvoiceDetail the specified customerCreditMemoDetail
173 * @return the financial object code for the specified customerCreditMemoDetail
174 *
175 public String getFinancialObjectCode(CustomerCreditMemoDetail customerCreditMemoDetail);
176 */
177
178 /**
179 * Updates the financial object code for the specified customerCreditMemoDetail if it's for a prior year(s) customer invoice.
180 *
181 * @param customerInvoiceDetail the specified customerCreditMemoDetail
182 *
183 public void updateFinancialObjectCode(CustomerCreditMemoDetail customerCreditMemoDetail);
184 */
185 }