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