001 /** 002 * Copyright 2004-2013 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.hr.lm.leaveblock.dao; 017 018 import java.sql.Timestamp; 019 import java.util.*; 020 021 import org.apache.commons.collections.CollectionUtils; 022 import org.apache.commons.lang3.StringUtils; 023 import org.apache.log4j.Logger; 024 import org.apache.ojb.broker.query.Criteria; 025 import org.apache.ojb.broker.query.Query; 026 import org.apache.ojb.broker.query.QueryFactory; 027 import org.apache.ojb.broker.query.ReportQueryByCriteria; 028 import org.joda.time.DateTime; 029 import org.kuali.hr.lm.LMConstants; 030 import org.kuali.hr.lm.leaveblock.LeaveBlock; 031 import org.kuali.hr.time.earncode.EarnCode; 032 import org.kuali.hr.time.service.base.TkServiceLocator; 033 import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb; 034 035 public class LeaveBlockDaoSpringOjbImpl extends PlatformAwareDaoBaseOjb implements LeaveBlockDao { 036 037 private static final Logger LOG = Logger.getLogger(LeaveBlockDaoSpringOjbImpl.class); 038 039 @Override 040 public LeaveBlock getLeaveBlock(String leaveBlockId) { 041 Criteria root = new Criteria(); 042 root.addEqualTo("lmLeaveBlockId", leaveBlockId); 043 // root.addEqualTo("active", true); 044 045 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 046 047 return (LeaveBlock) this.getPersistenceBrokerTemplate().getObjectByQuery(query); 048 } 049 050 @Override 051 public List<LeaveBlock> getLeaveBlocksForDocumentId(String documentId) { 052 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 053 Criteria root = new Criteria(); 054 root.addEqualTo("documentId", documentId); 055 // root.addEqualTo("active", true); 056 057 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 058 @SuppressWarnings("rawtypes") 059 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 060 061 if (c != null) { 062 leaveBlocks.addAll(c); 063 } 064 return leaveBlocks; 065 } 066 067 @SuppressWarnings("rawtypes") 068 @Override 069 public List<LeaveBlock> getLeaveBlocks(String principalId, Date beginDate, Date endDate) { 070 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 071 Criteria root = new Criteria(); 072 root.addEqualTo("principalId", principalId); 073 root.addGreaterOrEqualThan("leaveDate", beginDate); 074 root.addLessOrEqualThan("leaveDate", endDate); 075 // root.addEqualTo("active", true); 076 077 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 078 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 079 080 if (c != null) { 081 leaveBlocks.addAll(c); 082 } 083 084 return leaveBlocks; 085 } 086 087 @SuppressWarnings("rawtypes") 088 @Override 089 public List<LeaveBlock> getLeaveBlocksWithType(String principalId, Date beginDate, Date endDate, String leaveBlockType) { 090 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 091 Criteria root = new Criteria(); 092 root.addEqualTo("principalId", principalId); 093 root.addGreaterOrEqualThan("leaveDate", beginDate); 094 root.addLessOrEqualThan("leaveDate", endDate); 095 root.addEqualTo("leaveBlockType", leaveBlockType); 096 // root.addEqualTo("active", true); 097 098 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 099 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 100 101 if (c != null) { 102 leaveBlocks.addAll(c); 103 } 104 105 return leaveBlocks; 106 } 107 108 @Override 109 public List<LeaveBlock> getLeaveBlocksWithAccrualCategory(String principalId, Date beginDate, Date endDate, String accrualCategory) { 110 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 111 Criteria root = new Criteria(); 112 root.addEqualTo("principalId", principalId); 113 root.addGreaterOrEqualThan("leaveDate", beginDate); 114 root.addLessOrEqualThan("leaveDate", endDate); 115 root.addEqualTo("accrualCategory", accrualCategory); 116 // root.addEqualTo("active", true); 117 118 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 119 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 120 121 if (c != null) { 122 leaveBlocks.addAll(c); 123 } 124 125 return leaveBlocks; 126 } 127 128 public List<LeaveBlock> getLeaveBlocksSinceCarryOver(String principalId, Map<String, LeaveBlock> carryOverDates, DateTime endDate, boolean includeAllAccrualCategories) { 129 Criteria root = new Criteria(); 130 root.addEqualTo("principalId", principalId); 131 if (endDate != null) { 132 root.addLessOrEqualThan("leaveDate", endDate.toDate()); 133 } 134 135 Criteria orCriteria = new Criteria(); 136 for (Map.Entry<String, LeaveBlock> entry : carryOverDates.entrySet()) { 137 Criteria crit = new Criteria(); 138 crit.addEqualTo("accrualCategory", entry.getKey()); 139 crit.addGreaterThan("leaveDate", entry.getValue().getLeaveDate()); 140 orCriteria.addOrCriteria(crit); 141 } 142 if (!orCriteria.isEmpty()) { 143 if (CollectionUtils.isNotEmpty(carryOverDates.keySet()) && includeAllAccrualCategories) { 144 Criteria crit = new Criteria(); 145 crit.addNotIn("accrualCategory", carryOverDates.keySet()); 146 orCriteria.addOrCriteria(crit); 147 } 148 root.addAndCriteria(orCriteria); 149 } 150 151 152 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 153 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 154 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 155 if (c != null) { 156 leaveBlocks.addAll(c); 157 } 158 159 return leaveBlocks; 160 } 161 162 public Map<String, LeaveBlock> getLastCarryOverBlocks(String principalId, String leaveBlockType, Date asOfDate) { 163 Map<String, LeaveBlock> carryOver = new HashMap<String, LeaveBlock>(); 164 Criteria root = new Criteria(); 165 root.addEqualTo("principalId", principalId); 166 root.addEqualTo("leaveBlockType", leaveBlockType); 167 168 Criteria dateSubquery = new Criteria(); 169 dateSubquery.addEqualToField("principalId", Criteria.PARENT_QUERY_PREFIX + "principalId"); 170 dateSubquery.addEqualToField("leaveBlockType", Criteria.PARENT_QUERY_PREFIX + "leaveBlockType"); 171 dateSubquery.addEqualToField("accrualCategory", Criteria.PARENT_QUERY_PREFIX + "accrualCategory"); 172 if (asOfDate != null) { 173 dateSubquery.addLessThan("leaveDate", asOfDate); 174 } 175 176 ReportQueryByCriteria subQuery = QueryFactory.newReportQuery(LeaveBlock.class, dateSubquery); 177 String[] attributes = new String[] { "max(leaveDate)" }; 178 subQuery.setAttributes(attributes); 179 180 root.addEqualTo("leaveDate", subQuery); 181 182 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 183 Collection<LeaveBlock> c = (Collection<LeaveBlock>)this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 184 //Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 185 for (LeaveBlock lb : c) { 186 carryOver.put(lb.getAccrualCategory(), lb); 187 } 188 189 return carryOver; 190 191 } 192 193 @Override 194 public List<LeaveBlock> getLeaveBlocks(String principalId, String leaveBlockType, String requestStatus, Date currentDate) { 195 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 196 Criteria root = new Criteria(); 197 root.addEqualTo("principalId", principalId); 198 root.addEqualTo("leaveBlockType", leaveBlockType); 199 root.addEqualTo("requestStatus", requestStatus); 200 if(currentDate != null) { 201 root.addGreaterThan("leaveDate", currentDate); 202 } 203 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 204 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 205 if(c!= null) { 206 leaveBlocks.addAll(c); 207 } 208 return leaveBlocks; 209 } 210 211 @Override 212 public List<LeaveBlock> getLeaveBlocksForDate(String principalId, Date leaveDate) { 213 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 214 Criteria root = new Criteria(); 215 root.addEqualTo("principalId", principalId); 216 root.addEqualTo("leaveDate", leaveDate); 217 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 218 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 219 if(c!= null) { 220 leaveBlocks.addAll(c); 221 } 222 return leaveBlocks; 223 } 224 225 @Override 226 public List<LeaveBlock> getLeaveBlocks(Date leaveDate, String accrualCategory, String principalId) { 227 Criteria root = new Criteria(); 228 root.addLessOrEqualThan("timestamp", leaveDate); 229 root.addEqualTo("accrualCategory", accrualCategory); 230 root.addEqualTo("principalId", principalId); 231 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 232 List<LeaveBlock> leaveBlocks = (List<LeaveBlock>) this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 233 return leaveBlocks; 234 } 235 236 @Override 237 public List<LeaveBlock> getLeaveBlocks(String principalId, String accrualCategory, Date beginDate, Date endDate) { 238 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 239 Criteria root = new Criteria(); 240 root.addEqualTo("principalId", principalId); 241 root.addGreaterOrEqualThan("leaveDate", beginDate); 242 root.addLessOrEqualThan("leaveDate", endDate); 243 root.addEqualTo("accrualCategory", accrualCategory); 244 // root.addEqualTo("active", true); 245 246 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 247 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 248 249 if (c != null) { 250 leaveBlocks.addAll(c); 251 } 252 253 return leaveBlocks; 254 } 255 256 @Override 257 public List<LeaveBlock> getFMLALeaveBlocks(String principalId, String accrualCategory, Date beginDate, Date endDate) { 258 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 259 Criteria root = new Criteria(); 260 root.addEqualTo("principalId", principalId); 261 root.addGreaterOrEqualThan("leaveDate", beginDate); 262 root.addLessOrEqualThan("leaveDate", endDate); 263 root.addEqualTo("accrualCategory", accrualCategory); 264 265 Criteria earnCode = new Criteria(); 266 earnCode.addEqualToField("earnCode", Criteria.PARENT_QUERY_PREFIX + "earnCode"); 267 earnCode.addEqualTo("fmla", "Y"); 268 ReportQueryByCriteria earnCodeSubQuery = QueryFactory.newReportQuery(EarnCode.class, earnCode); 269 root.addEqualTo("earnCode", earnCodeSubQuery); 270 271 //root.add 272 // root.addEqualTo("active", true); 273 274 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 275 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 276 277 if (c != null) { 278 leaveBlocks.addAll(c); 279 } 280 281 return leaveBlocks; 282 } 283 284 @Override 285 public List<LeaveBlock> getNotAccrualGeneratedLeaveBlocksForDate(String principalId, Date leaveDate) { 286 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 287 Criteria root = new Criteria(); 288 root.addEqualTo("principalId", principalId); 289 root.addEqualTo("leaveDate", leaveDate); 290 root.addEqualTo("accrualGenerated", "N"); 291 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 292 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 293 if(c!= null) { 294 leaveBlocks.addAll(c); 295 } 296 return leaveBlocks; 297 } 298 299 public List<LeaveBlock> getCalendarLeaveBlocks(String principalId, Date beginDate, Date endDate) { 300 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 301 302 Criteria root = new Criteria(); 303 root.addEqualTo("principalId", principalId); 304 root.addGreaterOrEqualThan("leaveDate", beginDate); 305 root.addLessOrEqualThan("leaveDate", endDate); 306 List<String> typeValues = new ArrayList<String>(); 307 typeValues.add(LMConstants.LEAVE_BLOCK_TYPE.LEAVE_CALENDAR); 308 typeValues.add(LMConstants.LEAVE_BLOCK_TYPE.TIME_CALENDAR); 309 typeValues.add(LMConstants.LEAVE_BLOCK_TYPE.ACCRUAL_SERVICE); 310 root.addIn("leaveBlockType", typeValues); 311 312 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 313 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 314 315 if (c != null) { 316 leaveBlocks.addAll(c); 317 } 318 return leaveBlocks; 319 320 } 321 322 public void deleteLeaveBlock(String leaveBlockId) { 323 Criteria crit = new Criteria(); 324 crit.addEqualTo("lmLeaveBlockId",leaveBlockId); 325 this.getPersistenceBrokerTemplate().deleteByQuery(QueryFactory.newQuery(LeaveBlock.class, crit)); 326 } 327 328 public void deleteLeaveBlocksForDocumentId(String documentId){ 329 Criteria crit = new Criteria(); 330 crit.addEqualTo("documentId",documentId); 331 this.getPersistenceBrokerTemplate().deleteByQuery(QueryFactory.newQuery(LeaveBlock.class, crit)); 332 333 } 334 335 336 @Override 337 public List<LeaveBlock> getAccrualGeneratedLeaveBlocks(String principalId, Date beginDate, Date endDate) { 338 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 339 Criteria root = new Criteria(); 340 341 root.addEqualTo("principalId", principalId); 342 root.addGreaterOrEqualThan("leaveDate", beginDate); 343 root.addLessOrEqualThan("leaveDate", endDate); 344 root.addEqualTo("accrualGenerated", "Y"); 345 346 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 347 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 348 if (c != null) { 349 leaveBlocks.addAll(c); 350 } 351 return leaveBlocks; 352 } 353 354 @Override 355 public List<LeaveBlock> getSSTOLeaveBlocks(String principalId, String sstoId, Date accruledDate) { 356 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 357 Criteria root = new Criteria(); 358 359 root.addEqualTo("principalId", principalId); 360 root.addEqualTo("leaveDate", accruledDate); 361 root.addEqualTo("scheduleTimeOffId", sstoId); 362 363 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 364 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 365 if (c != null) { 366 leaveBlocks.addAll(c); 367 } 368 return leaveBlocks; 369 } 370 371 @Override 372 public List<LeaveBlock> getABELeaveBlocksSinceTime(String principalId, Timestamp lastRanTime) { 373 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>(); 374 Criteria root = new Criteria(); 375 376 root.addEqualTo("principalId", principalId); 377 root.addGreaterThan("timestamp", lastRanTime); 378 Query query = QueryFactory.newQuery(LeaveBlock.class, root); 379 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 380 List<LeaveBlock> tempList = new ArrayList<LeaveBlock>(); 381 if (c != null) { 382 tempList.addAll(c); 383 } 384 for(LeaveBlock lb : tempList) { 385 if(lb != null && StringUtils.isNotEmpty(lb.getEarnCode())) { 386 EarnCode ec = TkServiceLocator.getEarnCodeService().getEarnCode(lb.getEarnCode(), lb.getLeaveDate()); 387 if(ec != null && ec.getEligibleForAccrual().equals("N")) { 388 leaveBlocks.add(lb); 389 } 390 } 391 } 392 return leaveBlocks; 393 } 394 395 }