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 }