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.earncodegroup.dao;
017    
018    import java.sql.Date;
019    
020    import com.google.common.collect.ImmutableList;
021    import org.apache.ojb.broker.query.Criteria;
022    import org.apache.ojb.broker.query.Query;
023    import org.apache.ojb.broker.query.QueryFactory;
024    import org.apache.ojb.broker.query.ReportQueryByCriteria;
025    import org.kuali.hr.core.util.OjbSubQueryUtil;
026    import org.kuali.hr.time.earncode.EarnCode;
027    import org.kuali.hr.time.earncodegroup.EarnCodeGroup;
028    import org.kuali.hr.time.earncodegroup.EarnCodeGroupDefinition;
029    import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb;
030    
031    public class EarnCodeGroupDaoServiceImpl extends PlatformAwareDaoBaseOjb implements EarnCodeGroupDaoService {
032        private static final ImmutableList<String> EQUAL_TO_FIELDS = new ImmutableList.Builder<String>()
033                .add("earnCodeGroup")
034                .build();
035    
036            @Override
037            public EarnCodeGroup getEarnCodeGroup(String earnGroup, Date asOfDate) {
038                    Criteria root = new Criteria();
039    
040                    root.addEqualTo("earnCodeGroup", earnGroup);
041            root.addEqualTo("effectiveDate", OjbSubQueryUtil.getEffectiveDateSubQuery(EarnCodeGroup.class, asOfDate, EQUAL_TO_FIELDS, false));
042            root.addEqualTo("timestamp", OjbSubQueryUtil.getTimestampSubQuery(EarnCodeGroup.class, EQUAL_TO_FIELDS, false));
043    //              root.addEqualTo("active", true);
044                    //do not include the summary setup earn groups
045    
046                    Criteria activeFilter = new Criteria(); // Inner Join For Activity
047                    activeFilter.addEqualTo("active", true);
048                    root.addAndCriteria(activeFilter);
049                                    
050                    Query query = QueryFactory.newQuery(EarnCodeGroup.class, root);
051                    EarnCodeGroup earnGroupObj  = (EarnCodeGroup)this.getPersistenceBrokerTemplate().getObjectByQuery(query);
052                    return earnGroupObj;
053            }
054    
055            @Override
056            public EarnCodeGroup getEarnCodeGroupSummaryForEarnCode(String earnCode, Date asOfDate) {
057                    Criteria root = new Criteria();
058                    Criteria earnCodeJoin = new Criteria();
059                    
060                    earnCodeJoin.addEqualToField("hrEarnCodeGroupId", Criteria.PARENT_QUERY_PREFIX + "hrEarnCodeGroupId");
061                    earnCodeJoin.addEqualTo("earnCode", earnCode);
062                    ReportQueryByCriteria earnCodeSubQuery = QueryFactory.newReportQuery(EarnCodeGroupDefinition.class, earnCodeJoin);
063                    earnCodeSubQuery.setAttributes(new String[]{"hr_earn_code_group_id"});
064                    
065                    root.addEqualTo("hrEarnCodeGroupId",earnCodeSubQuery);
066            root.addEqualTo("effectiveDate", OjbSubQueryUtil.getEffectiveDateSubQuery(EarnCodeGroup.class, asOfDate, EQUAL_TO_FIELDS, false));
067            root.addEqualTo("timestamp", OjbSubQueryUtil.getTimestampSubQuery(EarnCodeGroup.class, EQUAL_TO_FIELDS, false));
068    //              root.addEqualTo("active", true);
069                    root.addEqualTo("showSummary", true);
070                    
071                    Criteria activeFilter = new Criteria(); // Inner Join For Activity
072                    activeFilter.addEqualTo("active", true);
073                    root.addAndCriteria(activeFilter);
074    
075                    Query query = QueryFactory.newQuery(EarnCodeGroup.class, root);
076                    EarnCodeGroup earnGroupObj  = (EarnCodeGroup)this.getPersistenceBrokerTemplate().getObjectByQuery(query);
077                    return earnGroupObj;
078            }
079    
080            @Override
081            public EarnCodeGroup getEarnCodeGroupForEarnCode(String earnCode, Date asOfDate) {
082                    Criteria root = new Criteria();
083                    Criteria earnCodeJoin = new Criteria();
084    
085                    earnCodeJoin.addEqualToField("hrEarnCodeGroupId", Criteria.PARENT_QUERY_PREFIX + "hrEarnCodeGroupId");
086                    earnCodeJoin.addEqualTo("earnCode", earnCode);
087                    ReportQueryByCriteria earnCodeSubQuery = QueryFactory.newReportQuery(EarnCodeGroupDefinition.class, earnCodeJoin);
088                    earnCodeSubQuery.setAttributes(new String[]{"hr_earn_code_group_id"});
089                    
090                    root.addEqualTo("hrEarnCodeGroupId",earnCodeSubQuery);
091            root.addEqualTo("effectiveDate", OjbSubQueryUtil.getEffectiveDateSubQuery(EarnCodeGroup.class, asOfDate, EQUAL_TO_FIELDS, false));
092            root.addEqualTo("timestamp", OjbSubQueryUtil.getTimestampSubQuery(EarnCodeGroup.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                    Query query = QueryFactory.newQuery(EarnCodeGroup.class, root);
100                    EarnCodeGroup earnGroupObj  = (EarnCodeGroup)this.getPersistenceBrokerTemplate().getObjectByQuery(query);
101                    return earnGroupObj;
102            }
103    
104            @Override
105            public EarnCodeGroup getEarnCodeGroup(String hrEarnCodeGroupId) {
106                    Criteria crit = new Criteria();
107                    crit.addEqualTo("hrEarnCodeGroupId", hrEarnCodeGroupId);
108                    
109                    Query query = QueryFactory.newQuery(EarnCodeGroup.class, crit);
110                    return (EarnCodeGroup)this.getPersistenceBrokerTemplate().getObjectByQuery(query);
111            }
112            
113            @Override
114            public int getEarnCodeGroupCount(String earnCodeGroup) {
115                    Criteria crit = new Criteria();
116                crit.addEqualTo("earnCodeGroup", earnCodeGroup);
117                Query query = QueryFactory.newQuery(EarnCodeGroup.class, crit);
118                return this.getPersistenceBrokerTemplate().getCount(query);
119            }
120            @Override
121            public int getNewerEarnCodeGroupCount(String earnCodeGroup, Date effdt) {
122                    Criteria crit = new Criteria();
123                    crit.addEqualTo("earnCodeGroup", earnCodeGroup);
124                    crit.addEqualTo("active", "Y");
125                    crit.addGreaterThan("effectiveDate", effdt);
126                    Query query = QueryFactory.newQuery(EarnCodeGroup.class, crit);
127            return this.getPersistenceBrokerTemplate().getCount(query);
128            }
129    }