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