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.time.earncode.dao; 017 018 import java.sql.Date; 019 import java.util.ArrayList; 020 import java.util.List; 021 022 import org.apache.commons.lang.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.kuali.hr.time.earncode.EarnCode; 029 import org.kuali.hr.time.util.TKUtils; 030 import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb; 031 032 public class EarnCodeDaoSpringOjbImpl extends PlatformAwareDaoBaseOjb implements EarnCodeDao { 033 034 @SuppressWarnings("unused") 035 private static final Logger LOG = Logger.getLogger(EarnCodeDaoSpringOjbImpl.class); 036 037 public void saveOrUpdate(EarnCode earnCode) { 038 this.getPersistenceBrokerTemplate().store(earnCode); 039 } 040 041 public void saveOrUpdate(List<EarnCode> earnCodeList) { 042 if (earnCodeList != null) { 043 for (EarnCode earnCode : earnCodeList) { 044 this.getPersistenceBrokerTemplate().store(earnCode); 045 } 046 } 047 } 048 049 public EarnCode getEarnCodeById(String earnCodeId) { 050 Criteria crit = new Criteria(); 051 crit.addEqualTo("hrEarnCodeId", earnCodeId); 052 return (EarnCode) this.getPersistenceBrokerTemplate().getObjectByQuery(QueryFactory.newQuery(EarnCode.class, crit)); 053 } 054 055 @Override 056 public EarnCode getEarnCode(String earnCode, Date asOfDate) { 057 EarnCode ec = null; 058 059 Criteria root = new Criteria(); 060 Criteria effdt = new Criteria(); 061 Criteria timestamp = new Criteria(); 062 063 // OJB's awesome sub query setup part 1 064 effdt.addEqualToField("earnCode", Criteria.PARENT_QUERY_PREFIX + "earnCode"); 065 effdt.addLessOrEqualThan("effectiveDate", asOfDate); 066 // effdt.addEqualTo("active", true); 067 ReportQueryByCriteria effdtSubQuery = QueryFactory.newReportQuery(EarnCode.class, effdt); 068 effdtSubQuery.setAttributes(new String[] { "max(effdt)" }); 069 070 // OJB's awesome sub query setup part 2 071 timestamp.addEqualToField("earnCode", Criteria.PARENT_QUERY_PREFIX + "earnCode"); 072 timestamp.addEqualToField("effectiveDate", Criteria.PARENT_QUERY_PREFIX + "effectiveDate"); 073 // timestamp.addEqualTo("active", true); 074 ReportQueryByCriteria timestampSubQuery = QueryFactory.newReportQuery(EarnCode.class, timestamp); 075 timestampSubQuery.setAttributes(new String[] { "max(timestamp)" }); 076 077 root.addEqualTo("earnCode", earnCode); 078 root.addEqualTo("effectiveDate", effdtSubQuery); 079 root.addEqualTo("timestamp", timestampSubQuery); 080 // root.addEqualTo("active", true); 081 082 Criteria activeFilter = new Criteria(); // Inner Join For Activity 083 activeFilter.addEqualTo("active", true); 084 root.addAndCriteria(activeFilter); 085 086 087 Query query = QueryFactory.newQuery(EarnCode.class, root); 088 Object obj = this.getPersistenceBrokerTemplate().getObjectByQuery(query); 089 090 if (obj != null) { 091 ec = (EarnCode) obj; 092 } 093 094 return ec; 095 } 096 097 @Override 098 public List<EarnCode> getOvertimeEarnCodes(Date asOfDate) { 099 Criteria root = new Criteria(); 100 Criteria effdt = new Criteria(); 101 Criteria timestamp = new Criteria(); 102 103 // OJB's awesome sub query setup part 1 104 effdt.addEqualToField("earnCode", Criteria.PARENT_QUERY_PREFIX + "earnCode"); 105 effdt.addLessOrEqualThan("effectiveDate", asOfDate); 106 // effdt.addEqualTo("active", true); 107 ReportQueryByCriteria effdtSubQuery = QueryFactory.newReportQuery(EarnCode.class, effdt); 108 effdtSubQuery.setAttributes(new String[] { "max(effdt)" }); 109 110 // OJB's awesome sub query setup part 2 111 timestamp.addEqualToField("earnCode", Criteria.PARENT_QUERY_PREFIX + "earnCode"); 112 timestamp.addEqualToField("effectiveDate", Criteria.PARENT_QUERY_PREFIX + "effectiveDate"); 113 // timestamp.addEqualTo("active", true); 114 ReportQueryByCriteria timestampSubQuery = QueryFactory.newReportQuery(EarnCode.class, timestamp); 115 timestampSubQuery.setAttributes(new String[] { "max(timestamp)" }); 116 117 root.addEqualTo("ovtEarnCode", "Y"); 118 root.addEqualTo("effectiveDate", effdtSubQuery); 119 root.addEqualTo("timestamp", timestampSubQuery); 120 // root.addEqualTo("active", true); 121 122 Criteria activeFilter = new Criteria(); // Inner Join For Activity 123 activeFilter.addEqualTo("active", true); 124 root.addAndCriteria(activeFilter); 125 126 127 Query query = QueryFactory.newQuery(EarnCode.class, root); 128 List<EarnCode> ovtEarnCodes = (List<EarnCode>)this.getPersistenceBrokerTemplate().getCollectionByQuery(query); 129 return ovtEarnCodes; 130 } 131 132 @Override 133 public int getEarnCodeCount(String earnCode) { 134 Criteria crit = new Criteria(); 135 crit.addEqualTo("earnCode", earnCode); 136 Query query = QueryFactory.newQuery(EarnCode.class, crit); 137 return this.getPersistenceBrokerTemplate().getCount(query); 138 } 139 140 @Override 141 public int getNewerEarnCodeCount(String earnCode, Date effdt) { 142 Criteria crit = new Criteria(); 143 crit.addEqualTo("earnCode", earnCode); 144 crit.addEqualTo("active", "Y"); 145 crit.addGreaterThan("effectiveDate", effdt); 146 Query query = QueryFactory.newQuery(EarnCode.class, crit); 147 return this.getPersistenceBrokerTemplate().getCount(query); 148 } 149 150 @Override 151 @SuppressWarnings("unchecked") 152 public List<EarnCode> getEarnCodes(String earnCode, String ovtEarnCode, String descr, Date fromEffdt, Date toEffdt, String active, String showHistory) { 153 List<EarnCode> results = new ArrayList<EarnCode>(); 154 155 Criteria root = new Criteria(); 156 157 if (StringUtils.isNotBlank(earnCode)) { 158 root.addLike("earnCode", earnCode); 159 } 160 161 if (StringUtils.isNotBlank(ovtEarnCode)) { 162 root.addEqualTo("ovtEarnCode", ovtEarnCode); 163 } 164 165 if (StringUtils.isNotBlank(descr)) { 166 root.addLike("description", descr); 167 } 168 169 Criteria effectiveDateFilter = new Criteria(); 170 if (fromEffdt != null) { 171 effectiveDateFilter.addGreaterOrEqualThan("effectiveDate", fromEffdt); 172 } 173 if (toEffdt != null) { 174 effectiveDateFilter.addLessOrEqualThan("effectiveDate", toEffdt); 175 } 176 if (fromEffdt == null && toEffdt == null) { 177 effectiveDateFilter.addLessOrEqualThan("effectiveDate", TKUtils.getCurrentDate()); 178 } 179 root.addAndCriteria(effectiveDateFilter); 180 181 if (StringUtils.isNotBlank(active)) { 182 Criteria activeFilter = new Criteria(); 183 if (StringUtils.equals(active, "Y")) { 184 activeFilter.addEqualTo("active", true); 185 } else if (StringUtils.equals(active, "N")) { 186 activeFilter.addEqualTo("active", false); 187 } 188 root.addAndCriteria(activeFilter); 189 } 190 191 if (StringUtils.equals(showHistory, "N")) { 192 Criteria effdt = new Criteria(); 193 effdt.addEqualToField("earnCode", Criteria.PARENT_QUERY_PREFIX + "earnCode"); 194 effdt.addAndCriteria(effectiveDateFilter); 195 ReportQueryByCriteria effdtSubQuery = QueryFactory.newReportQuery(EarnCode.class, effdt); 196 effdtSubQuery.setAttributes(new String[]{"max(effectiveDate)"}); 197 root.addEqualTo("effectiveDate", effdtSubQuery); 198 199 Criteria timestamp = new Criteria(); 200 timestamp.addEqualToField("earnCode", Criteria.PARENT_QUERY_PREFIX + "earnCode"); 201 timestamp.addAndCriteria(effectiveDateFilter); 202 ReportQueryByCriteria timestampSubQuery = QueryFactory.newReportQuery(EarnCode.class, timestamp); 203 timestampSubQuery.setAttributes(new String[]{"max(timestamp)"}); 204 root.addEqualTo("timestamp", timestampSubQuery); 205 } 206 207 Query query = QueryFactory.newQuery(EarnCode.class, root); 208 results.addAll(getPersistenceBrokerTemplate().getCollectionByQuery(query)); 209 210 return results; 211 } 212 213 }