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.leaveplan.dao;
017
018 import java.sql.Date;
019 import java.util.ArrayList;
020 import java.util.Collection;
021 import java.util.LinkedList;
022 import java.util.List;
023
024 import com.google.common.collect.ImmutableList;
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.joda.time.DateTime;
031 import org.kuali.hr.core.util.OjbSubQueryUtil;
032 import org.kuali.hr.lm.leaveplan.LeavePlan;
033 import org.kuali.hr.time.calendar.CalendarEntries;
034 import org.kuali.hr.time.util.TKUtils;
035 import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb;
036
037 public class LeavePlanDaoSpringOjbImpl extends PlatformAwareDaoBaseOjb implements LeavePlanDao {
038 private static final ImmutableList<String> EQUAL_TO_FIELDS = new ImmutableList.Builder<String>()
039 .add("leavePlan")
040 .build();
041
042 @Override
043 public LeavePlan getLeavePlan(String lmLeavePlanId) {
044 Criteria crit = new Criteria();
045 crit.addEqualTo("lmLeavePlanId", lmLeavePlanId);
046 Query query = QueryFactory.newQuery(LeavePlan.class, crit);
047 return (LeavePlan) this.getPersistenceBrokerTemplate().getObjectByQuery(query);
048 }
049
050 @Override
051 public LeavePlan getLeavePlan(String leavePlan, Date asOfDate) {
052 LeavePlan lp = null;
053
054 Criteria root = new Criteria();
055
056 java.sql.Date effDate = asOfDate == null ? null : new java.sql.Date(asOfDate.getTime());
057 root.addEqualTo("leavePlan", leavePlan);
058 root.addEqualTo("effectiveDate", OjbSubQueryUtil.getEffectiveDateSubQuery(LeavePlan.class, effDate, EQUAL_TO_FIELDS, false));
059 root.addEqualTo("timestamp", OjbSubQueryUtil.getTimestampSubQuery(LeavePlan.class, EQUAL_TO_FIELDS, false));
060
061 Criteria activeFilter = new Criteria(); // Inner Join For Activity
062 activeFilter.addEqualTo("active", true);
063 root.addAndCriteria(activeFilter);
064
065
066 Query query = QueryFactory.newQuery(LeavePlan.class, root);
067 Object obj = this.getPersistenceBrokerTemplate().getObjectByQuery(query);
068
069 if (obj != null) {
070 lp = (LeavePlan) obj;
071 }
072
073 return lp;
074 }
075
076 @Override
077 public int getNumberLeavePlan(String leavePlan) {
078 Criteria crit = new Criteria();
079 crit.addEqualTo("leavePlan", leavePlan);
080 Query query = QueryFactory.newQuery(LeavePlan.class, crit);
081 return this.getPersistenceBrokerTemplate().getCount(query);
082 }
083
084 @Override
085 public List<LeavePlan> getAllActiveLeavePlan(String leavePlan, Date asOfDate) {
086 Criteria root = new Criteria();
087 root.addEqualTo("leavePlan", leavePlan);
088 root.addEqualTo("active", true);
089 root.addLessOrEqualThan("effectiveDate", asOfDate);
090
091 Query query = QueryFactory.newQuery(LeavePlan.class, root);
092 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query);
093
094 List<LeavePlan> lps = new LinkedList<LeavePlan>();
095 if (c != null) {
096 lps.addAll(c);
097 }
098 return lps;
099
100 }
101
102 @Override
103 public List<LeavePlan> getAllInActiveLeavePlan(String leavePlan, Date asOfDate) {
104 Criteria root = new Criteria();
105 root.addEqualTo("leavePlan", leavePlan);
106 root.addEqualTo("active", false);
107 root.addLessOrEqualThan("effectiveDate", asOfDate);
108
109 Query query = QueryFactory.newQuery(LeavePlan.class, root);
110 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query);
111
112 List<LeavePlan> lps = new LinkedList<LeavePlan>();
113 if (c != null) {
114 lps.addAll(c);
115 }
116 return lps;
117 }
118
119 @Override
120 @SuppressWarnings("unchecked")
121 public List<LeavePlan> getLeavePlans(String leavePlan, String calendarYearStart, String descr, String planningMonths, Date fromEffdt, Date toEffdt,
122 String active, String showHistory) {
123
124 List<LeavePlan> results = new ArrayList<LeavePlan>();
125
126 Criteria root = new Criteria();
127
128 if (StringUtils.isNotBlank(leavePlan)) {
129 root.addLike("leavePlan", leavePlan);
130 }
131
132 if (StringUtils.isNotBlank(calendarYearStart)) {
133 root.addEqualTo("calendarYearStart", calendarYearStart);
134 }
135
136 if (StringUtils.isNotBlank(descr)) {
137 root.addLike("descr", descr);
138 }
139
140 if (StringUtils.isNotBlank(planningMonths)) {
141 root.addEqualTo("planningMonths", planningMonths);
142 }
143
144 Criteria effectiveDateFilter = new Criteria();
145 if (fromEffdt != null) {
146 effectiveDateFilter.addGreaterOrEqualThan("effectiveDate", fromEffdt);
147 }
148 if (toEffdt != null) {
149 effectiveDateFilter.addLessOrEqualThan("effectiveDate", toEffdt);
150 }
151 if (fromEffdt == null && toEffdt == null) {
152 effectiveDateFilter.addLessOrEqualThan("effectiveDate", TKUtils.getCurrentDate());
153 }
154 root.addAndCriteria(effectiveDateFilter);
155
156 if (StringUtils.isNotBlank(active)) {
157 Criteria activeFilter = new Criteria();
158 if (StringUtils.equals(active, "Y")) {
159 activeFilter.addEqualTo("active", true);
160 } else if (StringUtils.equals(active, "N")) {
161 activeFilter.addEqualTo("active", false);
162 }
163 root.addAndCriteria(activeFilter);
164 }
165
166 if (StringUtils.equals(showHistory, "N")) {
167 root.addEqualTo("effectiveDate", OjbSubQueryUtil.getEffectiveDateSubQueryWithFilter(LeavePlan.class, effectiveDateFilter, EQUAL_TO_FIELDS, false));
168 root.addEqualTo("timestamp", OjbSubQueryUtil.getTimestampSubQuery(LeavePlan.class, EQUAL_TO_FIELDS, false));
169 }
170
171 Query query = QueryFactory.newQuery(LeavePlan.class, root);
172 results.addAll(getPersistenceBrokerTemplate().getCollectionByQuery(query));
173
174 return results;
175 }
176
177 @Override
178 public List<LeavePlan> getLeavePlansNeedsScheduled(int thresholdDays,
179 Date asOfDate) {
180
181 Criteria root = new Criteria();
182
183 root.addEqualTo("active", true);
184
185 Query query = QueryFactory.newQuery(LeavePlan.class, root);
186 Collection c = this.getPersistenceBrokerTemplate().getCollectionByQuery(query);
187
188 List<LeavePlan> leavePlans = new ArrayList<LeavePlan>(c.size());
189 leavePlans.addAll(c);
190
191 return leavePlans;
192 }
193
194 }