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 import java.util.List; 020 021 import org.apache.commons.lang.StringUtils; 022 import org.apache.ojb.broker.query.Criteria; 023 import org.apache.ojb.broker.query.QueryFactory; 024 import org.apache.ojb.broker.query.ReportQueryByCriteria; 025 import org.kuali.kfs.module.bc.BCConstants; 026 import org.kuali.kfs.module.bc.BCPropertyConstants; 027 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionFundingLock; 028 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionHeader; 029 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPosition; 030 import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding; 031 import org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionDao; 032 import org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionLockDao; 033 import org.kuali.kfs.sys.KFSPropertyConstants; 034 import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb; 035 036 /** 037 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionLockDao 038 */ 039 public class BudgetConstructionLockDaoOjb extends PlatformAwareDaoBaseOjb implements BudgetConstructionLockDao { 040 private BudgetConstructionDao budgetConstructionDao; 041 042 /** 043 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionLockDao#getAllAccountLocks(java.lang.String) 044 */ 045 public List<BudgetConstructionHeader> getAllAccountLocks(String lockUnivId) { 046 Criteria criteria = new Criteria(); 047 048 if (StringUtils.isNotBlank(lockUnivId)) { 049 criteria.addEqualTo(BCPropertyConstants.BUDGET_LOCK_USER_IDENTIFIER, lockUnivId); 050 } 051 else { 052 criteria.addNotNull(BCPropertyConstants.BUDGET_LOCK_USER_IDENTIFIER); 053 } 054 055 ReportQueryByCriteria query = QueryFactory.newReportQuery(BudgetConstructionHeader.class, criteria); 056 query.addOrderByAscending(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR); 057 query.addOrderByAscending(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE); 058 query.addOrderByAscending(KFSPropertyConstants.ACCOUNT_NUMBER); 059 query.addOrderByAscending(KFSPropertyConstants.SUB_ACCOUNT_NUMBER); 060 061 return (List<BudgetConstructionHeader>) getPersistenceBrokerTemplate().getCollectionByQuery(query); 062 } 063 064 /** 065 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionLockDao#getAllPositionFundingLocks(java.lang.String) 066 */ 067 public List<PendingBudgetConstructionAppointmentFunding> getAllPositionFundingLocks(String lockUnivId) { 068 Criteria criteria = new Criteria(); 069 070 if (StringUtils.isNotBlank(lockUnivId)) { 071 criteria.addEqualTo(BCPropertyConstants.APPOINTMENT_FUNDING_LOCK_USER_ID, lockUnivId); 072 } 073 else { 074 criteria.addNotNull(BCPropertyConstants.APPOINTMENT_FUNDING_LOCK_USER_ID); 075 } 076 077 ReportQueryByCriteria query = QueryFactory.newReportQuery(BudgetConstructionFundingLock.class, criteria); 078 query.addOrderByAscending(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR); 079 query.addOrderByAscending(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE); 080 query.addOrderByAscending(KFSPropertyConstants.ACCOUNT_NUMBER); 081 query.addOrderByAscending(KFSPropertyConstants.SUB_ACCOUNT_NUMBER); 082 083 List<BudgetConstructionFundingLock> allFundingLocks = (List<BudgetConstructionFundingLock>) getPersistenceBrokerTemplate().getCollectionByQuery(query); 084 085 List<PendingBudgetConstructionAppointmentFunding> positionFundingLocks = new ArrayList<PendingBudgetConstructionAppointmentFunding>(); 086 for (BudgetConstructionFundingLock fundingLock : allFundingLocks) { 087 Criteria criteria2 = new Criteria(); 088 criteria2.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, fundingLock.getUniversityFiscalYear()); 089 criteria2.addEqualTo(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, fundingLock.getChartOfAccountsCode()); 090 criteria2.addEqualTo(KFSPropertyConstants.ACCOUNT_NUMBER, fundingLock.getAccountNumber()); 091 criteria2.addEqualTo(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, fundingLock.getSubAccountNumber()); 092 criteria2.addEqualTo(BCPropertyConstants.BUDGET_CONSTRUCTION_POSITION + "." + BCPropertyConstants.POSITION_LOCK_USER_IDENTIFIER, fundingLock.getAppointmentFundingLockUserId()); 093 094 positionFundingLocks.addAll((List<PendingBudgetConstructionAppointmentFunding>) getPersistenceBrokerTemplate().getCollectionByQuery(QueryFactory.newQuery(PendingBudgetConstructionAppointmentFunding.class, criteria2))); 095 } 096 097 return positionFundingLocks; 098 } 099 100 /** 101 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionLockDao#getOrphanedPositionLocks(java.lang.String) 102 */ 103 public List<BudgetConstructionPosition> getOrphanedPositionLocks(String lockUnivId) { 104 Criteria criteria = new Criteria(); 105 106 if (StringUtils.isNotBlank(lockUnivId)) { 107 criteria.addEqualTo(BCPropertyConstants.POSITION_LOCK_USER_IDENTIFIER, lockUnivId); 108 } 109 else { 110 criteria.addNotNull(BCPropertyConstants.POSITION_LOCK_USER_IDENTIFIER); 111 } 112 113 ReportQueryByCriteria query = QueryFactory.newReportQuery(BudgetConstructionPosition.class, criteria); 114 query.addOrderByAscending(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR); 115 query.addOrderByAscending(BCPropertyConstants.POSITION_NUMBER); 116 117 List<BudgetConstructionPosition> allPositionLocks = (List<BudgetConstructionPosition>) getPersistenceBrokerTemplate().getCollectionByQuery(query); 118 119 List<BudgetConstructionPosition> orphanedPositionLocks = new ArrayList<BudgetConstructionPosition>(); 120 for (BudgetConstructionPosition position : allPositionLocks) { 121 Criteria criteria2 = new Criteria(); 122 criteria2.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, position.getUniversityFiscalYear()); 123 criteria2.addEqualTo(BCPropertyConstants.POSITION_NUMBER, position.getPositionNumber()); 124 125 Criteria subCrit = new Criteria(); 126 subCrit.addEqualToField(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, Criteria.PARENT_QUERY_PREFIX + KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR); 127 subCrit.addEqualToField(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, Criteria.PARENT_QUERY_PREFIX + KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE); 128 subCrit.addEqualToField(KFSPropertyConstants.ACCOUNT_NUMBER, Criteria.PARENT_QUERY_PREFIX + KFSPropertyConstants.ACCOUNT_NUMBER); 129 subCrit.addEqualToField(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, Criteria.PARENT_QUERY_PREFIX + KFSPropertyConstants.SUB_ACCOUNT_NUMBER); 130 subCrit.addEqualTo(BCPropertyConstants.APPOINTMENT_FUNDING_LOCK_USER_ID, position.getPositionLockUserIdentifier()); 131 132 ReportQueryByCriteria subQuery = QueryFactory.newReportQuery(BudgetConstructionFundingLock.class, subCrit); 133 subQuery.setAttributes(new String[] { "1" }); 134 criteria2.addExists(subQuery); 135 136 List<PendingBudgetConstructionAppointmentFunding> appointmentFundingLocks = (List<PendingBudgetConstructionAppointmentFunding>) getPersistenceBrokerTemplate().getCollectionByQuery(QueryFactory.newQuery(PendingBudgetConstructionAppointmentFunding.class, criteria2)); 137 if (appointmentFundingLocks == null || appointmentFundingLocks.isEmpty()) { 138 orphanedPositionLocks.add(position); 139 } 140 } 141 142 return orphanedPositionLocks; 143 } 144 145 /** 146 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionLockDao#getAllTransactionLocks(java.lang.String) 147 */ 148 public List<BudgetConstructionHeader> getAllTransactionLocks(String lockUnivId) { 149 Criteria criteria = new Criteria(); 150 151 if (StringUtils.isNotBlank(lockUnivId)) { 152 criteria.addEqualTo(BCPropertyConstants.BUDGET_TRANSACTION_LOCK_USER_IDENTIFIER, lockUnivId); 153 } 154 else { 155 criteria.addNotNull(BCPropertyConstants.BUDGET_TRANSACTION_LOCK_USER_IDENTIFIER); 156 } 157 158 ReportQueryByCriteria query = QueryFactory.newReportQuery(BudgetConstructionHeader.class, criteria); 159 query.addOrderByAscending(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR); 160 query.addOrderByAscending(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE); 161 query.addOrderByAscending(KFSPropertyConstants.ACCOUNT_NUMBER); 162 query.addOrderByAscending(KFSPropertyConstants.SUB_ACCOUNT_NUMBER); 163 164 return (List<BudgetConstructionHeader>) getPersistenceBrokerTemplate().getCollectionByQuery(query); 165 } 166 167 /** 168 * @see org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionLockDao#getOrphanedFundingLocks(java.lang.String) 169 */ 170 public List<BudgetConstructionFundingLock> getOrphanedFundingLocks(String lockUnivId) { 171 Criteria criteria = new Criteria(); 172 173 if (StringUtils.isNotBlank(lockUnivId)) { 174 criteria.addEqualTo(BCPropertyConstants.APPOINTMENT_FUNDING_LOCK_USER_ID, lockUnivId); 175 } 176 else { 177 criteria.addNotNull(BCPropertyConstants.APPOINTMENT_FUNDING_LOCK_USER_ID); 178 } 179 180 ReportQueryByCriteria query = QueryFactory.newReportQuery(BudgetConstructionFundingLock.class, criteria); 181 query.addOrderByAscending(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR); 182 query.addOrderByAscending(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE); 183 query.addOrderByAscending(KFSPropertyConstants.ACCOUNT_NUMBER); 184 query.addOrderByAscending(KFSPropertyConstants.SUB_ACCOUNT_NUMBER); 185 186 List<BudgetConstructionFundingLock> allFundingLocks = (List<BudgetConstructionFundingLock>) getPersistenceBrokerTemplate().getCollectionByQuery(query); 187 188 List<BudgetConstructionFundingLock> orphanedFundingLocks = new ArrayList<BudgetConstructionFundingLock>(); 189 for (BudgetConstructionFundingLock fundingLock : allFundingLocks) { 190 String positionNumber = budgetConstructionDao.getPositionAssociatedWithFundingLock(fundingLock); 191 if (BCConstants.POSITION_NUMBER_NOT_FOUND.equals(positionNumber)) { 192 orphanedFundingLocks.add(fundingLock); 193 } 194 } 195 196 return orphanedFundingLocks; 197 } 198 199 /** 200 * Sets the budgetConstructionDao attribute value. 201 * 202 * @param budgetConstructionDao The budgetConstructionDao to set. 203 */ 204 public void setBudgetConstructionDao(BudgetConstructionDao budgetConstructionDao) { 205 this.budgetConstructionDao = budgetConstructionDao; 206 } 207 208 }