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.employeeoverride.dao;
017
018 import java.sql.Date;
019 import java.util.ArrayList;
020 import java.util.Collection;
021 import java.util.List;
022
023 import com.google.common.collect.ImmutableList;
024 import edu.emory.mathcs.backport.java.util.Collections;
025 import org.apache.commons.lang.StringUtils;
026 import org.apache.ojb.broker.query.Criteria;
027 import org.apache.ojb.broker.query.Query;
028 import org.apache.ojb.broker.query.QueryFactory;
029 import org.apache.ojb.broker.query.ReportQueryByCriteria;
030 import org.kuali.hr.core.util.OjbSubQueryUtil;
031 import org.kuali.hr.lm.employeeoverride.EmployeeOverride;
032 import org.kuali.hr.time.util.TKUtils;
033 import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb;
034
035 public class EmployeeOverrideDaoSpringOjbImpl extends PlatformAwareDaoBaseOjb implements EmployeeOverrideDao{
036 private static final ImmutableList<String> EQUAL_TO_FIELDS = new ImmutableList.Builder<String>()
037 .add("principalId")
038 .add("leavePlan")
039 .add("accrualCategory")
040 .add("overrideType")
041 .build();
042
043 @SuppressWarnings("unchecked")
044 @Override
045 public List<EmployeeOverride> getEmployeeOverrides(String principalId, Date asOfDate) {
046 List<EmployeeOverride> employeeOverrides = new ArrayList<EmployeeOverride>();
047 Criteria root = new Criteria();
048
049 root.addEqualTo("principalId", principalId);
050 root.addEqualTo("effectiveDate", OjbSubQueryUtil.getEffectiveDateSubQuery(EmployeeOverride.class, asOfDate, EQUAL_TO_FIELDS, false));
051 root.addEqualTo("timestamp", OjbSubQueryUtil.getTimestampSubQuery(EmployeeOverride.class, EQUAL_TO_FIELDS, false));
052
053 Criteria activeFilter = new Criteria(); // Inner Join For Activity
054 activeFilter.addEqualTo("active", true);
055 root.addAndCriteria(activeFilter);
056
057 Query query = QueryFactory.newQuery(EmployeeOverride.class, root);
058 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query);
059
060 if (c != null) {
061 employeeOverrides.addAll(c);
062 }
063 return employeeOverrides;
064 }
065
066 @Override
067 public EmployeeOverride getEmployeeOverride(String principalId, String leavePlan, String accrualCategory, String overrideType, Date asOfDate) {
068 Criteria root = new Criteria();
069
070 root.addEqualTo("principalId", principalId);
071 root.addEqualTo("leavePlan", leavePlan);
072 root.addEqualTo("accrualCategory", accrualCategory);
073 root.addEqualTo("overrideType", overrideType);
074
075 root.addEqualTo("effectiveDate", OjbSubQueryUtil.getEffectiveDateSubQuery(EmployeeOverride.class, asOfDate, EQUAL_TO_FIELDS, false));
076 root.addEqualTo("timestamp", OjbSubQueryUtil.getTimestampSubQuery(EmployeeOverride.class, EQUAL_TO_FIELDS, false));
077
078 Criteria activeFilter = new Criteria();
079 activeFilter.addEqualTo("active", true);
080 root.addAndCriteria(activeFilter);
081
082 Query query = QueryFactory.newQuery(EmployeeOverride.class, root);
083 return (EmployeeOverride) getPersistenceBrokerTemplate().getObjectByQuery(query);
084 }
085
086 @Override
087 public EmployeeOverride getEmployeeOverride(String lmEmployeeOverrideId) {
088 Criteria crit = new Criteria();
089 crit.addEqualTo("lmEmployeeOverrideId", lmEmployeeOverrideId);
090 Query query = QueryFactory.newQuery(EmployeeOverride.class, crit);
091 return (EmployeeOverride) this.getPersistenceBrokerTemplate().getObjectByQuery(query);
092 }
093
094 @Override
095 @SuppressWarnings("unchecked")
096 public List<EmployeeOverride> getEmployeeOverrides(String principalId, String leavePlan, String accrualCategory, String overrideType,
097 Date fromEffdt, Date toEffdt, String active) {
098
099 List<EmployeeOverride> results = new ArrayList<EmployeeOverride>();
100
101 Criteria root = new Criteria();
102
103 if (StringUtils.isNotBlank(principalId)) {
104 root.addEqualTo("principalId",principalId);
105 }
106
107 if (StringUtils.isNotBlank(leavePlan)) {
108 root.addEqualTo("leavePlan",leavePlan);
109 }
110
111 if (StringUtils.isNotBlank(accrualCategory)) {
112 root.addEqualTo("accrualCategory",accrualCategory);
113 }
114
115 if (StringUtils.isNotBlank(overrideType)) {
116 root.addEqualTo("overrideType",overrideType);
117 }
118
119 Criteria effectiveDateFilter = new Criteria();
120 if (fromEffdt != null) {
121 effectiveDateFilter.addGreaterOrEqualThan("effectiveDate", fromEffdt);
122 }
123 if (toEffdt != null) {
124 effectiveDateFilter.addLessOrEqualThan("effectiveDate", toEffdt);
125 }
126 if (fromEffdt == null && toEffdt == null) {
127 effectiveDateFilter.addLessOrEqualThan("effectiveDate", TKUtils.getCurrentDate());
128 }
129 root.addAndCriteria(effectiveDateFilter);
130
131 if (StringUtils.isNotBlank(active)) {
132 Criteria activeFilter = new Criteria();
133 if (StringUtils.equals(active, "Y")) {
134 activeFilter.addEqualTo("active", true);
135 } else if (StringUtils.equals(active, "N")) {
136 activeFilter.addEqualTo("active", false);
137 }
138 root.addAndCriteria(activeFilter);
139 }
140
141 root.addEqualTo("effectiveDate", OjbSubQueryUtil.getEffectiveDateSubQueryWithFilter(EmployeeOverride.class, effectiveDateFilter, EQUAL_TO_FIELDS, false));
142 root.addEqualTo("timestamp", OjbSubQueryUtil.getTimestampSubQuery(EmployeeOverride.class, EQUAL_TO_FIELDS, false));
143
144 Query query = QueryFactory.newQuery(EmployeeOverride.class, root);
145 results.addAll(getPersistenceBrokerTemplate().getCollectionByQuery(query));
146
147 return results;
148 }
149
150 }