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.module.bc.document.dataaccess.impl; 017 018 import java.util.ArrayList; 019 020 import org.kuali.kfs.module.bc.BCConstants.Report; 021 import org.kuali.kfs.module.bc.batch.dataaccess.impl.SQLForStep; 022 import org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionAccountSummaryReportDao; 023 import org.kuali.rice.kns.service.PersistenceService; 024 025 /** 026 * builds rows for the general ledger summary report. allows three different levels of aggregation: account/sub-account, account, and subfund 027 */ 028 029 public class BudgetConstructionAccountSummaryReportDaoJdbc extends BudgetConstructionDaoJdbcBase implements BudgetConstructionAccountSummaryReportDao { 030 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(BudgetConstructionAccountSummaryReportDaoJdbc.class); 031 032 private static ArrayList<SQLForStep> updateReportsAccountSummaryTable = new ArrayList<SQLForStep>(1); 033 034 private static ArrayList<SQLForStep> updateReportsAccountSummaryTableWithConsolidation = new ArrayList<SQLForStep>(1); 035 036 private static ArrayList<SQLForStep> updateSubFundSummaryReport = new ArrayList<SQLForStep>(1); 037 038 private PersistenceService persistenceService; 039 040 public BudgetConstructionAccountSummaryReportDaoJdbc() { 041 042 //builds and updates AccountSummaryReports 043 044 ArrayList<Integer> insertionPoints = new ArrayList<Integer>(10); 045 046 //report the detail 047 StringBuilder sqlText = new StringBuilder(10000); 048 sqlText.append("INSERT INTO LD_BCN_ACCT_SUMM_T (PERSON_UNVL_ID, ORG_FIN_COA_CD, ORG_CD, FIN_COA_CD, FUND_GRP_CD, SUB_FUND_GRP_CD, \n"); 049 sqlText.append(" ACCOUNT_NBR, SUB_ACCT_NBR, INC_EXP_CD, ACLN_ANNL_BAL_AMT, FIN_BEG_BAL_LN_AMT, SUB_FUND_SORT_CD) \n"); 050 sqlText.append("SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp, \n"); 051 sqlText.append(" ctrl.account_nbr, ctrl.sub_acct_nbr, '"); 052 // INCOME_EXP_TYPE_A 053 insertionPoints.add(sqlText.length()); 054 sqlText.append("', sum(pbgl.acln_annl_bal_amt), sum(pbgl.fin_beg_bal_ln_amt), sf.fin_report_sort_cd\n"); 055 sqlText.append("FROM LD_PND_BCNSTR_GL_T pbgl, LD_BCN_CTRL_LIST_T ctrl, LD_BCN_SUBFUND_PICK_T pick, CA_SUB_FUND_GRP_T sf \n"); 056 sqlText.append("WHERE pbgl.fin_obj_typ_cd in "); 057 // IN list of object types for revenue 058 insertionPoints.add(sqlText.length()); 059 sqlText.append(" \n"); 060 sqlText.append(" AND ctrl.person_unvl_id = ? \n"); 061 sqlText.append(" AND ctrl.person_unvl_id = pick.person_unvl_id \n"); 062 sqlText.append(" AND ctrl.sel_sub_fund_grp = pick.sub_fund_grp_cd \n"); 063 sqlText.append(" AND pick.report_flag > 0 \n"); 064 sqlText.append(" AND pick.sub_fund_grp_cd = sf.sub_fund_grp_cd \n"); 065 sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n"); 066 sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n"); 067 sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n"); 068 sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n"); 069 sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n"); 070 sqlText.append("GROUP BY ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fin_report_sort_cd, \n"); 071 sqlText.append(" sf.fund_grp_cd, ctrl.sel_sub_fund_grp, ctrl.account_nbr, ctrl.sub_acct_nbr \n"); 072 sqlText.append("UNION ALL\n"); 073 sqlText.append("SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp, \n"); 074 sqlText.append(" ctrl.account_nbr, ctrl.sub_acct_nbr, '"); 075 // INCOME_EXP_TYPE_E 076 insertionPoints.add(sqlText.length()); 077 sqlText.append("', sum(pbgl.acln_annl_bal_amt), sum(pbgl.fin_beg_bal_ln_amt), sf.fin_report_sort_cd \n"); 078 sqlText.append("FROM LD_PND_BCNSTR_GL_T pbgl, CA_OBJECT_CODE_T o, LD_BCN_CTRL_LIST_T ctrl, LD_BCN_SUBFUND_PICK_T pick, CA_SUB_FUND_GRP_T sf \n"); 079 sqlText.append("WHERE pbgl.fin_obj_typ_cd in "); 080 // IN list of object types for expenditure 081 insertionPoints.add(sqlText.length()); 082 sqlText.append("\n"); 083 sqlText.append(" AND ctrl.person_unvl_id = ? \n"); 084 sqlText.append(" AND ctrl.person_unvl_id = pick.person_unvl_id \n"); 085 sqlText.append(" AND ctrl.sel_sub_fund_grp = pick.sub_fund_grp_cd \n"); 086 sqlText.append(" AND pick.report_flag > 0 \n"); 087 sqlText.append(" AND pick.sub_fund_grp_cd = sf.sub_fund_grp_cd \n"); 088 sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n"); 089 sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n"); 090 sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n"); 091 sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n"); 092 sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n"); 093 sqlText.append(" AND o.univ_fiscal_yr = pbgl.univ_fiscal_yr \n"); 094 sqlText.append(" AND o.fin_coa_cd = pbgl.fin_coa_cd \n"); 095 sqlText.append(" AND o.fin_object_cd = pbgl.fin_object_cd \n"); 096 sqlText.append(" AND o.fin_obj_level_cd not in ('CORI','TRIN') \n"); 097 sqlText.append(" AND EXISTS (SELECT 1 FROM CA_OBJECT_CODE_T o1, LD_PND_BCNSTR_GL_T pb \n"); 098 sqlText.append("WHERE pb.fdoc_nbr = pbgl.fdoc_nbr \n"); 099 sqlText.append(" AND pb.univ_fiscal_yr = pbgl.univ_fiscal_yr \n"); 100 sqlText.append(" AND pb.fin_coa_cd = pbgl.fin_coa_cd \n"); 101 sqlText.append(" AND pb.account_nbr = pbgl.account_nbr \n"); 102 sqlText.append(" AND pb.sub_acct_nbr = pbgl.sub_acct_nbr \n"); 103 sqlText.append(" AND o1.univ_fiscal_yr = pb.univ_fiscal_yr \n"); 104 sqlText.append(" AND o1.fin_coa_cd = pb.fin_coa_cd \n"); 105 sqlText.append(" AND o1.fin_object_cd = pb.fin_object_cd \n"); 106 sqlText.append(" AND o1.fin_obj_level_cd in ('CORI','TRIN')) \n"); 107 sqlText.append("GROUP BY ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fin_report_sort_cd, sf.fund_grp_cd,\n"); 108 sqlText.append(" ctrl.sel_sub_fund_grp, ctrl.account_nbr, ctrl.sub_acct_nbr \n"); 109 sqlText.append("UNION ALL\n"); 110 sqlText.append("SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp, \n"); 111 sqlText.append(" ctrl.account_nbr, ctrl.sub_acct_nbr, '"); 112 // INCOME_EXP_TYPE_T 113 insertionPoints.add(sqlText.length()); 114 sqlText.append("', sum(pbgl.acln_annl_bal_amt),sum(pbgl.fin_beg_bal_ln_amt), sf.fin_report_sort_cd \n"); 115 sqlText.append("FROM LD_PND_BCNSTR_GL_T pbgl, CA_OBJECT_CODE_T o, LD_BCN_CTRL_LIST_T ctrl, LD_BCN_SUBFUND_PICK_T pick, CA_SUB_FUND_GRP_T sf \n"); 116 sqlText.append("WHERE pbgl.fin_obj_typ_cd in "); 117 // IN list of expenditure object types 118 insertionPoints.add(sqlText.length()); 119 sqlText.append(" \n"); 120 sqlText.append(" AND ctrl.person_unvl_id = ? \n"); 121 sqlText.append(" AND ctrl.person_unvl_id = pick.person_unvl_id \n"); 122 sqlText.append(" AND ctrl.sel_sub_fund_grp = pick.sub_fund_grp_cd \n"); 123 sqlText.append(" AND pick.report_flag > 0 \n"); 124 sqlText.append(" AND pick.sub_fund_grp_cd = sf.sub_fund_grp_cd \n"); 125 sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n"); 126 sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n"); 127 sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n"); 128 sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n"); 129 sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n"); 130 sqlText.append(" AND o.univ_fiscal_yr = pbgl.univ_fiscal_yr \n"); 131 sqlText.append(" AND o.fin_coa_cd = pbgl.fin_coa_cd \n"); 132 sqlText.append(" AND o.fin_object_cd = pbgl.fin_object_cd \n"); 133 sqlText.append(" AND o.fin_obj_level_cd in ('CORI','TRIN') \n"); 134 sqlText.append("GROUP BY ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fin_report_sort_cd, sf.fund_grp_cd, \n"); 135 sqlText.append(" ctrl.sel_sub_fund_grp, ctrl.account_nbr, ctrl.sub_acct_nbr \n"); 136 sqlText.append("UNION ALL\n"); 137 sqlText.append("SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp, \n"); 138 sqlText.append(" ctrl.account_nbr, ctrl.sub_acct_nbr, '"); 139 // INCOME_EXP_TYPE_X 140 insertionPoints.add(sqlText.length()); 141 sqlText.append("', sum(pbgl.acln_annl_bal_amt), sum(pbgl.fin_beg_bal_ln_amt), sf.fin_report_sort_cd \n"); 142 sqlText.append("FROM LD_PND_BCNSTR_GL_T pbgl, LD_BCN_CTRL_LIST_T ctrl, LD_BCN_SUBFUND_PICK_T pick, CA_SUB_FUND_GRP_T sf \n"); 143 sqlText.append("WHERE pbgl.fin_obj_typ_cd in "); 144 // IN list of expenditure object types 145 insertionPoints.add(sqlText.length()); 146 sqlText.append(" \n"); 147 sqlText.append(" AND ctrl.person_unvl_id = ? \n"); 148 sqlText.append(" AND ctrl.person_unvl_id = pick.person_unvl_id \n"); 149 sqlText.append(" AND ctrl.sel_sub_fund_grp = pick.sub_fund_grp_cd \n"); 150 sqlText.append(" AND pick.report_flag > 0 \n"); 151 sqlText.append(" AND pick.sub_fund_grp_cd = sf.sub_fund_grp_cd \n"); 152 sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n"); 153 sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n"); 154 sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n"); 155 sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n"); 156 sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n"); 157 sqlText.append("GROUP BY ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fin_report_sort_cd, sf.fund_grp_cd,\n"); 158 sqlText.append(" ctrl.sel_sub_fund_grp, ctrl.account_nbr, ctrl.sub_acct_nbr \n"); 159 160 updateReportsAccountSummaryTable.add(new SQLForStep(sqlText,insertionPoints)); 161 sqlText.delete(0, sqlText.length()); 162 insertionPoints.clear(); 163 164 //report at the account level 165 sqlText.append("INSERT INTO LD_BCN_ACCT_SUMM_T (PERSON_UNVL_ID, ORG_FIN_COA_CD, ORG_CD, FIN_COA_CD, FUND_GRP_CD, SUB_FUND_GRP_CD, \n"); 166 sqlText.append(" ACCOUNT_NBR, SUB_ACCT_NBR, INC_EXP_CD, ACLN_ANNL_BAL_AMT, FIN_BEG_BAL_LN_AMT, SUB_FUND_SORT_CD) \n"); 167 sqlText.append("SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp, \n"); 168 sqlText.append(" ctrl.account_nbr, '-----', '"); 169 // INCOME_EXP_TYPE_A 170 insertionPoints.add(sqlText.length()); 171 sqlText.append("', sum(pbgl.acln_annl_bal_amt), sum(pbgl.fin_beg_bal_ln_amt), sf.fin_report_sort_cd \n"); 172 sqlText.append("FROM LD_PND_BCNSTR_GL_T pbgl, \n"); 173 sqlText.append(" LD_BCN_CTRL_LIST_T ctrl, \n"); 174 sqlText.append(" LD_BCN_SUBFUND_PICK_T pick, \n"); 175 sqlText.append(" CA_SUB_FUND_GRP_T sf \n"); 176 sqlText.append("WHERE pbgl.fin_obj_typ_cd in "); 177 insertionPoints.add(sqlText.length()); 178 // IN list of revenue object types 179 sqlText.append(" \n"); 180 sqlText.append(" AND ctrl.person_unvl_id = ? \n"); 181 sqlText.append(" AND ctrl.person_unvl_id = pick.person_unvl_id \n"); 182 sqlText.append(" AND ctrl.sel_sub_fund_grp = pick.sub_fund_grp_cd \n"); 183 sqlText.append(" AND pick.report_flag > 0 \n"); 184 sqlText.append(" AND pick.sub_fund_grp_cd = sf.sub_fund_grp_cd \n"); 185 sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n"); 186 sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n"); 187 sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n"); 188 sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n"); 189 sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n"); 190 sqlText.append("GROUP BY ctrl.sel_org_fin_coa, \n"); 191 sqlText.append(" ctrl.sel_org_cd, \n"); 192 sqlText.append(" ctrl.fin_coa_cd, \n"); 193 sqlText.append(" sf.fin_report_sort_cd, \n"); 194 sqlText.append(" sf.fund_grp_cd, \n"); 195 sqlText.append(" ctrl.sel_sub_fund_grp, \n"); 196 sqlText.append(" ctrl.account_nbr \n"); 197 sqlText.append("UNION ALL\n"); 198 sqlText.append(" SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp, ctrl.account_nbr, '-----', \n"); 199 sqlText.append(" '"); 200 // INCOME_EXP_TYPE_E 201 insertionPoints.add(sqlText.length()); 202 sqlText.append("', sum(pbgl.acln_annl_bal_amt), sum(pbgl.fin_beg_bal_ln_amt), sf.fin_report_sort_cd \n"); 203 sqlText.append("FROM LD_PND_BCNSTR_GL_T pbgl, CA_OBJECT_CODE_T o, LD_BCN_CTRL_LIST_T ctrl, LD_BCN_SUBFUND_PICK_T pick, CA_SUB_FUND_GRP_T sf \n"); 204 sqlText.append("WHERE pbgl.fin_obj_typ_cd in "); 205 // IN list of expenditure object types 206 insertionPoints.add(sqlText.length()); 207 sqlText.append(" \n"); 208 sqlText.append(" AND ctrl.person_unvl_id = ? \n"); 209 sqlText.append(" AND ctrl.person_unvl_id = pick.person_unvl_id \n"); 210 sqlText.append(" AND ctrl.sel_sub_fund_grp = pick.sub_fund_grp_cd \n"); 211 sqlText.append(" AND pick.report_flag > 0 \n"); 212 sqlText.append(" AND pick.sub_fund_grp_cd = sf.sub_fund_grp_cd \n"); 213 sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n"); 214 sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n"); 215 sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n"); 216 sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n"); 217 sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n"); 218 sqlText.append(" AND o.univ_fiscal_yr = pbgl.univ_fiscal_yr \n"); 219 sqlText.append(" AND o.fin_coa_cd = pbgl.fin_coa_cd \n"); 220 sqlText.append(" AND o.fin_object_cd = pbgl.fin_object_cd \n"); 221 sqlText.append(" AND o.fin_obj_level_cd not in ('CORI','TRIN') \n"); 222 sqlText.append(" AND EXISTS \n"); 223 sqlText.append(" (SELECT 1 \n"); 224 sqlText.append(" FROM CA_OBJECT_CODE_T o1, LD_PND_BCNSTR_GL_T pb \n"); 225 sqlText.append(" WHERE pb.univ_fiscal_yr = pbgl.univ_fiscal_yr \n"); 226 sqlText.append(" AND pb.fin_coa_cd = pbgl.fin_coa_cd \n"); 227 sqlText.append(" AND pb.account_nbr = pbgl.account_nbr \n"); 228 sqlText.append(" AND o1.univ_fiscal_yr = pb.univ_fiscal_yr \n"); 229 sqlText.append(" AND o1.fin_coa_cd = pb.fin_coa_cd \n"); 230 sqlText.append(" AND o1.fin_object_cd = pb.fin_object_cd \n"); 231 sqlText.append(" AND o1.fin_obj_level_cd in ('CORI','TRIN')) \n"); 232 sqlText.append("GROUP BY ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fin_report_sort_cd, \n"); 233 sqlText.append(" sf.fund_grp_cd, ctrl.sel_sub_fund_grp, ctrl.account_nbr \n"); 234 sqlText.append("UNION ALL\n"); 235 sqlText.append("SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp, \n"); 236 sqlText.append(" ctrl.account_nbr, '-----', '"); 237 // INCOME_EXP_TYPE_T 238 insertionPoints.add(sqlText.length()); 239 sqlText.append("', sum(pbgl.acln_annl_bal_amt), sum(pbgl.fin_beg_bal_ln_amt),sf.fin_report_sort_cd \n"); 240 sqlText.append("FROM LD_PND_BCNSTR_GL_T pbgl, CA_OBJECT_CODE_T o, LD_BCN_CTRL_LIST_T ctrl, LD_BCN_SUBFUND_PICK_T pick, CA_SUB_FUND_GRP_T sf \n"); 241 sqlText.append("WHERE pbgl.fin_obj_typ_cd in "); 242 // IN list of expenditure object types 243 insertionPoints.add(sqlText.length()); 244 sqlText.append(" \n"); 245 sqlText.append(" AND ctrl.person_unvl_id = ? \n"); 246 sqlText.append(" AND ctrl.person_unvl_id = pick.person_unvl_id \n"); 247 sqlText.append(" AND ctrl.sel_sub_fund_grp = pick.sub_fund_grp_cd \n"); 248 sqlText.append(" AND pick.report_flag > 0 \n"); 249 sqlText.append(" AND pick.sub_fund_grp_cd = sf.sub_fund_grp_cd \n"); 250 sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n"); 251 sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n"); 252 sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n"); 253 sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n"); 254 sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n"); 255 sqlText.append(" AND o.univ_fiscal_yr = pbgl.univ_fiscal_yr \n"); 256 sqlText.append(" AND o.fin_coa_cd = pbgl.fin_coa_cd \n"); 257 sqlText.append(" AND o.fin_object_cd = pbgl.fin_object_cd \n"); 258 sqlText.append(" AND o.fin_obj_level_cd in ('CORI','TRIN') \n"); 259 sqlText.append(" GROUP BY ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fin_report_sort_cd, \n"); 260 sqlText.append(" sf.fund_grp_cd, ctrl.sel_sub_fund_grp, ctrl.account_nbr \n"); 261 sqlText.append("UNION ALL\n"); 262 sqlText.append("SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp, \n"); 263 sqlText.append(" ctrl.account_nbr, '-----', '"); 264 // INCOME_EXP_TYPE_X 265 insertionPoints.add(sqlText.length()); 266 sqlText.append("', sum(pbgl.acln_annl_bal_amt), sum(pbgl.fin_beg_bal_ln_amt), sf.fin_report_sort_cd \n"); 267 sqlText.append("FROM LD_PND_BCNSTR_GL_T pbgl, LD_BCN_CTRL_LIST_T ctrl, LD_BCN_SUBFUND_PICK_T pick, CA_SUB_FUND_GRP_T sf \n"); 268 sqlText.append("WHERE pbgl.fin_obj_typ_cd in "); 269 // IN list of expenditure object types 270 insertionPoints.add(sqlText.length()); 271 sqlText.append(" \n"); 272 sqlText.append(" AND ctrl.person_unvl_id = ? \n"); 273 sqlText.append(" AND ctrl.person_unvl_id = pick.person_unvl_id \n"); 274 sqlText.append(" AND ctrl.sel_sub_fund_grp = pick.sub_fund_grp_cd \n"); 275 sqlText.append(" AND pick.report_flag > 0 \n"); 276 sqlText.append(" AND pick.sub_fund_grp_cd = sf.sub_fund_grp_cd \n"); 277 sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n"); 278 sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n"); 279 sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n"); 280 sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n"); 281 sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n"); 282 sqlText.append("GROUP BY ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fin_report_sort_cd, \n"); 283 sqlText.append(" sf.fund_grp_cd, ctrl.sel_sub_fund_grp, ctrl.account_nbr \n"); 284 285 updateReportsAccountSummaryTableWithConsolidation.add(new SQLForStep(sqlText,insertionPoints)); 286 sqlText.delete(0, sqlText.length()); 287 insertionPoints.clear(); 288 289 //builds and updates SubFundSummaryReports 290 sqlText.append("INSERT INTO LD_BCN_ACCT_SUMM_T(PERSON_UNVL_ID, ORG_FIN_COA_CD, ORG_CD, FIN_COA_CD, FUND_GRP_CD, SUB_FUND_GRP_CD, \n"); 291 sqlText.append(" ACCOUNT_NBR, SUB_ACCT_NBR, INC_EXP_CD, ACLN_ANNL_BAL_AMT, FIN_BEG_BAL_LN_AMT, SUB_FUND_SORT_CD) \n"); 292 sqlText.append("SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp, \n"); 293 sqlText.append(" '-------', '-----', '"); 294 // INCOME_EXP_TYPE_A 295 insertionPoints.add(sqlText.length()); 296 sqlText.append("', sum(pbgl.acln_annl_bal_amt), sum(pbgl.fin_beg_bal_ln_amt), sf.fin_report_sort_cd \n"); 297 sqlText.append("FROM LD_PND_BCNSTR_GL_T pbgl, LD_BCN_CTRL_LIST_T ctrl, LD_BCN_SUBFUND_PICK_T pick, CA_SUB_FUND_GRP_T sf \n"); 298 sqlText.append("WHERE pbgl.fin_obj_typ_cd in "); 299 // IN list of revenue object types 300 insertionPoints.add(sqlText.length()); 301 sqlText.append(" \n"); 302 sqlText.append(" AND ctrl.person_unvl_id = ? \n"); 303 sqlText.append(" AND ctrl.person_unvl_id = pick.person_unvl_id \n"); 304 sqlText.append(" AND ctrl.sel_sub_fund_grp = pick.sub_fund_grp_cd \n"); 305 sqlText.append(" AND pick.report_flag > 0 \n"); 306 sqlText.append(" AND pick.sub_fund_grp_cd = sf.sub_fund_grp_cd \n"); 307 sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n"); 308 sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n"); 309 sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n"); 310 sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n"); 311 sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n"); 312 sqlText.append("GROUP BY ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fin_report_sort_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp \n"); 313 sqlText.append("UNION ALL\n"); 314 sqlText.append("SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp, \n"); 315 sqlText.append("'-------', '-----', '"); 316 // INCOME_EXP_TYPE_E 317 insertionPoints.add(sqlText.length()); 318 sqlText.append("', sum(pbgl.acln_annl_bal_amt), sum(pbgl.fin_beg_bal_ln_amt), sf.fin_report_sort_cd \n"); 319 sqlText.append("FROM LD_PND_BCNSTR_GL_T pbgl, CA_OBJECT_CODE_T o, LD_BCN_CTRL_LIST_T ctrl, LD_BCN_SUBFUND_PICK_T pick, CA_SUB_FUND_GRP_T sf \n"); 320 sqlText.append("WHERE pbgl.fin_obj_typ_cd in "); 321 // IN list of expenditure object types 322 insertionPoints.add(sqlText.length()); 323 sqlText.append(" \n"); 324 sqlText.append(" AND ctrl.person_unvl_id = ? \n"); 325 sqlText.append(" AND ctrl.person_unvl_id = pick.person_unvl_id \n"); 326 sqlText.append(" AND ctrl.sel_sub_fund_grp = pick.sub_fund_grp_cd \n"); 327 sqlText.append(" AND pick.report_flag > 0 \n"); 328 sqlText.append(" AND pick.sub_fund_grp_cd = sf.sub_fund_grp_cd \n"); 329 sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n"); 330 sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n"); 331 sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n"); 332 sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n"); 333 sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n"); 334 sqlText.append(" AND o.univ_fiscal_yr = pbgl.univ_fiscal_yr \n"); 335 sqlText.append(" AND o.fin_coa_cd = pbgl.fin_coa_cd \n"); 336 sqlText.append(" AND o.fin_object_cd = pbgl.fin_object_cd \n"); 337 sqlText.append(" AND o.fin_obj_level_cd not in ('CORI','TRIN') \n"); 338 sqlText.append("GROUP BY ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fin_report_sort_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp \n"); 339 sqlText.append("UNION ALL\n"); 340 sqlText.append("SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp, \n"); 341 sqlText.append(" '-------', '-----', '"); 342 // INCOME_EXP_TYPE_T 343 insertionPoints.add(sqlText.length()); 344 sqlText.append("', sum(pbgl.acln_annl_bal_amt), sum(pbgl.fin_beg_bal_ln_amt), sf.fin_report_sort_cd \n"); 345 sqlText.append("FROM LD_PND_BCNSTR_GL_T pbgl, CA_OBJECT_CODE_T o, LD_BCN_CTRL_LIST_T ctrl, LD_BCN_SUBFUND_PICK_T pick, CA_SUB_FUND_GRP_T sf \n"); 346 sqlText.append("WHERE pbgl.fin_obj_typ_cd in "); 347 insertionPoints.add(sqlText.length()); 348 sqlText.append(" \n"); 349 sqlText.append(" AND ctrl.person_unvl_id = ? \n"); 350 sqlText.append(" AND ctrl.person_unvl_id = pick.person_unvl_id \n"); 351 sqlText.append(" AND ctrl.sel_sub_fund_grp = pick.sub_fund_grp_cd \n"); 352 sqlText.append(" AND pick.report_flag > 0 \n"); 353 sqlText.append(" AND pick.sub_fund_grp_cd = sf.sub_fund_grp_cd \n"); 354 sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n"); 355 sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n"); 356 sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n"); 357 sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n"); 358 sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n"); 359 sqlText.append(" AND o.univ_fiscal_yr = pbgl.univ_fiscal_yr \n"); 360 sqlText.append(" AND o.fin_coa_cd = pbgl.fin_coa_cd \n"); 361 sqlText.append(" AND o.fin_object_cd = pbgl.fin_object_cd \n"); 362 sqlText.append(" AND o.fin_obj_level_cd in ('CORI','TRIN') \n"); 363 sqlText.append("GROUP BY ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fin_report_sort_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp \n"); 364 sqlText.append("UNION ALL\n"); 365 sqlText.append("SELECT ?, ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp, \n"); 366 sqlText.append(" '-------', '-----', '"); 367 // INCOME_EXP_TYPE_X 368 insertionPoints.add(sqlText.length()); 369 sqlText.append("', sum(pbgl.acln_annl_bal_amt), sum(pbgl.fin_beg_bal_ln_amt), sf.fin_report_sort_cd \n"); 370 sqlText.append("FROM LD_PND_BCNSTR_GL_T pbgl, LD_BCN_CTRL_LIST_T ctrl, LD_BCN_SUBFUND_PICK_T pick, CA_SUB_FUND_GRP_T sf \n"); 371 sqlText.append("WHERE pbgl.fin_obj_typ_cd in "); 372 // IN list for expenditure 373 insertionPoints.add(sqlText.length()); 374 sqlText.append(" \n"); 375 sqlText.append(" AND ctrl.person_unvl_id = ? \n"); 376 sqlText.append(" AND ctrl.person_unvl_id = pick.person_unvl_id \n"); 377 sqlText.append(" AND ctrl.sel_sub_fund_grp = pick.sub_fund_grp_cd \n"); 378 sqlText.append(" AND pick.report_flag > 0 \n"); 379 sqlText.append(" AND pick.sub_fund_grp_cd = sf.sub_fund_grp_cd \n"); 380 sqlText.append(" AND pbgl.fdoc_nbr = ctrl.fdoc_nbr \n"); 381 sqlText.append(" AND pbgl.univ_fiscal_yr = ctrl.univ_fiscal_yr \n"); 382 sqlText.append(" AND pbgl.fin_coa_cd = ctrl.fin_coa_cd \n"); 383 sqlText.append(" AND pbgl.account_nbr = ctrl.account_nbr \n"); 384 sqlText.append(" AND pbgl.sub_acct_nbr = ctrl.sub_acct_nbr \n"); 385 sqlText.append("GROUP BY ctrl.sel_org_fin_coa, ctrl.sel_org_cd, ctrl.fin_coa_cd, sf.fin_report_sort_cd, sf.fund_grp_cd, ctrl.sel_sub_fund_grp \n"); 386 387 updateSubFundSummaryReport.add(new SQLForStep(sqlText,insertionPoints)); 388 sqlText.delete(0, sqlText.length()); 389 insertionPoints.clear(); 390 } 391 392 /** 393 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetReportsControlListDao#cleanReportsAccountSummaryTable(java.lang.String) 394 */ 395 public void cleanReportsAccountSummaryTable(String principalName) { 396 clearTempTableByUnvlId("LD_BCN_ACCT_SUMM_T", "PERSON_UNVL_ID", principalName); 397 /** 398 * this is necessary to clear any rows for the tables we have just updated from the OJB cache. otherwise, subsequent calls to OJB will fetch the old, unupdated cached rows. 399 */ 400 persistenceService.clearCache(); 401 } 402 403 /** 404 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetReportsControlListDao#updateRepotsAccountSummaryTable(java.lang.String) 405 */ 406 public void updateReportsAccountSummaryTable(String principalName) { 407 // build the list of strings to insert 408 String revenueList = getRevenueINList(); 409 String expenditureList = getExpenditureINList(); 410 ArrayList<String> stringsToInsert = new ArrayList<String>(8); 411 stringsToInsert.add(Report.INCOME_EXP_TYPE_A); 412 stringsToInsert.add(revenueList); 413 stringsToInsert.add(Report.INCOME_EXP_TYPE_E); 414 stringsToInsert.add(expenditureList); 415 stringsToInsert.add(Report.INCOME_EXP_TYPE_T); 416 stringsToInsert.add(expenditureList); 417 stringsToInsert.add(Report.INCOME_EXP_TYPE_X); 418 stringsToInsert.add(expenditureList); 419 // run the SQL after inserting the constant strings 420 getSimpleJdbcTemplate().update(updateReportsAccountSummaryTable.get(0).getSQL(stringsToInsert), principalName, principalName, principalName, principalName, principalName, principalName, principalName, principalName); 421 /** 422 * this is necessary to clear any rows for the tables we have just updated from the OJB cache. otherwise, subsequent calls to OJB will fetch the old, unupdated cached rows. 423 */ 424 persistenceService.clearCache(); 425 } 426 427 428 /** 429 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetReportsControlListDao#updateRepotsAccountSummaryTable(java.lang.String) 430 */ 431 public void updateReportsAccountSummaryTableWithConsolidation(String principalName) { 432 // build the list of strings to insert 433 String revenueList = getRevenueINList(); 434 String expenditureList = getExpenditureINList(); 435 ArrayList<String> stringsToInsert = new ArrayList<String>(8); 436 stringsToInsert.add(Report.INCOME_EXP_TYPE_A); 437 stringsToInsert.add(revenueList); 438 stringsToInsert.add(Report.INCOME_EXP_TYPE_E); 439 stringsToInsert.add(expenditureList); 440 stringsToInsert.add(Report.INCOME_EXP_TYPE_T); 441 stringsToInsert.add(expenditureList); 442 stringsToInsert.add(Report.INCOME_EXP_TYPE_X); 443 stringsToInsert.add(expenditureList); 444 // run the SQL after inserting the constant strings 445 getSimpleJdbcTemplate().update(updateReportsAccountSummaryTableWithConsolidation.get(0).getSQL(stringsToInsert), principalName, principalName, principalName, principalName, principalName, principalName, principalName, principalName); 446 /** 447 * this is necessary to clear any rows for the tables we have just updated from the OJB cache. otherwise, subsequent calls to OJB will fetch the old, unupdated cached rows. 448 */ 449 persistenceService.clearCache(); 450 } 451 452 /** 453 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetReportsControlListDao#updateSubFundSummaryReport(java.lang.String) 454 */ 455 public void updateSubFundSummaryReport(String principalName) { 456 // build the list of strings to insert 457 String revenueList = getRevenueINList(); 458 String expenditureList = getExpenditureINList(); 459 ArrayList<String> stringsToInsert = new ArrayList<String>(8); 460 stringsToInsert.add(Report.INCOME_EXP_TYPE_A); 461 stringsToInsert.add(revenueList); 462 stringsToInsert.add(Report.INCOME_EXP_TYPE_E); 463 stringsToInsert.add(expenditureList); 464 stringsToInsert.add(Report.INCOME_EXP_TYPE_T); 465 stringsToInsert.add(expenditureList); 466 stringsToInsert.add(Report.INCOME_EXP_TYPE_X); 467 stringsToInsert.add(expenditureList); 468 // run the SQL after inserting the constant strings 469 getSimpleJdbcTemplate().update(updateSubFundSummaryReport.get(0).getSQL(stringsToInsert), principalName, principalName, principalName, principalName, principalName, principalName, principalName, principalName); 470 /** 471 * this is necessary to clear any rows for the tables we have just updated from the OJB cache. otherwise, subsequent calls to OJB will fetch the old, unupdated cached rows. 472 */ 473 persistenceService.clearCache(); 474 } 475 476 public void setPersistenceService(PersistenceService persistenceService) 477 { 478 this.persistenceService = persistenceService; 479 } 480 } 481