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.dataaccess.impl;
017    
018    import org.kuali.kfs.coa.businessobject.Account;
019    import org.kuali.kfs.coa.businessobject.PriorYearAccount;
020    import org.kuali.kfs.coa.dataaccess.PriorYearAccountDaoJdbc;
021    import org.kuali.rice.kns.dao.jdbc.PlatformAwareDaoBaseJdbc;
022    import org.kuali.rice.kns.service.PersistenceStructureService;
023    
024    /**
025     * This class performs actions against the database through direct SQL command calls.
026     */
027    public class PriorYearAccountDaoJdbcImpl extends PlatformAwareDaoBaseJdbc implements PriorYearAccountDaoJdbc {
028    
029        /** Constant used to retrieve row counts for tables. Obj_Id value exists in all tables in DB. */
030        private static final String OBJ_ID = "OBJ_ID";
031    
032        private PersistenceStructureService persistenceStructureService;
033    
034        /**
035         * This method purges all records in the Prior Year Account table in the DB.
036         * 
037         * @return Number of records that were purged.
038         */
039        public int purgePriorYearAccounts() {
040            final String priorYrAcctTableName = getPersistenceStructureService().getTableName(PriorYearAccount.class);
041    
042            // 1. Count how many rows are currently in the prior year acct table
043            int count = getSimpleJdbcTemplate().queryForInt("SELECT COUNT(1) FROM " + priorYrAcctTableName);
044    
045            // 2. Purge all the rows from the prior year acct table
046            getSimpleJdbcTemplate().update("DELETE FROM " + priorYrAcctTableName);
047    
048            return count;
049        }
050    
051        /**
052         * This method copies all organization records from the current Account table to the Prior Year Account table.
053         * 
054         * @return Number of records that were copied.
055         */
056        public int copyCurrentAccountsToPriorYearTable() {
057            final String priorYrAcctTableName = getPersistenceStructureService().getTableName(PriorYearAccount.class);
058            final String acctTableName = getPersistenceStructureService().getTableName(Account.class);
059    
060            // 1. Copy all the rows from the current org table to the prior year acct table
061            getSimpleJdbcTemplate().update(
062                    "INSERT INTO " + priorYrAcctTableName + "(FIN_COA_CD, ACCOUNT_NBR, OBJ_ID, VER_NBR, ACCOUNT_NM, ACCT_FSC_OFC_UID, ACCT_SPVSR_UNVL_ID, ACCT_MGR_UNVL_ID, ORG_CD, ACCT_TYP_CD, ACCT_PHYS_CMP_CD, SUB_FUND_GRP_CD, ACCT_FRNG_BNFT_CD, FIN_HGH_ED_FUNC_CD, ACCT_RSTRC_STAT_CD, ACCT_RSTRC_STAT_DT, ACCT_CITY_NM, ACCT_STATE_CD, ACCT_STREET_ADDR, ACCT_ZIP_CD, RPTS_TO_FIN_COA_CD, RPTS_TO_ACCT_NBR, ACCT_CREATE_DT, ACCT_EFFECT_DT, ACCT_EXPIRATION_DT, CONT_FIN_COA_CD, CONT_ACCOUNT_NBR, ENDOW_FIN_COA_CD, ENDOW_ACCOUNT_NBR, CONTR_CTRL_FCOA_CD, CONTR_CTRLACCT_NBR, INCOME_FIN_COA_CD, INCOME_ACCOUNT_NBR, ACCT_ICR_TYP_CD, AC_CSTM_ICREXCL_CD, FIN_SERIES_ID, ICR_FIN_COA_CD, ICR_ACCOUNT_NBR, ACCT_IN_FP_CD, BDGT_REC_LVL_CD, ACCT_SF_CD, ACCT_PND_SF_CD, FIN_EXT_ENC_SF_CD, FIN_INT_ENC_SF_CD, FIN_PRE_ENC_SF_CD, FIN_OBJ_PRSCTRL_CD, CG_CFDA_NBR, ACCT_OFF_CMP_IND, ACCT_CLOSED_IND) "
063                            + " SELECT FIN_COA_CD, ACCOUNT_NBR, OBJ_ID, VER_NBR, ACCOUNT_NM, ACCT_FSC_OFC_UID, ACCT_SPVSR_UNVL_ID, ACCT_MGR_UNVL_ID, ORG_CD, ACCT_TYP_CD, ACCT_PHYS_CMP_CD, SUB_FUND_GRP_CD, ACCT_FRNG_BNFT_CD, FIN_HGH_ED_FUNC_CD, ACCT_RSTRC_STAT_CD, ACCT_RSTRC_STAT_DT, ACCT_CITY_NM, ACCT_STATE_CD, ACCT_STREET_ADDR, ACCT_ZIP_CD, RPTS_TO_FIN_COA_CD, RPTS_TO_ACCT_NBR, ACCT_CREATE_DT, ACCT_EFFECT_DT, ACCT_EXPIRATION_DT, CONT_FIN_COA_CD, CONT_ACCOUNT_NBR, ENDOW_FIN_COA_CD, ENDOW_ACCOUNT_NBR, CONTR_CTRL_FCOA_CD, CONTR_CTRLACCT_NBR, INCOME_FIN_COA_CD, INCOME_ACCOUNT_NBR, ACCT_ICR_TYP_CD, AC_CSTM_ICREXCL_CD, FIN_SERIES_ID, ICR_FIN_COA_CD, ICR_ACCOUNT_NBR, ACCT_IN_FP_CD, BDGT_REC_LVL_CD, ACCT_SF_CD, ACCT_PND_SF_CD, FIN_EXT_ENC_SF_CD, FIN_INT_ENC_SF_CD, FIN_PRE_ENC_SF_CD, FIN_OBJ_PRSCTRL_CD, CG_CFDA_NBR, ACCT_OFF_CMP_IND, ACCT_CLOSED_IND " + " FROM " + acctTableName);
064    
065            // 2. Count how many rows are currently in the prior year acct table
066            return getSimpleJdbcTemplate().queryForInt("SELECT COUNT(1) FROM " + priorYrAcctTableName);
067        }
068    
069        /**
070         * Gets the persistenceStructureService attribute.
071         * 
072         * @return Returns the persistenceStructureService.
073         */
074        public PersistenceStructureService getPersistenceStructureService() {
075            return persistenceStructureService;
076        }
077    
078        /**
079         * Sets the persistenceStructureService attribute value.
080         * 
081         * @param persistenceStructureService The persistenceStructureService to set.
082         */
083        public void setPersistenceStructureService(PersistenceStructureService persistenceStructureService) {
084            this.persistenceStructureService = persistenceStructureService;
085        }
086    
087    }