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.gl.dataaccess;
017
018 import java.util.Collection;
019 import java.util.Iterator;
020 import java.util.List;
021 import java.util.Map;
022
023 import org.kuali.kfs.coa.businessobject.Account;
024 import org.kuali.kfs.gl.businessobject.Balance;
025 import org.kuali.kfs.gl.businessobject.Transaction;
026
027 /**
028 * The DAO interface that declares methods needed to query the database about balances
029 */
030 public interface BalanceDao {
031
032 /**
033 * Get the GL Summary data
034 *
035 * @param universityFiscalYear the fiscal year of balances to search for
036 * @param balanceTypeCodes a list of balance type codes of balances to search for
037 * @return iterator of reported on java.lang.Object arrays with the report data
038 */
039 public Iterator<Object[]> getGlSummary(int universityFiscalYear, List<String> balanceTypeCodes);
040
041 /**
042 * Given a transaction, finds the balance record it would affect
043 *
044 * @param t a transaction
045 * @return the balance record it would affect
046 */
047 public Balance getBalanceByTransaction(Transaction t);
048
049 /**
050 * Given the primary keys of a balance, finds the balance in the database. Although not all of the
051 * primary keys are sent into this method...
052 *
053 * Programmers are seriously advised not to use this method; the default implementation does not work
054 *
055 * @param universityFiscalYear the university fiscal year of the balance to find
056 * @param chartOfAccountsCode the chart of accounts code of the balance to find
057 * @param accountNumber the account number of the balance to find
058 * @return the balance that is specified by those...er...partially defined primary keys.
059 */
060 public Balance getBalanceByPrimaryId(Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber);
061
062 /**
063 * Based on specific query types, return an Iterator of balance records
064 *
065 * @param account the account of balances to find
066 * @param fiscalYear the fiscal year of balances to find
067 * @param includedObjectCodes a Collection of object codes found balances should have one of
068 * @param excludedObjectCodes a Collection of object codes found balances should not have one of
069 * @param objectTypeCodes a Collection of object type codes found balances should have one of
070 * @param balanceTypeCodes a Collection of balance type codes found balances should have one of
071 * @return an Iterator of Balances
072 */
073 public Iterator findBalances(Account account, Integer fiscalYear, Collection includedObjectCodes, Collection excludedObjectCodes, Collection objectTypeCodes, Collection balanceTypeCodes);
074
075 /**
076 * Saves a balance to the database
077 *
078 * @param b a balance to save
079 */
080 public void save(Balance b);
081
082 /**
083 * This method finds the cash balance entries according to input fields and values
084 *
085 * @param fieldValues the input fields and values
086 * @param isConsolidated consolidation option is applied or not
087 * @return the records of cash balance entries
088 */
089 public Iterator<Balance> findCashBalance(Map fieldValues, boolean isConsolidated);
090
091 /**
092 * This method gets the size collection of cash balance entries or entry groups according to input fields and values
093 *
094 * @param fieldValues the input fields and values
095 * @param isConsolidated consolidation option is applied or not
096 * @return the size collection of cash balance entry groups
097 */
098 public Integer getDetailedCashBalanceRecordCount(Map fieldValues);
099
100 /**
101 * This method gets the size collection of cash balance entry groups according to input fields and values if the entries are
102 * required to be consolidated
103 *
104 * @param fieldValues the input fields and values
105 * @return the size collection of cash balance entry groups
106 */
107 public Iterator getConsolidatedCashBalanceRecordCount(Map fieldValues);
108
109 /**
110 * This method finds the records of balance entries according to input fields and values
111 *
112 * @param fieldValues the input fields and values
113 * @param isConsolidated consolidation option is applied or not
114 * @return the records of balance entries
115 */
116 public Iterator findBalance(Map fieldValues, boolean isConsolidated);
117
118 /**
119 * This method gets the size collection of balance entry groups according to input fields and values if the entries are required
120 * to be consolidated
121 *
122 * @param fieldValues the input fields and values
123 * @return the size collection of balance entry groups
124 */
125 public Iterator getConsolidatedBalanceRecordCount(Map fieldValues);
126
127 /**
128 * Returns the balance entries for the given year, chart, and account.
129 *
130 * @param universityFiscalYear the unversity fiscal year of balances to return
131 * @param chartOfAccountsCode the chart of accounts code of balances to return
132 * @param accountNumber the account number of balances to return
133 * @param sfCode Sufficient Funds Code (used to determine sorting)
134 * @return balance entries matching above
135 */
136 public Iterator<Balance> findAccountBalances(Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber, String sfCode);
137
138 /**
139 * Returns the balance entries for the given year, chart, and account.
140 *
141 * @param universityFiscalYear the fiscal year of balances to return
142 * @param chartOfAccountsCode the chart of accounts code of balances to return
143 * @param accountNumber the account number of balances to return
144 * @return balance entries matching above sorted by object code
145 */
146 public Iterator<Balance> findAccountBalances(Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber);
147
148 /**
149 * Returns the CB (current budget) record for the given year, chart, account, and object code if one is found.
150 *
151 * @param universityFiscalYear the fiscal year of the CB balance to return
152 * @param chartOfAccountsCode the chart of the accounts code of the CB balanes to return
153 * @param accountNumber the account number of the CB balance to return
154 * @param objectCode the object code of the CB balance to return
155 * @return the CB Balance record
156 */
157 public Balance getCurrentBudgetForObjectCode(Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber, String objectCode);
158
159 /**
160 * Purge the sufficient funds balance table by year/chart
161 *
162 * @param chart the chart of balances to purge
163 * @param year the university fiscal year of balances to purge
164 */
165 public void purgeYearByChart(String chart, int year);
166
167 /**
168 * Returns all of the balances of a given fiscal year
169 *
170 * @param year the university fiscal year of balances to return
171 * @return an iterator over all balances for a given fiscal year
172 */
173 public Iterator<Balance> findBalancesForFiscalYear(Integer year);
174
175 /**
176 * This method returns the total count of balances for a fiscal year
177 *
178 * @param year fiscal year to check
179 * @return the count of balances
180 */
181 public int countBalancesForFiscalYear(Integer year);
182
183 /**
184 * This method returns all of the balances specifically for the nominal activity closing job
185 *
186 * @param year year to find balances for
187 * @return an Iterator of nominal activity balances
188 */
189 public Iterator<Balance> findNominalActivityBalancesForFiscalYear(Integer year);
190
191 /**
192 * Returns the balances specifically to be forwarded to the next fiscal year, based on the "general" rule
193 *
194 * @param year the fiscal year to find balances for
195 * @return an Iterator full of Balances
196 */
197 public Iterator<Balance> findGeneralBalancesToForwardForFiscalYear(Integer year);
198
199 /**
200 * Returns the C&G balances specifically to be forwarded to the next fiscal year, based on the "cumulative" rule
201 *
202 * @param year the fiscal year to find balances for
203 * @return and Iterator chuck full of Balances
204 */
205 public Iterator<Balance> findCumulativeBalancesToForwardForFiscalYear(Integer year);
206
207 /**
208 * Returns the balances that would specifically be picked up by the Organization Reversion year end process
209 *
210 * @param year the year to find balances for
211 * @return an iterator of the balances to process
212 */
213 public Iterator<Balance> findOrganizationReversionBalancesForFiscalYear(Integer year, boolean endOfYear);
214 }