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.coa.batch.dataaccess.impl;
017    
018    import java.sql.PreparedStatement;
019    import java.sql.ResultSet;
020    import java.sql.SQLException;
021    import java.util.HashMap;
022    import java.util.Map;
023    
024    import org.kuali.kfs.coa.batch.dataaccess.LedgerReferenceValuePreparedStatementCachingDao;
025    import org.kuali.kfs.coa.businessobject.A21SubAccount;
026    import org.kuali.kfs.coa.businessobject.Account;
027    import org.kuali.kfs.coa.businessobject.AccountingPeriod;
028    import org.kuali.kfs.coa.businessobject.BalanceType;
029    import org.kuali.kfs.coa.businessobject.Chart;
030    import org.kuali.kfs.coa.businessobject.IndirectCostRecoveryType;
031    import org.kuali.kfs.coa.businessobject.ObjectCode;
032    import org.kuali.kfs.coa.businessobject.ObjectLevel;
033    import org.kuali.kfs.coa.businessobject.ObjectType;
034    import org.kuali.kfs.coa.businessobject.OffsetDefinition;
035    import org.kuali.kfs.coa.businessobject.Organization;
036    import org.kuali.kfs.coa.businessobject.ProjectCode;
037    import org.kuali.kfs.coa.businessobject.SubAccount;
038    import org.kuali.kfs.coa.businessobject.SubFundGroup;
039    import org.kuali.kfs.coa.businessobject.SubObjectCode;
040    import org.kuali.kfs.sys.KFSConstants;
041    import org.kuali.kfs.sys.batch.dataaccess.impl.AbstractPreparedStatementCachingDaoJdbc;
042    
043    public class LedgerReferenceValuePreparedStatementCachingDaoJdbc extends AbstractPreparedStatementCachingDaoJdbc implements LedgerReferenceValuePreparedStatementCachingDao {
044        static final Map<String,String> sql = new HashMap<String,String>();
045        static {
046            sql.put(RETRIEVE_PREFIX + Chart.class, "select fin_coa_active_cd, fin_cash_obj_cd, fin_ap_obj_cd, FND_BAL_OBJ_CD from CA_CHART_T where fin_coa_cd = ?");
047            sql.put(RETRIEVE_PREFIX + Account.class, "select acct_expiration_dt, acct_closed_ind, sub_fund_grp_cd, org_cd, cont_fin_coa_cd, cont_account_nbr, fin_series_id, acct_icr_typ_cd, acct_sf_cd from CA_ACCOUNT_T where fin_coa_cd = ? and account_nbr = ?");
048            sql.put(RETRIEVE_PREFIX + SubAccount.class, "select sub_acct_actv_cd from CA_SUB_ACCT_T where fin_coa_cd = ? and account_nbr = ? and sub_acct_nbr = ?");
049            sql.put(RETRIEVE_PREFIX + ObjectCode.class, "select fin_obj_typ_cd, fin_obj_sub_typ_cd, fin_obj_level_cd, fin_obj_active_cd, rpts_to_fin_coa_cd, rpts_to_fin_obj_cd from CA_OBJECT_CODE_T where univ_fiscal_yr = ? and fin_coa_cd = ? and fin_object_cd = ?");
050            sql.put(RETRIEVE_PREFIX + SubObjectCode.class, "select fin_subobj_actv_cd from CA_SUB_OBJECT_CD_T where univ_fiscal_yr = ? and fin_coa_cd = ? and account_nbr = ? and fin_object_cd = ? and fin_sub_obj_cd = ?");
051            sql.put(RETRIEVE_PREFIX + ProjectCode.class, "select proj_active_cd from CA_PROJECT_T where project_cd = ?");
052            sql.put(RETRIEVE_PREFIX + Organization.class, "select org_plnt_coa_cd, org_plnt_acct_nbr, cmp_plnt_coa_cd, cmp_plnt_acct_nbr from CA_ORG_T where fin_coa_cd = ? and org_cd = ?");
053            sql.put(RETRIEVE_PREFIX + SubFundGroup.class, "select fund_grp_cd from CA_SUB_FUND_GRP_T where sub_fund_grp_cd = ?");
054            sql.put(RETRIEVE_PREFIX + OffsetDefinition.class, "select fin_object_cd from GL_OFFSET_DEFN_T where univ_fiscal_yr = ? and fin_coa_cd = ? and fdoc_typ_cd = ? and fin_balance_typ_cd = ?");
055            sql.put(RETRIEVE_PREFIX + A21SubAccount.class, "select sub_acct_typ_cd, cst_shr_coa_cd, cst_shrsrcacct_nbr, cst_srcsubacct_nbr, icr_typ_cd, fin_series_id, icr_fin_coa_cd, icr_account_nbr from CA_A21_SUB_ACCT_T where fin_coa_cd = ? and account_nbr = ? and sub_acct_nbr = ?");
056            sql.put(RETRIEVE_PREFIX + ObjectType.class, "select fund_balance_cd, fin_objtyp_dbcr_cd, fin_obj_typ_icr_cd, ROW_ACTV_IND from CA_OBJ_TYPE_T where fin_obj_typ_cd = ?");
057            sql.put(RETRIEVE_PREFIX + ObjectLevel.class, "select fin_cons_obj_cd from CA_OBJ_LEVEL_T where fin_coa_cd = ? and fin_obj_level_cd = ?");
058            sql.put(RETRIEVE_PREFIX + BalanceType.class, "select fin_offst_gnrtn_cd, fin_baltyp_enc_cd, ROW_ACTV_IND from CA_BALANCE_TYPE_T where fin_balance_typ_cd = ?");
059            sql.put(RETRIEVE_PREFIX + AccountingPeriod.class, "select row_actv_ind from SH_ACCT_PERIOD_T where univ_fiscal_yr = ? and univ_fiscal_prd_cd = ?");
060            sql.put(RETRIEVE_PREFIX + IndirectCostRecoveryType.class, "select ACCT_ICR_TYP_ACTV_IND from CA_ICR_TYPE_T where acct_icr_typ_cd = ?");
061        }
062    
063        @Override
064        protected Map<String, String> getSql() {
065            return sql;
066        }
067    
068        public A21SubAccount getA21SubAccount(final String chartOfAccountsCode, final String accountNumber, final String subAccountNumber) {
069            return new RetrievingJdbcWrapper<A21SubAccount>() {
070                @Override
071                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
072                    preparedStatement.setString(1, chartOfAccountsCode);
073                    preparedStatement.setString(2, accountNumber);
074                    preparedStatement.setString(3, subAccountNumber);
075                }
076                @Override
077                protected A21SubAccount extractResult(ResultSet resultSet) throws SQLException {
078                    A21SubAccount a21SubAccount = new A21SubAccount();
079                    a21SubAccount.setChartOfAccountsCode(chartOfAccountsCode);
080                    a21SubAccount.setAccountNumber(accountNumber);
081                    a21SubAccount.setSubAccountNumber(subAccountNumber);
082                    a21SubAccount.setSubAccountTypeCode(resultSet.getString(1));
083                    a21SubAccount.setCostShareChartOfAccountCode(resultSet.getString(2));
084                    a21SubAccount.setCostShareSourceAccountNumber(resultSet.getString(3));
085                    a21SubAccount.setCostShareSourceSubAccountNumber(resultSet.getString(4));
086                    a21SubAccount.setIndirectCostRecoveryTypeCode(resultSet.getString(5));
087                    a21SubAccount.setFinancialIcrSeriesIdentifier(resultSet.getString(6));
088                    a21SubAccount.setIndirectCostRcvyFinCoaCode(resultSet.getString(7));
089                    a21SubAccount.setIndirectCostRecoveryAcctNbr(resultSet.getString(8));
090                    return a21SubAccount;
091                }
092            }.get(A21SubAccount.class);
093        }
094    
095        public Account getAccount(final String chartCode, final String accountNumber) {
096            return new RetrievingJdbcWrapper<Account>() {
097                @Override
098                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
099                    preparedStatement.setString(1, chartCode);
100                    preparedStatement.setString(2, accountNumber);
101                }
102                @Override
103                protected Account extractResult(ResultSet resultSet) throws SQLException {
104                    Account account = new Account();
105                    account.setChartOfAccountsCode(chartCode);
106                    account.setAccountNumber(accountNumber);
107                    account.setAccountExpirationDate(resultSet.getDate(1));
108                    account.setActive(KFSConstants.ParameterValues.YES.equals(resultSet.getString(2)) ? false : true);
109                    account.setSubFundGroupCode(resultSet.getString(3));
110                    account.setOrganizationCode(resultSet.getString(4));
111                    account.setContinuationFinChrtOfAcctCd(resultSet.getString(5));
112                    account.setContinuationAccountNumber(resultSet.getString(6));
113                    account.setFinancialIcrSeriesIdentifier(resultSet.getString(7));
114                    account.setAcctIndirectCostRcvyTypeCd(resultSet.getString(8));
115                    account.setAccountSufficientFundsCode(resultSet.getString(9));
116                    return account;
117                }
118            }.get(Account.class);
119        }
120    
121        public AccountingPeriod getAccountingPeriod(final Integer fiscalYear, final String fiscalPeriodCode) {
122            return new RetrievingJdbcWrapper<AccountingPeriod>() {
123                @Override
124                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
125                    preparedStatement.setInt(1, fiscalYear);
126                    preparedStatement.setString(2, fiscalPeriodCode);
127                }
128                @Override
129                protected AccountingPeriod extractResult(ResultSet resultSet) throws SQLException {
130                    AccountingPeriod accountingPeriod = new AccountingPeriod();
131                    accountingPeriod.setUniversityFiscalYear(fiscalYear);
132                    accountingPeriod.setUniversityFiscalPeriodCode(fiscalPeriodCode);
133                    accountingPeriod.setActive(KFSConstants.ParameterValues.YES.equals(resultSet.getString(1)) ? true : false);
134                    return accountingPeriod;
135                }
136            }.get(AccountingPeriod.class);
137        }
138    
139        public BalanceType getBalanceType(final String financialBalanceTypeCode) {
140            return new RetrievingJdbcWrapper<BalanceType>() {
141                @Override
142                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
143                    preparedStatement.setString(1, financialBalanceTypeCode);
144                }
145                @Override
146                protected BalanceType extractResult(ResultSet resultSet) throws SQLException {
147                    BalanceType balanceType = new BalanceType();
148                    balanceType.setFinancialBalanceTypeCode(financialBalanceTypeCode);
149                    balanceType.setFinancialOffsetGenerationIndicator(KFSConstants.ParameterValues.YES.equals(resultSet.getString(1)) ? true : false);
150                    balanceType.setFinBalanceTypeEncumIndicator(KFSConstants.ParameterValues.YES.equals(resultSet.getString(2)) ? true : false);
151                    balanceType.setActive(KFSConstants.ParameterValues.YES.equals(resultSet.getString(3)) ? true : false);
152                    return balanceType;
153                }
154            }.get(BalanceType.class);
155        }
156    
157        public Chart getChart(final String chartOfAccountsCode) {
158            return new RetrievingJdbcWrapper<Chart>() {
159                @Override
160                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
161                    preparedStatement.setString(1, chartOfAccountsCode);
162                }
163                @Override
164                protected Chart extractResult(ResultSet resultSet) throws SQLException {
165                    Chart chart = new Chart();
166                    chart.setChartOfAccountsCode(chartOfAccountsCode);
167                    chart.setActive(KFSConstants.ParameterValues.YES.equals(resultSet.getString(1)) ? true : false);
168                    chart.setFundBalanceObjectCode(resultSet.getString(4));
169                    chart.setFinancialCashObjectCode(resultSet.getString(2));
170                    chart.setFinAccountsPayableObjectCode(resultSet.getString(3));
171                    return chart;
172                }
173            }.get(Chart.class);
174        }
175    
176        public IndirectCostRecoveryType getIndirectCostRecoveryType(final String accountIcrTypeCode) {
177            return new RetrievingJdbcWrapper<IndirectCostRecoveryType>() {
178                @Override
179                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
180                    preparedStatement.setString(1, accountIcrTypeCode);
181                }
182                @Override
183                protected IndirectCostRecoveryType extractResult(ResultSet resultSet) throws SQLException {
184                    IndirectCostRecoveryType indirectCostRecoveryType = new IndirectCostRecoveryType();
185                    indirectCostRecoveryType.setActive(KFSConstants.ParameterValues.YES.equals(resultSet.getString(1)) ? true : false);
186                    return indirectCostRecoveryType;
187                }
188            }.get(IndirectCostRecoveryType.class);
189        }
190    
191        public ObjectCode getObjectCode(final Integer universityFiscalYear, final String chartOfAccountsCode, final String financialObjectCode) {
192            return new RetrievingJdbcWrapper<ObjectCode>() {
193                @Override
194                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
195                    preparedStatement.setInt(1, universityFiscalYear);
196                    preparedStatement.setString(2, chartOfAccountsCode);
197                    preparedStatement.setString(3, financialObjectCode);
198                }
199                @Override
200                protected ObjectCode extractResult(ResultSet resultSet) throws SQLException {
201                    ObjectCode objectCode = new ObjectCode();
202                    objectCode.setUniversityFiscalYear(universityFiscalYear);
203                    objectCode.setChartOfAccountsCode(chartOfAccountsCode);
204                    objectCode.setFinancialObjectCode(financialObjectCode);
205                    objectCode.setFinancialObjectTypeCode(resultSet.getString(1));
206                    objectCode.setFinancialObjectSubTypeCode(resultSet.getString(2));
207                    objectCode.setFinancialObjectLevelCode(resultSet.getString(3));
208                    objectCode.setActive(KFSConstants.ParameterValues.YES.equals(resultSet.getString(4)) ? true : false);
209                    objectCode.setReportsToChartOfAccountsCode(resultSet.getString(5));
210                    objectCode.setReportsToFinancialObjectCode(resultSet.getString(6));
211                    return objectCode;
212                }
213            }.get(ObjectCode.class);
214        }
215    
216        public ObjectLevel getObjectLevel(final String chartOfAccountsCode, final String financialObjectLevelCode) {
217            return new RetrievingJdbcWrapper<ObjectLevel>() {
218                @Override
219                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
220                    preparedStatement.setString(1, chartOfAccountsCode);
221                    preparedStatement.setString(2, financialObjectLevelCode);
222                }
223                @Override
224                protected ObjectLevel extractResult(ResultSet resultSet) throws SQLException {
225                    ObjectLevel objectLevel = new ObjectLevel();
226                    objectLevel.setChartOfAccountsCode(chartOfAccountsCode);
227                    objectLevel.setFinancialObjectLevelCode(financialObjectLevelCode);
228                    objectLevel.setFinancialConsolidationObjectCode(resultSet.getString(1));
229                    return objectLevel;
230                }
231            }.get(ObjectLevel.class);
232        }
233    
234        public ObjectType getObjectType(final String financialObjectTypeCode) {
235            return new RetrievingJdbcWrapper<ObjectType>() {
236                @Override
237                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
238                    preparedStatement.setString(1, financialObjectTypeCode);
239                }
240                @Override
241                protected ObjectType extractResult(ResultSet resultSet) throws SQLException {
242                    ObjectType objectType = new ObjectType();
243                    objectType.setCode(financialObjectTypeCode);
244                    objectType.setFundBalanceIndicator(KFSConstants.ParameterValues.YES.equals(resultSet.getString(1)) ? true : false);
245                    objectType.setFinObjectTypeDebitcreditCd(resultSet.getString(2));
246                    objectType.setFinObjectTypeIcrSelectionIndicator(KFSConstants.ParameterValues.YES.equals(resultSet.getString(3)) ? true : false);
247                    objectType.setActive(KFSConstants.ParameterValues.YES.equals(resultSet.getString(4)) ? true : false);
248                    return objectType;
249                }
250            }.get(ObjectType.class);
251        }
252    
253        public OffsetDefinition getOffsetDefinition(final Integer universityFiscalYear, final String chartOfAccountsCode, final String financialDocumentTypeCode, final String financialBalanceTypeCode) {
254            return new RetrievingJdbcWrapper<OffsetDefinition>() {
255                @Override
256                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
257                    preparedStatement.setInt(1, universityFiscalYear);
258                    preparedStatement.setString(2, chartOfAccountsCode);
259                    preparedStatement.setString(3, financialDocumentTypeCode);
260                    preparedStatement.setString(4, financialBalanceTypeCode);
261                }
262                @Override
263                protected OffsetDefinition extractResult(ResultSet resultSet) throws SQLException {
264                    OffsetDefinition offsetDefinition = new OffsetDefinition();
265                    offsetDefinition.setUniversityFiscalYear(universityFiscalYear);
266                    offsetDefinition.setChartOfAccountsCode(chartOfAccountsCode);
267                    offsetDefinition.setFinancialDocumentTypeCode(financialDocumentTypeCode);
268                    offsetDefinition.setFinancialBalanceTypeCode(financialBalanceTypeCode);
269                    offsetDefinition.setFinancialObjectCode(resultSet.getString(1));
270                    return offsetDefinition;
271                }
272            }.get(OffsetDefinition.class);
273        }
274    
275        public Organization getOrganization(final String chartOfAccountsCode, final String organizationCode) {
276            return new RetrievingJdbcWrapper<Organization>() {
277                @Override
278                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
279                    preparedStatement.setString(1, chartOfAccountsCode);
280                    preparedStatement.setString(2, organizationCode);
281                }
282                @Override
283                protected Organization extractResult(ResultSet resultSet) throws SQLException {
284                    Organization organization = new Organization();
285                    organization.setChartOfAccountsCode(chartOfAccountsCode);
286                    organization.setOrganizationCode(organizationCode);
287                    organization.setOrganizationPlantChartCode(resultSet.getString(1));
288                    organization.setOrganizationPlantAccountNumber(resultSet.getString(2));
289                    organization.setCampusPlantChartCode(resultSet.getString(3));
290                    organization.setCampusPlantAccountNumber(resultSet.getString(4));
291                    return organization;
292                }
293            }.get(Organization.class);
294        }
295    
296        public ProjectCode getProjectCode(final String financialSystemProjectCode) {
297            return new RetrievingJdbcWrapper<ProjectCode>() {
298                @Override
299                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
300                    preparedStatement.setString(1, financialSystemProjectCode);
301                }
302                @Override
303                protected ProjectCode extractResult(ResultSet resultSet) throws SQLException {
304                    ProjectCode projectCode = new ProjectCode();
305                    projectCode.setCode(financialSystemProjectCode);
306                    projectCode.setActive(KFSConstants.ParameterValues.YES.equals(resultSet.getString(1)) ? true : false);
307                    return projectCode;
308                }
309            }.get(ProjectCode.class);
310        }
311    
312        public SubAccount getSubAccount(final String chartOfAccountsCode, final String accountNumber, final String subAccountNumber) {
313            return new RetrievingJdbcWrapper<SubAccount>() {
314                @Override
315                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
316                    preparedStatement.setString(1, chartOfAccountsCode);
317                    preparedStatement.setString(2, accountNumber);
318                    preparedStatement.setString(3, subAccountNumber);
319                }
320                @Override
321                protected SubAccount extractResult(ResultSet resultSet) throws SQLException {
322                    SubAccount subAccount = new SubAccount();
323                    subAccount.setChartOfAccountsCode(chartOfAccountsCode);
324                    subAccount.setAccountNumber(accountNumber);
325                    subAccount.setSubAccountNumber(subAccountNumber);
326                    subAccount.setActive(KFSConstants.ParameterValues.YES.equals(resultSet.getString(1)) ? true : false);
327                    return subAccount;
328                }
329            }.get(SubAccount.class);
330        }
331    
332        public SubFundGroup getSubFundGroup(final String subFundGroupCode) {
333            return new RetrievingJdbcWrapper<SubFundGroup>() {
334                @Override
335                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
336                    preparedStatement.setString(1, subFundGroupCode);
337                }
338                @Override
339                protected SubFundGroup extractResult(ResultSet resultSet) throws SQLException {
340                    SubFundGroup subFundGroup = new SubFundGroup();
341                    subFundGroup.setSubFundGroupCode(subFundGroupCode);
342                    subFundGroup.setFundGroupCode(resultSet.getString(1));
343                    return subFundGroup;
344                }
345            }.get(SubFundGroup.class);
346        }
347    
348        public SubObjectCode getSubObjectCode(final Integer universityFiscalYear, final String chartOfAccountsCode, final String accountNumber, final String financialObjectCode, final String financialSubObjectCode) {
349            return new RetrievingJdbcWrapper<SubObjectCode>() {
350                @Override
351                protected void populateStatement(PreparedStatement preparedStatement) throws SQLException {
352                    preparedStatement.setInt(1, universityFiscalYear);
353                    preparedStatement.setString(2, chartOfAccountsCode);
354                    preparedStatement.setString(3, accountNumber);
355                    preparedStatement.setString(4, financialObjectCode);
356                    preparedStatement.setString(5, financialSubObjectCode);
357                }
358                @Override
359                protected SubObjectCode extractResult(ResultSet resultSet) throws SQLException {
360                    SubObjectCode subObjectCode = new SubObjectCode();
361                    subObjectCode.setUniversityFiscalYear(universityFiscalYear);
362                    subObjectCode.setChartOfAccountsCode(chartOfAccountsCode);
363                    subObjectCode.setAccountNumber(accountNumber);
364                    subObjectCode.setFinancialObjectCode(financialObjectCode);
365                    subObjectCode.setFinancialSubObjectCode(financialSubObjectCode);
366                    subObjectCode.setActive(KFSConstants.ParameterValues.YES.equals(resultSet.getString(1)) ? true : false);
367                    return subObjectCode;
368                }
369            }.get(SubObjectCode.class);
370        }
371    }