/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.module.bc.document.dataaccess.impl;
import java.util.ArrayList;
import org.kuali.kfs.module.bc.BCConstants;
import org.kuali.kfs.module.bc.batch.dataaccess.impl.SQLForStep;
import org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionAccountObjectDetailReportDao;
import org.kuali.kfs.sys.KFSConstants;
/**
* builds the report table that supports the Organization Account Object Detail report. the report is customized by user, so the
* table rows are labeled with the user id
*/
public class BudgetConstructionAccountObjectDetailReportDaoJdbc extends BudgetConstructionDaoJdbcBase implements BudgetConstructionAccountObjectDetailReportDao {
private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(BudgetConstructionAccountObjectDetailReportDaoJdbc.class);
protected static ArrayList<SQLForStep> updateReportsAccountObjectDetailTable = new ArrayList<SQLForStep>(4);
protected static ArrayList<SQLForStep> insertDetailForReport = new ArrayList<SQLForStep>(1);
protected static ArrayList<SQLForStep> insertSummaryForReport = new ArrayList<SQLForStep>(1);
public BudgetConstructionAccountObjectDetailReportDaoJdbc() {
// builds and updates AccountObjectDetailTable
StringBuilder sqlText = new StringBuilder(5000);
ArrayList<Integer> insertionPoints = new ArrayList<Integer>(10);
// this is a bean constructor, so it is dangerous to access static constants defined in other classes here. the other
// classes may not have been loaded yet.
// so, we use insertion points to indicate where such constants should be placed in the SQL, and we splice them in a run
// time. we also use insertion points to splice in run time constants from SH_PARM_T.
/* get the set of income and expenditure lines */
/* for the selected accounts */
sqlText.append("INSERT INTO LD_BCN_BUILD_ACCTBAL01_MT\n");
sqlText.append("(SESID, ORG_FIN_COA_CD, ORG_CD, SUB_FUND_GRP_CD, UNIV_FISCAL_YR, FIN_COA_CD, ACCOUNT_NBR,\n");
sqlText.append(" SUB_ACCT_NBR, INC_EXP_CD, FIN_CONS_SORT_CD, FIN_LEVEL_SORT_CD, FIN_OBJECT_CD, FIN_SUB_OBJ_CD, FIN_OBJ_LEVEL_CD, APPT_RQST_FTE_QTY,\n");
sqlText.append(" APPT_RQCSF_FTE_QTY, POS_CSF_FTE_QTY, FIN_BEG_BAL_LN_AMT, ACLN_ANNL_BAL_AMT, POS_CSF_LV_FTE_QTY) \n");
sqlText.append("SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.sel_sub_fund_grp, pbgl.univ_fiscal_yr, pbgl.fin_coa_cd, pbgl.account_nbr, \n");
sqlText.append(" pbgl.sub_acct_nbr, 'A', c.fin_report_sort_cd, objl.fin_report_sort_cd, pbgl.fin_object_cd, pbgl.fin_sub_obj_cd, objt.fin_obj_level_cd, 0, \n");
sqlText.append(" 0, 0, sum(pbgl.fin_beg_bal_ln_amt), sum(pbgl.acln_annl_bal_amt), 0 \n");
sqlText.append("FROM LD_BCN_SUBFUND_PICK_T pick, LD_BCN_CTRL_LIST_T ctrl, LD_PND_BCNSTR_GL_T pbgl, CA_OBJECT_CODE_T objt, CA_OBJ_LEVEL_T objl, CA_OBJ_CONSOLDTN_T c \n");
sqlText.append("WHERE pick.person_unvl_id = ? \n");
sqlText.append(" AND pick.report_flag > 0 \n");
sqlText.append(" AND pick.sub_fund_grp_cd = ctrl.sel_sub_fund_grp \n");
sqlText.append(" AND pick.person_unvl_id = ctrl.person_unvl_id \n");
sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n");
sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n");
sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n");
sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n");
sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n");
sqlText.append(" AND pbgl.fin_obj_typ_cd in \n");
// list of income object types
insertionPoints.add(sqlText.length());
sqlText.append("\n");
sqlText.append(" AND pbgl.univ_fiscal_yr = objt.univ_fiscal_yr \n");
sqlText.append(" AND pbgl.fin_coa_cd = objt.fin_coa_cd \n");
sqlText.append(" AND pbgl.fin_object_cd = objt.fin_object_cd \n");
sqlText.append(" AND objt.fin_coa_cd = objl.fin_coa_cd \n");
sqlText.append(" AND objt.fin_obj_level_cd = objl.fin_obj_level_cd \n");
sqlText.append(" AND c.fin_coa_cd = objl.fin_coa_cd \n");
sqlText.append(" AND c.fin_cons_obj_cd = objl.fin_cons_obj_cd \n");
sqlText.append("GROUP BY ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.sel_sub_fund_grp, pbgl.univ_fiscal_yr, pbgl.fin_coa_cd, pbgl.account_nbr, pbgl.sub_acct_nbr, \n");
sqlText.append(" c.fin_report_sort_cd, objl.fin_report_sort_cd, pbgl.fin_object_cd, pbgl.fin_sub_obj_cd, objt.fin_obj_level_cd \n");
sqlText.append("UNION ALL\n");
sqlText.append("SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.sel_sub_fund_grp, pbgl.univ_fiscal_yr, pbgl.fin_coa_cd, pbgl.account_nbr, \n");
sqlText.append(" pbgl.sub_acct_nbr, 'B', c.fin_report_sort_cd, objl.fin_report_sort_cd, pbgl.fin_object_cd, pbgl.fin_sub_obj_cd, objt.fin_obj_level_cd, 0, \n");
sqlText.append(" 0, 0, sum(pbgl.fin_beg_bal_ln_amt), sum(pbgl.acln_annl_bal_amt), 0 \n");
sqlText.append("FROM LD_BCN_SUBFUND_PICK_T pick, LD_BCN_CTRL_LIST_T ctrl, LD_PND_BCNSTR_GL_T pbgl, CA_OBJECT_CODE_T objt, CA_OBJ_LEVEL_T objl, CA_OBJ_CONSOLDTN_T c \n");
sqlText.append("WHERE pick.person_unvl_id = ? \n");
sqlText.append(" AND pick.report_flag > 0 \n");
sqlText.append(" AND pick.sub_fund_grp_cd = ctrl.sel_sub_fund_grp \n");
sqlText.append(" AND pick.person_unvl_id = ctrl.person_unvl_id \n");
sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n");
sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n");
sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n");
sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n");
sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n");
sqlText.append(" AND pbgl.fin_obj_typ_cd in \n");
// list of expense object types
insertionPoints.add(sqlText.length());
sqlText.append("\n");
sqlText.append(" AND pbgl.univ_fiscal_yr = objt.univ_fiscal_yr \n");
sqlText.append(" AND pbgl.fin_coa_cd = objt.fin_coa_cd \n");
sqlText.append(" AND pbgl.fin_object_cd = objt.fin_object_cd \n");
sqlText.append(" AND objt.fin_coa_cd = objl.fin_coa_cd \n");
sqlText.append(" AND objt.fin_obj_level_cd = objl.fin_obj_level_cd \n");
sqlText.append(" AND c.fin_coa_cd = objl.fin_coa_cd \n");
sqlText.append(" AND c.fin_cons_obj_cd = objl.fin_cons_obj_cd \n");
sqlText.append("GROUP BY ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.sel_sub_fund_grp, pbgl.univ_fiscal_yr, pbgl.fin_coa_cd, pbgl.account_nbr, pbgl.sub_acct_nbr, \n");
sqlText.append(" c.fin_report_sort_cd, objl.fin_report_sort_cd, pbgl.fin_object_cd, pbgl.fin_sub_obj_cd, objt.fin_obj_level_cd \n");
updateReportsAccountObjectDetailTable.add(new SQLForStep(sqlText, insertionPoints));
sqlText.delete(0, sqlText.length());
insertionPoints.clear();
/*
* SQL-92 does not permit us to use an alias for the target table in an UPDATE clause--neither, apparently does PostgreSQL
* (Gennick, p. 156)
*/
/* get the appointment funding fte */
sqlText.append("UPDATE LD_BCN_BUILD_ACCTBAL01_MT \n");
sqlText.append("SET appt_rqst_fte_qty = (SELECT SUM(af.appt_rqst_fte_qty) \n");
sqlText.append("FROM LD_PNDBC_APPTFND_T af \n");
sqlText.append("WHERE LD_BCN_BUILD_ACCTBAL01_MT.univ_fiscal_yr = af.univ_fiscal_yr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_coa_cd = af.fin_coa_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.account_nbr = af.account_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.sub_acct_nbr = af.sub_acct_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_object_cd = af.fin_object_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_sub_obj_cd = af.fin_sub_obj_cd), \n");
sqlText.append(" appt_rqcsf_fte_qty = (SELECT SUM(af.appt_rqcsf_fte_qty) \n");
sqlText.append("FROM LD_PNDBC_APPTFND_T af \n");
sqlText.append("WHERE LD_BCN_BUILD_ACCTBAL01_MT.univ_fiscal_yr = af.univ_fiscal_yr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_coa_cd = af.fin_coa_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.account_nbr = af.account_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.sub_acct_nbr = af.sub_acct_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_object_cd = af.fin_object_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_sub_obj_cd = af.fin_sub_obj_cd) \n");
sqlText.append("WHERE sesid = ? \n");
sqlText.append("AND EXISTS (SELECT 1 FROM LD_PNDBC_APPTFND_T af2 \n");
sqlText.append("WHERE LD_BCN_BUILD_ACCTBAL01_MT.univ_fiscal_yr = af2.univ_fiscal_yr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_coa_cd = af2.fin_coa_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.account_nbr = af2.account_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.sub_acct_nbr = af2.sub_acct_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_object_cd = af2.fin_object_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_sub_obj_cd = af2.fin_sub_obj_cd) \n");
updateReportsAccountObjectDetailTable.add(new SQLForStep(sqlText));
sqlText.delete(0, sqlText.length());
/*
* SQL-92 does not permit us to use an alias for the target table in an UPDATE clause--neither, apparently does PostgreSQL
* (Gennick, p. 156)
*/
/* get the csf regular fte */
sqlText.append("UPDATE LD_BCN_BUILD_ACCTBAL01_MT \n");
sqlText.append("SET pos_csf_fte_qty = (SELECT SUM(bcsf.pos_csf_fte_qty) \n");
sqlText.append("FROM LD_BCN_CSF_TRCKR_T bcsf \n");
sqlText.append("WHERE LD_BCN_BUILD_ACCTBAL01_MT.univ_fiscal_yr = bcsf.univ_fiscal_yr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_coa_cd = bcsf.fin_coa_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.account_nbr = bcsf.account_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.sub_acct_nbr = bcsf.sub_acct_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_object_cd = bcsf.fin_object_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_sub_obj_cd = bcsf.fin_sub_obj_cd \n");
sqlText.append("AND bcsf.pos_csf_fndstat_cd <> '");
// CSF Leave indicator
insertionPoints.add(sqlText.length());
sqlText.append("')\n");
sqlText.append("WHERE sesid = ? \n");
sqlText.append("AND EXISTS (SELECT 1 FROM LD_BCN_CSF_TRCKR_T bcsf2 \n");
sqlText.append("WHERE LD_BCN_BUILD_ACCTBAL01_MT.univ_fiscal_yr = bcsf2.univ_fiscal_yr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_coa_cd = bcsf2.fin_coa_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.account_nbr = bcsf2.account_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.sub_acct_nbr = bcsf2.sub_acct_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_object_cd = bcsf2.fin_object_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_sub_obj_cd = bcsf2.fin_sub_obj_cd \n");
sqlText.append("AND bcsf2.pos_csf_fndstat_cd <> '");
// CSF leave inndicator
insertionPoints.add(sqlText.length());
sqlText.append("')\n");
updateReportsAccountObjectDetailTable.add(new SQLForStep(sqlText, insertionPoints));
sqlText.delete(0, sqlText.length());
insertionPoints.clear();
/*
* SQL-92 does not permit us to use an alias for the target table in an UPDATE clause--neither, apparently does PostgreSQL
* (Gennick, p. 156)
*/
/* get the csf leave fte */
sqlText.append("UPDATE LD_BCN_BUILD_ACCTBAL01_MT \n");
sqlText.append("SET pos_csf_fte_qty = (SELECT SUM(bcsf.pos_csf_fte_qty) \n");
sqlText.append("FROM LD_BCN_CSF_TRCKR_T bcsf \n");
sqlText.append("WHERE LD_BCN_BUILD_ACCTBAL01_MT.univ_fiscal_yr = bcsf.univ_fiscal_yr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_coa_cd = bcsf.fin_coa_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.account_nbr = bcsf.account_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.sub_acct_nbr = bcsf.sub_acct_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_object_cd = bcsf.fin_object_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_sub_obj_cd = bcsf.fin_sub_obj_cd \n");
sqlText.append("AND bcsf.pos_csf_fndstat_cd = '");
// CSF leave indicator
insertionPoints.add(sqlText.length());
sqlText.append("')\n");
sqlText.append("WHERE sesid = ? \n");
sqlText.append("AND EXISTS (SELECT * FROM LD_BCN_CSF_TRCKR_T bcsf2 \n");
sqlText.append("WHERE LD_BCN_BUILD_ACCTBAL01_MT.univ_fiscal_yr = bcsf2.univ_fiscal_yr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_coa_cd = bcsf2.fin_coa_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.account_nbr = bcsf2.account_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.sub_acct_nbr = bcsf2.sub_acct_nbr \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_object_cd = bcsf2.fin_object_cd \n");
sqlText.append("AND LD_BCN_BUILD_ACCTBAL01_MT.fin_sub_obj_cd = bcsf2.fin_sub_obj_cd \n");
sqlText.append("AND bcsf2.pos_csf_fndstat_cd = '");
// CSF leave indicator
insertionPoints.add(sqlText.length());
sqlText.append("')\n");
updateReportsAccountObjectDetailTable.add(new SQLForStep(sqlText, insertionPoints));
sqlText.delete(0, sqlText.length());
insertionPoints.clear();
/* no rollup */
sqlText.append("INSERT INTO LD_BCN_ACCT_BAL_T \n");
sqlText.append("(PERSON_UNVL_ID, ORG_FIN_COA_CD, ORG_CD, SUB_FUND_GRP_CD, UNIV_FISCAL_YR, FIN_COA_CD, ACCOUNT_NBR, SUB_ACCT_NBR, \n");
sqlText.append(" INC_EXP_CD, FIN_LEVEL_SORT_CD, FIN_OBJECT_CD, FIN_SUB_OBJ_CD, FIN_CONS_SORT_CD, FIN_OBJ_LEVEL_CD, APPT_RQST_FTE_QTY, \n");
sqlText.append(" APPT_RQCSF_FTE_QTY, POSITION_FTE_QTY, FIN_BEG_BAL_LN_AMT, ACLN_ANNL_BAL_AMT, POS_CSF_LV_FTE_QTY) \n");
sqlText.append(" SELECT ?, org_fin_coa_cd, org_cd, sub_fund_grp_cd, univ_fiscal_yr, fin_coa_cd, account_nbr, sub_acct_nbr, \n");
sqlText.append(" inc_exp_cd, fin_level_sort_cd, fin_object_cd, fin_sub_obj_cd, fin_cons_sort_cd, fin_obj_level_cd, appt_rqst_fte_qty, \n");
sqlText.append(" appt_rqcsf_fte_qty, pos_csf_fte_qty, fin_beg_bal_ln_amt, acln_annl_bal_amt, pos_csf_lv_fte_qty \n");
sqlText.append(" FROM LD_BCN_BUILD_ACCTBAL01_MT WHERE sesid = ? \n");
insertDetailForReport.add(new SQLForStep(sqlText));
sqlText.delete(0, sqlText.length());
/* rollup the sub-accounting and insert */
// should change order of select
sqlText.append("INSERT INTO LD_BCN_ACCT_BAL_T \n");
sqlText.append(" (PERSON_UNVL_ID, ORG_FIN_COA_CD, ORG_CD, SUB_FUND_GRP_CD, UNIV_FISCAL_YR, FIN_COA_CD, ACCOUNT_NBR, SUB_ACCT_NBR, \n");
sqlText.append(" INC_EXP_CD, FIN_LEVEL_SORT_CD, FIN_OBJECT_CD, FIN_SUB_OBJ_CD, FIN_CONS_SORT_CD, FIN_OBJ_LEVEL_CD, APPT_RQST_FTE_QTY, \n");
sqlText.append(" APPT_RQCSF_FTE_QTY, POSITION_FTE_QTY, FIN_BEG_BAL_LN_AMT, ACLN_ANNL_BAL_AMT, POS_CSF_LV_FTE_QTY) \n");
sqlText.append(" SELECT ?, org_fin_coa_cd, org_cd, sub_fund_grp_cd, univ_fiscal_yr, fin_coa_cd, account_nbr, '");
// default subaccount number
insertionPoints.add(sqlText.length());
sqlText.append("', \n");
sqlText.append(" inc_exp_cd, fin_level_sort_cd, fin_object_cd, '");
// default subobject code
insertionPoints.add(sqlText.length());
sqlText.append("', fin_cons_sort_cd, fin_obj_level_cd, sum(appt_rqst_fte_qty), sum(appt_rqcsf_fte_qty), \n");
sqlText.append(" sum(pos_csf_fte_qty), sum(fin_beg_bal_ln_amt), sum(acln_annl_bal_amt), sum(pos_csf_lv_fte_qty) \n");
sqlText.append("FROM LD_BCN_BUILD_ACCTBAL01_MT \n");
sqlText.append("WHERE sesid = ? \n");
sqlText.append("GROUP BY org_fin_coa_cd, org_cd, sub_fund_grp_cd, univ_fiscal_yr, fin_coa_cd, account_nbr, inc_exp_cd, \n");
sqlText.append(" fin_cons_sort_cd, fin_level_sort_cd, fin_object_cd, fin_obj_level_cd \n");
insertSummaryForReport.add(new SQLForStep(sqlText, insertionPoints));
sqlText.delete(0, sqlText.length());
insertionPoints.clear();
}
protected void buildInitialAccountBalances(String sessionId, String principalName, String expenditureINList, String revenueINList) {
// remove any rows previously processed by this user
cleanReportsAccountObjectDetailTable(principalName);
// build the tables used both for detail and for consolidation
// insert the funding with all FTE zeroed out
ArrayList<String> stringsToInsert = new ArrayList<String>(2);
stringsToInsert.add(revenueINList);
stringsToInsert.add(expenditureINList);
getSimpleJdbcTemplate().update(updateReportsAccountObjectDetailTable.get(0).getSQL(stringsToInsert), sessionId, principalName, sessionId, principalName);
// fill in the FTE fields that come from appointment fundinng
getSimpleJdbcTemplate().update(updateReportsAccountObjectDetailTable.get(1).getSQL(), sessionId);
// fill in the FTE fields that come from CSF for people not on leave
stringsToInsert.clear();
stringsToInsert.add(new String(BCConstants.csfFundingStatusFlag.LEAVE.getFlagValue()));
stringsToInsert.add(new String(BCConstants.csfFundingStatusFlag.LEAVE.getFlagValue()));
getSimpleJdbcTemplate().update(updateReportsAccountObjectDetailTable.get(2).getSQL(stringsToInsert), sessionId);
// fill in the FTE fields that come from CSF for people who are on leave
getSimpleJdbcTemplate().update(updateReportsAccountObjectDetailTable.get(3).getSQL(stringsToInsert), sessionId);
}
protected void cleanReportsAccountObjectDetailTable(String principalName) {
clearTempTableByUnvlId("LD_BCN_ACCT_BAL_T", "PERSON_UNVL_ID", principalName);
}
protected void cleanReportsAccountObjectTemporaryTable(String sessionId) {
clearTempTableBySesId("LD_BCN_BUILD_ACCTBAL01_MT", "SESID", sessionId);
}
/**
* @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionAccountObjectDetailReportDao#updateReportsAccountObjectDetailTable(java.lang.String)
*/
@Override
public void updateReportsAccountObjectDetailTable(String principalName, String expenditureINList, String revenueINList) {
// get a unique ID to identify this user's session
String sessionId = java.util.UUID.randomUUID().toString();
// add the reporting rows to the common base tables
this.buildInitialAccountBalances(sessionId, principalName, expenditureINList, revenueINList);
// fill in the detail rows
getSimpleJdbcTemplate().update(insertDetailForReport.get(0).getSQL(), principalName, sessionId);
// clean out the temporary holding table for the reporting rows
cleanReportsAccountObjectTemporaryTable(sessionId);
}
/**
* @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionAccountObjectDetailReportDao#updateReportsAccountObjectConsolidatedTable(java.lang.String)
*/
@Override
public void updateReportsAccountObjectConsolidatedTable(String principalName, String expenditureINList, String revenueINList) {
// get a unique ID to identify this user's session
String sessionId = java.util.UUID.randomUUID().toString();
// add the reporting rows to the common base tables
this.buildInitialAccountBalances(sessionId, principalName, expenditureINList, revenueINList );
// fill in the consolidated rows with the default subaccount and the default subobject
ArrayList<String> stringsToInsert = new ArrayList<String>(2);
stringsToInsert.add(KFSConstants.getDashSubAccountNumber());
stringsToInsert.add(KFSConstants.getDashFinancialSubObjectCode());
getSimpleJdbcTemplate().update(insertSummaryForReport.get(0).getSQL(stringsToInsert), principalName, sessionId);
// clean out the temporary holding table for the reporting rows
cleanReportsAccountObjectTemporaryTable(sessionId);
}
}