View Javadoc
1   /*
2    * Copyright 2007 The Kuali Foundation
3    * 
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * 
8    * http://www.opensource.org/licenses/ecl2.php
9    * 
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.ole.sys.service;
17  
18  import java.util.Collection;
19  import java.util.Iterator;
20  import java.util.List;
21  import java.util.Map;
22  
23  import org.kuali.ole.coa.businessobject.Account;
24  import org.kuali.ole.coa.businessobject.ObjectCode;
25  import org.kuali.ole.gl.businessobject.Balance;
26  import org.kuali.ole.gl.businessobject.Encumbrance;
27  import org.kuali.ole.sys.businessobject.Bank;
28  import org.kuali.ole.sys.businessobject.GeneralLedgerPendingEntry;
29  import org.kuali.ole.sys.businessobject.GeneralLedgerPendingEntrySequenceHelper;
30  import org.kuali.ole.sys.businessobject.GeneralLedgerPendingEntrySourceDetail;
31  import org.kuali.ole.sys.document.GeneralLedgerPendingEntrySource;
32  import org.kuali.ole.sys.document.GeneralLedgerPostingDocument;
33  import org.kuali.rice.core.api.util.type.KualiDecimal;
34  
35  /**
36   * This interface defines methods that a GeneralLedgerPendingEntry Service must provide
37   */
38  public interface GeneralLedgerPendingEntryService {
39  
40      /**
41       * This method...
42       * 
43       * @param universityFiscalYears
44       * @param chartOfAccountsCode
45       * @param accountNumber
46       * @param isDebit
47       * @return
48       */
49      public KualiDecimal getCashSummary(List universityFiscalYears, String chartOfAccountsCode, String accountNumber, boolean isDebit);
50  
51      /**
52       * This method...
53       * 
54       * @param universityFiscalYears
55       * @param chartOfAccountsCode
56       * @param accountNumber
57       * @param isDebit
58       * @return
59       */
60      public KualiDecimal getActualSummary(List universityFiscalYears, String chartOfAccountsCode, String accountNumber, boolean isDebit);
61  
62      /**
63       * This method...
64       * 
65       * @param universityFiscalYear
66       * @param chartOfAccountsCode
67       * @param accountNumber
68       * @param sufficientFundsObjectCode
69       * @param isDebit
70       * @param isYearEnd
71       * @return
72       */
73      public KualiDecimal getExpenseSummary(Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber, String sufficientFundsObjectCode, boolean isDebit, boolean isYearEnd);
74  
75      /**
76       * This method...
77       * 
78       * @param universityFiscalYear
79       * @param chartOfAccountsCode
80       * @param accountNumber
81       * @param sufficientFundsObjectCode
82       * @param isDebit
83       * @param isYearEnd
84       * @return
85       */
86      public KualiDecimal getEncumbranceSummary(Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber, String sufficientFundsObjectCode, boolean isDebit, boolean isYearEnd);
87  
88      /**
89       * This method...
90       * 
91       * @param universityFiscalYear
92       * @param chartOfAccountsCode
93       * @param accountNumber
94       * @param sufficientFundsObjectCode
95       * @param isYearEnd
96       * @return
97       */
98      public KualiDecimal getBudgetSummary(Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber, String sufficientFundsObjectCode, boolean isYearEnd);
99  
100     /**
101      * @param transactionEntrySequenceId
102      * @param documentHeaderId
103      */
104     public GeneralLedgerPendingEntry getByPrimaryId(Integer transactionEntrySequenceId, String documentHeaderId);
105 
106     /**
107      * Invokes generateGeneralLedgerPendingEntries method on the transactional document.
108      * 
109      * @param document - document whose pending entries need generated
110      * @return whether the business rules succeeded
111      */
112     public boolean generateGeneralLedgerPendingEntries(GeneralLedgerPendingEntrySource document);
113 
114     /**
115      * The fiscal year and period is null in quite a few glpe's. This will put in a sensible default.
116      * 
117      * @param glpe
118      */
119     public void fillInFiscalPeriodYear(GeneralLedgerPendingEntry glpe);
120 
121     /**
122      * @param generalLedgerPendingEntry
123      */
124     public void save(GeneralLedgerPendingEntry generalLedgerPendingEntry);
125 
126     /**
127      * @param documentHeaderId
128      */
129     public void delete(String documentHeaderId);
130 
131     /**
132      * Delete all pending entries for a specific document approved code
133      * 
134      * @param financialDocumentApprovedCode
135      */
136     public void deleteByFinancialDocumentApprovedCode(String financialDocumentApprovedCode);
137 
138     /**
139      * Does the given account have any general ledger entries? It is necessary to check this before closing an account.
140      * 
141      * @param account
142      * @return
143      */
144     public boolean hasPendingGeneralLedgerEntry(Account account);
145 
146     /**
147      * The method finds all pending ledger entries
148      * 
149      * @return all pending ledger entries
150      */
151     public Iterator findApprovedPendingLedgerEntries();
152 
153     /**
154      * This method retrieves all pending ledger entries for the given encumbrance
155      * 
156      * @param encumbrance the encumbrance entry
157      * @param isApproved the flag that indicates whether the pending entries are approved or don't care
158      * @return all pending ledger entries of the given encumbrance
159      */
160     public Iterator findPendingLedgerEntries(Encumbrance encumbrance, boolean isApproved);
161 
162     /**
163      * This method retrieves all pending ledger entries for the given encumbrance
164      * 
165      * @param balance the balance entry
166      * @param isApproved the flag that indicates whether the pending entries are approved or don't care
167      * @param isConsolidated determine whether the search results are consolidated
168      * @return all pending ledger entries of the given encumbrance
169      */
170     public Iterator findPendingLedgerEntries(Balance balance, boolean isApproved, boolean isConsolidated);
171 
172     /**
173      * This method retrieves all pending ledger entries matching the given entry criteria
174      * 
175      * @param isApproved the flag that indicates whether the pending entries are approved or don't care
176      * @param fieldValues the input fields and values
177      * @return all pending ledger entries matching the given balance criteria
178      */
179     public Iterator findPendingLedgerEntriesForEntry(Map fieldValues, boolean isApproved);
180 
181     /**
182      * This method retrieves all pending ledger entries matching the given balance criteria
183      * 
184      * @param isApproved the flag that indicates whether the pending entries are approved or don't care
185      * @param fieldValues the input fields and values
186      * @return all pending ledger entries matching the given balance criteria
187      */
188     public Iterator findPendingLedgerEntriesForBalance(Map fieldValues, boolean isApproved);
189 
190     /**
191      * This method retrieves all pending ledger entries that may belong to cash balance in the future
192      * 
193      * @param isApproved the flag that indicates whether the pending entries are approved or don't care
194      * @return all pending ledger entries that may belong to cash balance
195      */
196     public Iterator findPendingLedgerEntriesForCashBalance(Map fieldValues, boolean isApproved);
197 
198     /**
199      * This method retrieves all pending ledger entries that may belong to encumbrance table in the future
200      * 
201      * @param isApproved the flag that indicates whether the pending entries are approved or don't care
202      * @return all pending ledger entries that may belong to encumbrance table
203      */
204     public Iterator findPendingLedgerEntriesForEncumbrance(Map fieldValues, boolean isApproved);
205 
206     /**
207      * This method retrieves all pending ledger entries that may belong to the given account balance record in the future
208      * 
209      * @param fieldValues
210      * @param isApproved the flag that indicates whether the pending entries are approved or don't care
211      * @return all pending ledger entries that may belong to encumbrance table
212      */
213     public Iterator findPendingLedgerEntrySummaryForAccountBalance(Map fieldValues, boolean isApproved);
214 
215     /**
216      * This method retrieves all pending ledger entries that may belong to the given account balance record in the future
217      * 
218      * @param fieldValues
219      * @param isApproved the flag that indicates whether the pending entries are approved or don't care
220      * @return all pending ledger entries that may belong to encumbrance table
221      */
222     public Iterator findPendingLedgerEntriesForAccountBalance(Map fieldValues, boolean isApproved);
223 
224     /**
225      * @param fieldValues
226      * @return
227      */
228     public Collection findPendingEntries(Map fieldValues, boolean isApproved);
229 
230     /**
231      * This populates an empty GeneralLedgerPendingEntry explicitEntry object instance with default values.
232      * 
233      * @param accountingDocument
234      * @param accountingLine
235      * @param sequenceHelper
236      * @param explicitEntry
237      */
238     public void populateExplicitGeneralLedgerPendingEntry(GeneralLedgerPendingEntrySource poster, GeneralLedgerPendingEntrySourceDetail postable, GeneralLedgerPendingEntrySequenceHelper sequenceHelper, GeneralLedgerPendingEntry explicitEntry);
239 
240     /**
241      * Convenience method to build a GLPE without a generalLedgerPendingEntrySourceDetail
242      * 
243      * @param document a GeneralLedgerPostingDocument
244      * @param account the account for use in the GLPE
245      * @param objectCode the object code for use in the GLPE
246      * @param subAccountNumber the sub account number for use in the GLPE
247      * @param subObjectCode the subobject code for use in the GLPE
248      * @param organizationReferenceId the organization reference id to use in the GLPE
249      * @param projectCode the project code to use in the GLPE
250      * @param referenceNumber the reference number to use in the GLPE
251      * @param referenceTypeCode the reference type code to use in the GLPE
252      * @param referenceOriginCode the reference origin code to use in the GLPE
253      * @param description the description to put in the GLPE
254      * @param isDebit true if the GLPE represents a debit, false if it represents a credit
255      * @param amount the amount of the GLPE
256      * @param sequenceHelper the sequence helper to use
257      * @return a populated general ledger pending entry
258      */
259     public GeneralLedgerPendingEntry buildGeneralLedgerPendingEntry(GeneralLedgerPostingDocument document, Account account, ObjectCode objectCode, String subAccountNumber, String subObjectCode, String organizationReferenceId, String projectCode, String referenceNumber, String referenceTypeCode, String referenceOriginCode, String description, boolean isDebit, KualiDecimal amount, GeneralLedgerPendingEntrySequenceHelper sequenceHelper);
260 
261     /**
262      * This populates an GeneralLedgerPendingEntry offsetEntry object instance with values that differ from the values supplied in
263      * the explicit entry that it was cloned from. Note that the entries do not contain BOs now.
264      * 
265      * @param universityFiscalYear
266      * @param explicitEntry
267      * @param sequenceHelper
268      * @param offsetEntry Cloned from the explicit entry
269      */
270     public boolean populateOffsetGeneralLedgerPendingEntry(Integer universityFiscalYear, GeneralLedgerPendingEntry explicitEntry, GeneralLedgerPendingEntrySequenceHelper sequenceHelper, GeneralLedgerPendingEntry offsetEntry);
271 
272     /**
273      * This populates an empty GeneralLedgerPendingEntry instance with default values for a bank offset. A global error will be
274      * posted as a side-effect if the given Bank has not defined the necessary bank offset relations.
275      * 
276      * @param bank
277      * @param depositAmount
278      * @param financialDocument
279      * @param universityFiscalYear
280      * @param sequenceHelper
281      * @param bankOffsetEntry
282      * @param errorPropertyName
283      */
284     public boolean populateBankOffsetGeneralLedgerPendingEntry(Bank bank, KualiDecimal depositAmount, GeneralLedgerPostingDocument financialDocument, Integer universityFiscalYear, GeneralLedgerPendingEntrySequenceHelper sequenceHelper, GeneralLedgerPendingEntry bankOffsetEntry, String errorPropertyName);
285 
286     /**
287      * Adds up the amounts of all cash to offset GeneralLedgerPendingEntry records on the given AccountingDocument
288      * 
289      * @param glPostingDocument the accounting document total the offset to cash amount for
290      * @return the offset to cash amount, where debited values have been subtracted and credited values have been added
291      */
292     public abstract KualiDecimal getOffsetToCashAmount(GeneralLedgerPostingDocument glPostingDocument);
293 
294     /**
295      * Determines if the given GeneralLedgerPendingEntry represents offsets to cash
296      * 
297      * @param generalLedgerPendingEntry the GeneralLedgerPendingEntry to check
298      * @return true if the GeneralLedgerPendingEntry represents an offset to cash; false otherwise
299      */
300     public abstract boolean isOffsetToCash(GeneralLedgerPendingEntry generalLedgerPendingEntry);
301 
302     /**
303      * Gets the encumbrance balance type. It returns the encumbrance balance type for the given universityFiscalYear if one is
304      * passed in the fieldValues or the current year encumbrance balance types.
305      * 
306      * @param fieldValues
307      * @param currentFiscalYear
308      * @return the encumbrance balance type for the given universityFiscalYear if one is passed in the fieldValues or the current
309      *         year encumbrance balance types.
310      */
311     public List<String> getEncumbranceBalanceTypes(Map fieldValues, Integer currentFiscalYear);
312 }