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.math.BigDecimal; 019 import java.util.ArrayList; 020 import java.util.Collection; 021 import java.util.Collections; 022 import java.util.HashMap; 023 import java.util.Iterator; 024 import java.util.List; 025 import java.util.Map; 026 027 import org.apache.ojb.broker.PersistenceBroker; 028 import org.apache.ojb.broker.query.Criteria; 029 import org.apache.ojb.broker.query.QueryByCriteria; 030 import org.apache.ojb.broker.query.QueryFactory; 031 import org.apache.ojb.broker.query.ReportQueryByCriteria; 032 import org.kuali.kfs.coa.businessobject.AccountDelegate; 033 import org.kuali.kfs.integration.ld.LaborLedgerObject; 034 import org.kuali.kfs.module.bc.BCConstants; 035 import org.kuali.kfs.module.bc.BCPropertyConstants; 036 import org.kuali.kfs.module.bc.BCConstants.OrgSelControlOption; 037 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAccountOrganizationHierarchy; 038 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAccountReports; 039 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionFundingLock; 040 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionHeader; 041 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionOrganizationReports; 042 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPosition; 043 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPullup; 044 import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding; 045 import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionGeneralLedger; 046 import org.kuali.kfs.module.bc.document.BudgetConstructionDocument; 047 import org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao; 048 import org.kuali.kfs.sys.KFSConstants; 049 import org.kuali.kfs.sys.KFSPropertyConstants; 050 import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb; 051 import org.kuali.rice.kns.service.DataDictionaryService; 052 import org.kuali.rice.kns.service.KualiModuleService; 053 import org.kuali.rice.kns.util.KualiInteger; 054 import org.kuali.rice.kns.util.TransactionalServiceUtils; 055 056 /** 057 * This class is the OJB implementation of the BudgetConstructionDao interface. 058 */ 059 public class BudgetConstructionDaoOjb extends PlatformAwareDaoBaseOjb implements BudgetConstructionDao { 060 061 private DataDictionaryService dataDictionaryService; 062 private KualiModuleService kualiModuleService; 063 064 /** 065 * This gets a BudgetConstructionHeader using the candidate key chart, account, subaccount, fiscalyear 066 * 067 * @param chartOfAccountsCode 068 * @param accountNumber 069 * @param subAccountNumber 070 * @param fiscalYear 071 * @return BudgetConstructionHeader 072 */ 073 public BudgetConstructionHeader getByCandidateKey(String chartOfAccountsCode, String accountNumber, String subAccountNumber, Integer fiscalYear) { 074 Criteria criteria = new Criteria(); 075 criteria.addEqualTo("chartOfAccountsCode", chartOfAccountsCode); 076 criteria.addEqualTo("accountNumber", accountNumber); 077 criteria.addEqualTo("subAccountNumber", subAccountNumber); 078 criteria.addEqualTo("universityFiscalYear", fiscalYear); 079 080 return (BudgetConstructionHeader) getPersistenceBrokerTemplate().getObjectByQuery(QueryFactory.newQuery(BudgetConstructionHeader.class, criteria)); 081 } 082 083 /** 084 * This saves a BudgetConstructionHeader object to the database 085 * 086 * @param bcHeader 087 */ 088 public void saveBudgetConstructionHeader(BudgetConstructionHeader bcHeader) { 089 getPersistenceBrokerTemplate().store(bcHeader); 090 } 091 092 /** 093 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#saveBudgetConstructionDocument(org.kuali.kfs.module.bc.document.BudgetConstructionDocument) 094 */ 095 public void saveBudgetConstructionDocument(BudgetConstructionDocument bcDocument) { 096 getPersistenceBrokerTemplate().store(bcDocument); 097 } 098 099 /** 100 * This gets a BudgetConstructionFundingLock using the primary key chart, account, subaccount, fiscalyear, pUId 101 * 102 * @param chartOfAccountsCode 103 * @param accountNumber 104 * @param subAccountNumber 105 * @param fiscalYear 106 * @param principalId 107 * @return BudgetConstructionFundingLock 108 */ 109 public BudgetConstructionFundingLock getByPrimaryId(String chartOfAccountsCode, String accountNumber, String subAccountNumber, Integer fiscalYear, String principalId) { 110 // LOG.debug("getByPrimaryId() started"); 111 112 Criteria criteria = new Criteria(); 113 criteria.addEqualTo("appointmentFundingLockUserId", principalId); 114 criteria.addEqualTo("chartOfAccountsCode", chartOfAccountsCode); 115 criteria.addEqualTo("accountNumber", accountNumber); 116 criteria.addEqualTo("subAccountNumber", subAccountNumber); 117 criteria.addEqualTo("universityFiscalYear", fiscalYear); 118 119 return (BudgetConstructionFundingLock) getPersistenceBrokerTemplate().getObjectByQuery(QueryFactory.newQuery(BudgetConstructionFundingLock.class, criteria)); 120 } 121 122 /** 123 * This saves a BudgetConstructionFundingLock to the database 124 * 125 * @param budgetConstructionFundingLock 126 */ 127 public void saveBudgetConstructionFundingLock(BudgetConstructionFundingLock budgetConstructionFundingLock) { 128 getPersistenceBrokerTemplate().store(budgetConstructionFundingLock); 129 } 130 131 /** 132 * This deletes a BudgetConstructionFundingLock from the database 133 * 134 * @param budgetConstructionFundingLock 135 */ 136 public void deleteBudgetConstructionFundingLock(BudgetConstructionFundingLock budgetConstructionFundingLock) { 137 getPersistenceBrokerTemplate().delete(budgetConstructionFundingLock); 138 } 139 140 /** 141 * This gets the set of BudgetConstructionFundingLocks asssociated with a BC EDoc (account). Each BudgetConstructionFundingLock 142 * has the positionNumber dummy attribute set to the associated Position that is locked. A positionNumber value of "NotFnd" 143 * indicates the BudgetConstructionFundingLock is an orphan. 144 * 145 * @param chartOfAccountsCode 146 * @param accountNumber 147 * @param subAccountNumber 148 * @param fiscalYear 149 * @return Collection<BudgetConstructionFundingLock> 150 */ 151 public Collection<BudgetConstructionFundingLock> getFlocksForAccount(String chartOfAccountsCode, String accountNumber, String subAccountNumber, Integer fiscalYear) { 152 Collection<BudgetConstructionFundingLock> fundingLocks; 153 154 Criteria criteria = new Criteria(); 155 criteria.addEqualTo("chartOfAccountsCode", chartOfAccountsCode); 156 criteria.addEqualTo("accountNumber", accountNumber); 157 criteria.addEqualTo("subAccountNumber", subAccountNumber); 158 criteria.addEqualTo("universityFiscalYear", fiscalYear); 159 160 fundingLocks = (Collection<BudgetConstructionFundingLock>) getPersistenceBrokerTemplate().getCollectionByQuery(QueryFactory.newQuery(BudgetConstructionFundingLock.class, criteria)); 161 BudgetConstructionFundingLock fundingLock; 162 Iterator<BudgetConstructionFundingLock> iter = fundingLocks.iterator(); 163 while (iter.hasNext()) { 164 fundingLock = iter.next(); 165 fundingLock.setPositionNumber(getPositionAssociatedWithFundingLock(fundingLock)); 166 } 167 168 return fundingLocks; 169 } 170 171 /** 172 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#getPositionAssociatedWithFundingLock(org.kuali.kfs.module.bc.businessobject.BudgetConstructionFundingLock) 173 */ 174 public String getPositionAssociatedWithFundingLock(BudgetConstructionFundingLock budgetConstructionFundingLock) { 175 176 String positionNumber = BCConstants.POSITION_NUMBER_NOT_FOUND; // default if there is no associated position that is locked 177 // (orphaned) 178 179 Criteria criteria = new Criteria(); 180 criteria.addEqualTo("pendingBudgetConstructionAppointmentFunding.chartOfAccountsCode", budgetConstructionFundingLock.getChartOfAccountsCode()); 181 criteria.addEqualTo("pendingBudgetConstructionAppointmentFunding.accountNumber", budgetConstructionFundingLock.getAccountNumber()); 182 criteria.addEqualTo("pendingBudgetConstructionAppointmentFunding.subAccountNumber", budgetConstructionFundingLock.getSubAccountNumber()); 183 criteria.addEqualTo("pendingBudgetConstructionAppointmentFunding.universityFiscalYear", budgetConstructionFundingLock.getUniversityFiscalYear()); 184 criteria.addEqualTo("positionLockUserIdentifier", budgetConstructionFundingLock.getAppointmentFundingLockUserId()); 185 String[] columns = new String[] { "positionNumber" }; 186 ReportQueryByCriteria q = QueryFactory.newReportQuery(BudgetConstructionPosition.class, columns, criteria, true); 187 PersistenceBroker pb = getPersistenceBroker(true); 188 189 Iterator<Object[]> iter = pb.getReportQueryIteratorByQuery(q); 190 191 if (iter.hasNext()) { 192 Object[] objs = (Object[]) TransactionalServiceUtils.retrieveFirstAndExhaustIterator(iter); 193 if (objs[0] != null) { 194 positionNumber = (String) objs[0]; 195 } 196 } 197 return positionNumber; 198 } 199 200 /** 201 * Gets a BudgetConstructionPosition from the database by the primary key positionNumber, fiscalYear 202 * 203 * @param positionNumber 204 * @param fiscalYear 205 * @return BudgetConstructionPosition 206 */ 207 public BudgetConstructionPosition getByPrimaryId(String positionNumber, Integer fiscalYear) { 208 // LOG.debug("getByPrimaryId() started"); 209 210 Criteria criteria = new Criteria(); 211 criteria.addEqualTo("positionNumber", positionNumber); 212 criteria.addEqualTo("universityFiscalYear", fiscalYear); 213 214 return (BudgetConstructionPosition) getPersistenceBrokerTemplate().getObjectByQuery(QueryFactory.newQuery(BudgetConstructionPosition.class, criteria)); 215 } 216 217 /** 218 * Saves a BudgetConstructionPosition to the database 219 * 220 * @param bcPosition 221 */ 222 public void saveBudgetConstructionPosition(BudgetConstructionPosition bcPosition) { 223 getPersistenceBrokerTemplate().store(bcPosition); 224 } 225 226 /** 227 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#deleteBudgetConstructionPullupByUserId(java.lang.String) 228 */ 229 public void deleteBudgetConstructionPullupByUserId(String principalName) { 230 231 Criteria criteria = new Criteria(); 232 criteria.addEqualTo("principalId", principalName); 233 getPersistenceBrokerTemplate().deleteByQuery(QueryFactory.newQuery(BudgetConstructionPullup.class, criteria)); 234 235 } 236 237 /** 238 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#getBudgetConstructionPullupFlagSetByUserId(java.lang.String) 239 */ 240 public List<BudgetConstructionPullup> getBudgetConstructionPullupFlagSetByUserId(String principalName) { 241 List<BudgetConstructionPullup> orgs = new ArrayList<BudgetConstructionPullup>(); 242 243 Criteria criteria = new Criteria(); 244 criteria.addEqualTo(KFSPropertyConstants.KUALI_USER_PERSON_UNIVERSAL_IDENTIFIER, principalName); 245 criteria.addGreaterThan("pullFlag", OrgSelControlOption.NO.getKey()); 246 orgs = (List<BudgetConstructionPullup>) getPersistenceBrokerTemplate().getCollectionByQuery(QueryFactory.newQuery(BudgetConstructionPullup.class, criteria)); 247 if (orgs.isEmpty() || orgs.size() == 0) { 248 return (List<BudgetConstructionPullup>)Collections.EMPTY_LIST; 249 } 250 return orgs; 251 } 252 253 /** 254 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#getBcPullupChildOrgs(java.lang.String, 255 * java.lang.String, java.lang.String) 256 */ 257 public List<BudgetConstructionPullup> getBudgetConstructionPullupChildOrgs(String principalId, String chartOfAccountsCode, String organizationCode) { 258 List<BudgetConstructionPullup> orgs = new ArrayList<BudgetConstructionPullup>(); 259 260 Criteria cycleCheckCriteria = new Criteria(); 261 cycleCheckCriteria.addEqualToField("chartOfAccountsCode", "reportsToChartOfAccountsCode"); 262 cycleCheckCriteria.addEqualToField("organizationCode", "reportsToOrganizationCode"); 263 cycleCheckCriteria.setEmbraced(true); 264 cycleCheckCriteria.setNegative(true); 265 266 Criteria criteria = new Criteria(); 267 criteria.addEqualTo("reportsToChartOfAccountsCode", chartOfAccountsCode); 268 criteria.addEqualTo("reportsToOrganizationCode", organizationCode); 269 criteria.addEqualTo("principalId", principalId); 270 criteria.addAndCriteria(cycleCheckCriteria); 271 272 QueryByCriteria query = QueryFactory.newQuery(BudgetConstructionPullup.class, criteria); 273 query.addOrderByAscending("organization.organizationName"); 274 275 orgs = (List<BudgetConstructionPullup>) getPersistenceBrokerTemplate().getCollectionByQuery(query); 276 277 if (orgs.isEmpty() || orgs.size() == 0) { 278 return (List<BudgetConstructionPullup>) Collections.EMPTY_LIST; 279 } 280 return orgs; 281 } 282 283 /** 284 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#getPendingBudgetConstructionAppointmentFundingRequestSum(org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionGeneralLedger) 285 */ 286 public KualiInteger getPendingBudgetConstructionAppointmentFundingRequestSum(PendingBudgetConstructionGeneralLedger salaryDetailLine) { 287 KualiInteger salarySum = KualiInteger.ZERO; 288 289 Criteria criteria = new Criteria(); 290 criteria.addEqualTo("universityFiscalYear", salaryDetailLine.getUniversityFiscalYear()); 291 criteria.addEqualTo("chartOfAccountsCode", salaryDetailLine.getChartOfAccountsCode()); 292 criteria.addEqualTo("accountNumber", salaryDetailLine.getAccountNumber()); 293 criteria.addEqualTo("subAccountNumber", salaryDetailLine.getSubAccountNumber()); 294 criteria.addEqualTo("financialObjectCode", salaryDetailLine.getFinancialObjectCode()); 295 criteria.addEqualTo("financialSubObjectCode", salaryDetailLine.getFinancialSubObjectCode()); 296 String[] columns = new String[] { "financialObjectCode", "financialSubObjectCode", "sum(appointmentRequestedAmount)" }; 297 ReportQueryByCriteria q = QueryFactory.newReportQuery(PendingBudgetConstructionAppointmentFunding.class, columns, criteria, true); 298 q.addGroupBy(new String[] { "financialObjectCode", "financialSubObjectCode" }); 299 PersistenceBroker pb = getPersistenceBroker(true); 300 301 Iterator<Object[]> iter = pb.getReportQueryIteratorByQuery(q); 302 303 if (iter.hasNext()) { 304 Object[] objs = (Object[]) TransactionalServiceUtils.retrieveFirstAndExhaustIterator(iter); 305 if (objs[2] != null) { 306 salarySum = new KualiInteger((BigDecimal) objs[2]); 307 } 308 } 309 return salarySum; 310 } 311 312 313 /** 314 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#getDocumentPBGLFringeLines(java.lang.String, 315 * java.util.List) 316 */ 317 public List getDocumentPBGLFringeLines(String documentNumber, List fringeObjects) { 318 List documentPBGLfringeLines = new ArrayList(); 319 320 // we probably should just add a clearcache call at the end of all JDBC public methods that update the DB 321 getPersistenceBrokerTemplate().clearCache(); 322 323 Criteria criteria = new Criteria(); 324 criteria.addEqualTo("documentNumber", documentNumber); 325 criteria.addIn("financialObjectCode", fringeObjects); 326 QueryByCriteria query = QueryFactory.newQuery(PendingBudgetConstructionGeneralLedger.class, criteria); 327 query.addOrderByAscending("financialObjectCode"); 328 documentPBGLfringeLines = (List) getPersistenceBrokerTemplate().getCollectionByQuery(query); 329 330 return documentPBGLfringeLines; 331 } 332 333 /** 334 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#isDelegate(java.lang.String, java.lang.String, 335 * java.lang.String) 336 */ 337 public boolean isDelegate(String chartOfAccountsCode, String accountNumber, String principalId) { 338 339 boolean retval = false; 340 341 // active BC account delegates are marked with the BC document type or the special "ALL" document type 342 List docTypes = new ArrayList(); 343 docTypes.add(BCConstants.DOCUMENT_TYPE_CODE_ALL); 344 docTypes.add(KFSConstants.FinancialDocumentTypeCodes.BUDGET_CONSTRUCTION); 345 346 Criteria criteria = new Criteria(); 347 criteria.addEqualTo("chartOfAccountsCode", chartOfAccountsCode); 348 criteria.addEqualTo("accountNumber", accountNumber); 349 criteria.addEqualTo("accountDelegateSystemId", principalId); 350 criteria.addEqualTo("active", "Y"); 351 criteria.addIn("financialDocumentTypeCode", docTypes); 352 QueryByCriteria query = QueryFactory.newQuery(AccountDelegate.class, criteria); 353 if (getPersistenceBrokerTemplate().getCount(query) > 0) { 354 retval = true; 355 } 356 357 return retval; 358 } 359 360 /** 361 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#getAccountOrgHierForAccount(java.lang.String, 362 * java.lang.String, java.lang.Integer) 363 */ 364 public List<BudgetConstructionAccountOrganizationHierarchy> getAccountOrgHierForAccount(String chartOfAccountsCode, String accountNumber, Integer universityFiscalYear) { 365 List<BudgetConstructionAccountOrganizationHierarchy> accountOrgHier = new ArrayList(); 366 367 Criteria criteria = new Criteria(); 368 criteria.addEqualTo("universityFiscalYear", universityFiscalYear); 369 criteria.addEqualTo("chartOfAccountsCode", chartOfAccountsCode); 370 criteria.addEqualTo("accountNumber", accountNumber); 371 372 QueryByCriteria query = QueryFactory.newQuery(BudgetConstructionAccountOrganizationHierarchy.class, criteria); 373 query.addOrderByAscending("organizationLevelCode"); 374 375 accountOrgHier = (List) getPersistenceBrokerTemplate().getCollectionByQuery(query); 376 377 378 return accountOrgHier; 379 } 380 381 /** 382 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#getAccountReports(java.lang.String, java.lang.String) 383 */ 384 public BudgetConstructionAccountReports getAccountReports(String chartOfAccountsCode, String accountNumber) { 385 386 Criteria criteria = new Criteria(); 387 criteria.addEqualTo("chartOfAccountsCode", chartOfAccountsCode); 388 criteria.addEqualTo("accountNumber", accountNumber); 389 390 return (BudgetConstructionAccountReports) getPersistenceBrokerTemplate().getObjectByQuery(QueryFactory.newQuery(BudgetConstructionAccountReports.class, criteria)); 391 } 392 393 /** 394 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#getOrganizationReports(java.lang.String, 395 * java.lang.String) 396 */ 397 public BudgetConstructionOrganizationReports getOrganizationReports(String chartOfAccountsCode, String organizationCode) { 398 399 Criteria criteria = new Criteria(); 400 criteria.addEqualTo("chartOfAccountsCode", chartOfAccountsCode); 401 criteria.addEqualTo("organizationCode", organizationCode); 402 403 return (BudgetConstructionOrganizationReports) getPersistenceBrokerTemplate().getObjectByQuery(QueryFactory.newQuery(BudgetConstructionOrganizationReports.class, criteria)); 404 } 405 406 /** 407 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#insertAccountIntoAccountOrganizationHierarchy(java.lang.String, 408 * java.lang.String, java.lang.Integer, java.lang.String, java.lang.String, java.lang.Integer, java.lang.String, 409 * java.lang.String) 410 */ 411 public boolean insertAccountIntoAccountOrganizationHierarchy(String rootChart, String rootOrganization, Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber, Integer currentLevelCode, String organizationChartOfAccountsCode, String organizationCode) { 412 413 boolean overFlow = false; 414 415 // insert the level 416 BudgetConstructionAccountOrganizationHierarchy accountOrganizationHierarchy = new BudgetConstructionAccountOrganizationHierarchy(); 417 accountOrganizationHierarchy.setUniversityFiscalYear(universityFiscalYear); 418 accountOrganizationHierarchy.setChartOfAccountsCode(chartOfAccountsCode); 419 accountOrganizationHierarchy.setAccountNumber(accountNumber); 420 accountOrganizationHierarchy.setOrganizationLevelCode(currentLevelCode); 421 accountOrganizationHierarchy.setOrganizationChartOfAccountsCode(organizationChartOfAccountsCode); 422 accountOrganizationHierarchy.setOrganizationCode(organizationCode); 423 getPersistenceBrokerTemplate().store(accountOrganizationHierarchy); 424 425 // if not currently the root, get the next reports to org, if not overflow call this to insert the next level 426 if (!(rootChart.equalsIgnoreCase(organizationChartOfAccountsCode) && rootOrganization.equalsIgnoreCase(organizationCode))) { 427 if (currentLevelCode < BCConstants.MAXIMUM_ORGANIZATION_TREE_DEPTH) { 428 BudgetConstructionOrganizationReports organizationReports = this.getOrganizationReports(organizationChartOfAccountsCode, organizationCode); 429 if (organizationReports != null) { 430 currentLevelCode++; 431 overFlow = this.insertAccountIntoAccountOrganizationHierarchy(rootChart, rootOrganization, universityFiscalYear, chartOfAccountsCode, accountNumber, currentLevelCode, organizationReports.getReportsToChartOfAccountsCode(), organizationReports.getReportsToOrganizationCode()); 432 } 433 else { 434 // not the root but doesn't exist - done 435 } 436 } 437 else { 438 // overflow 439 overFlow = true; 440 } 441 } 442 return overFlow; 443 } 444 445 /** 446 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#deleteExistingAccountOrganizationHierarchy(java.lang.Integer, 447 * java.lang.String, java.lang.String) 448 */ 449 public void deleteExistingAccountOrganizationHierarchy(Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber) { 450 451 Criteria criteria = new Criteria(); 452 criteria.addEqualTo("universityFiscalYear", universityFiscalYear); 453 criteria.addEqualTo("chartOfAccountsCode", chartOfAccountsCode); 454 criteria.addEqualTo("accountNumber", accountNumber); 455 getPersistenceBrokerTemplate().deleteByQuery(QueryFactory.newQuery(BudgetConstructionAccountOrganizationHierarchy.class, criteria)); 456 } 457 458 /** 459 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#getDetailSalarySettingLaborObjects(java.lang.Integer, 460 * java.lang.String) 461 */ 462 public List<String> getDetailSalarySettingLaborObjects(Integer universityFiscalYear, String chartOfAccountsCode) { 463 List<String> detailSalarySettingObjects = new ArrayList<String>(); 464 465 Map<String, Object> laborObjectCodeMap = new HashMap<String, Object>(); 466 laborObjectCodeMap.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, universityFiscalYear); 467 laborObjectCodeMap.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, chartOfAccountsCode); 468 laborObjectCodeMap.put(KFSPropertyConstants.DETAIL_POSITION_REQUIRED_INDICATOR, true); 469 List<LaborLedgerObject> laborLedgerObjects = kualiModuleService.getResponsibleModuleService(LaborLedgerObject.class).getExternalizableBusinessObjectsList(LaborLedgerObject.class, laborObjectCodeMap); 470 471 for (LaborLedgerObject laborObject : laborLedgerObjects) { 472 detailSalarySettingObjects.add(laborObject.getFinancialObjectCode()); 473 } 474 475 return detailSalarySettingObjects; 476 } 477 478 /** 479 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#getPBGLSalarySettingRows(java.lang.String, 480 * java.util.List) 481 */ 482 public List getPBGLSalarySettingRows(String documentNumber, List salarySettingObjects) { 483 List pbglSalarySettingRows = new ArrayList(); 484 485 // need to make sure we are getting the data that was updated by the jdbc benefits calc calls 486 getPersistenceBrokerTemplate().clearCache(); 487 488 Criteria criteria = new Criteria(); 489 criteria.addEqualTo("documentNumber", documentNumber); 490 criteria.addIn("financialObjectCode", salarySettingObjects); 491 QueryByCriteria query = QueryFactory.newQuery(PendingBudgetConstructionGeneralLedger.class, criteria); 492 pbglSalarySettingRows = (List) getPersistenceBrokerTemplate().getCollectionByQuery(query); 493 494 return pbglSalarySettingRows; 495 } 496 497 /** 498 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao#getAllFundingForPosition(java.lang.Integer, 499 * java.lang.String) 500 */ 501 public List<PendingBudgetConstructionAppointmentFunding> getAllFundingForPosition(Integer universityFiscalYear, String positionNumber) { 502 Criteria criteria = new Criteria(); 503 criteria.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, universityFiscalYear); 504 criteria.addEqualTo(BCPropertyConstants.POSITION_NUMBER, positionNumber); 505 506 QueryByCriteria query = QueryFactory.newQuery(PendingBudgetConstructionAppointmentFunding.class, criteria); 507 508 return (List<PendingBudgetConstructionAppointmentFunding>) getPersistenceBrokerTemplate().getCollectionByQuery(query); 509 } 510 511 /** 512 * Sets the kualiModuleService attribute value. 513 * 514 * @param kualiModuleService The kualiModuleService to set. 515 */ 516 public void setKualiModuleService(KualiModuleService kualiModuleService) { 517 this.kualiModuleService = kualiModuleService; 518 } 519 520 /** 521 * Gets the dataDictionaryService attribute. 522 * @return Returns the dataDictionaryService. 523 */ 524 public DataDictionaryService getDataDictionaryService() { 525 return dataDictionaryService; 526 } 527 528 /** 529 * Sets the dataDictionaryService attribute value. 530 * @param dataDictionaryService The dataDictionaryService to set. 531 */ 532 public void setDataDictionaryService(DataDictionaryService dataDictionaryService) { 533 this.dataDictionaryService = dataDictionaryService; 534 } 535 536 } 537