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.service;
017    
018    import org.kuali.hr.time.assignment.Assignment;
019    import org.kuali.hr.time.earncode.EarnCode;
020    import org.springframework.cache.annotation.Cacheable;
021    
022    import java.math.BigDecimal;
023    import java.sql.Date;
024    import java.util.List;
025    import java.util.Map;
026    
027    public interface EarnCodeService {
028        /**
029         * Fetch a list of earn codes for Leave usage and Time usage, for a particular assignment as of a particular date
030         * @param a
031         * @param asOfDate
032         * @param isLeavePlanningCalendar
033         * @return
034         */
035        @Cacheable(value=EarnCode.CACHE_NAME, key="'{getEarnCodesForLeaveAndTime}' + 'principalId=' + T(org.kuali.hr.time.util.TKContext).getPrincipalId() + '|' + 'targetId=' + T(org.kuali.hr.time.util.TKContext).getTargetPrincipalId() + '|' + 'a=' + #p0.getTkAssignmentId() + '|' + 'asOfDate=' + #p1 + '|' + 'isLeavePlanningCalendar=' +#p2")
036        public List<EarnCode> getEarnCodesForLeaveAndTime(Assignment a, Date asOfDate, boolean isLeavePlanningCalendar);
037    
038        /**
039         * Fetch a list of earn codes for Time usage, for a particular assignment as of a particular date
040         * @param a
041         * @param asOfDate
042         * @return
043         */
044        @Cacheable(value=EarnCode.CACHE_NAME, key="'{getEarnCodesForTime}' + 'principalId=' + T(org.kuali.hr.time.util.TKContext).getPrincipalId() + '|' + 'targetId=' + T(org.kuali.hr.time.util.TKContext).getTargetPrincipalId() + '|' + 'a=' + #p0.getTkAssignmentId() + '|' + 'asOfDate=' + #p1")
045        public List<EarnCode> getEarnCodesForTime(Assignment a, Date asOfDate);
046    
047            /**
048             * Fetch a list of earn codes for Leave usage, for a particular assignment as of a particular date
049         * @param a
050         * @param asOfDate
051         * @param isLeavePlanningCalendar
052             * @return
053             */
054        @Cacheable(value=EarnCode.CACHE_NAME, key="'{getEarnCodesForLeave}' + 'principalId=' + T(org.kuali.hr.time.util.TKContext).getPrincipalId() + '|' + 'targetId=' + T(org.kuali.hr.time.util.TKContext).getTargetPrincipalId() + '|' + 'a=' + #p0.getTkAssignmentId() + '|' + 'asOfDate=' + #p1 + '|' + 'isLeavePlanningCalendar=' +#p2")
055        public List<EarnCode> getEarnCodesForLeave(Assignment a, Date asOfDate, boolean isLeavePlanningCalendar);
056    
057        /**
058         * Fetch a list of earn codes based on principal ID as of a particular date
059         * @param principalId
060         * @param asOfDate
061         * @param isLeavePlanningCalendar
062         * @return
063         */
064        @Cacheable(value=EarnCode.CACHE_NAME, key="'principalId=' + #p0 + '|' + 'asOfDate=' + #p1 + '|' + 'isLeavePlanningCalendar=' +#p2")
065        public List<EarnCode> getEarnCodesForPrincipal(String principalId, Date asOfDate, boolean isLeavePlanningCalendar);
066    
067        /**
068         * Fetch an EarnCode as of a particular date
069         * @param earnCode
070         * @param asOfDate
071         * @return
072         */
073        @Cacheable(value=EarnCode.CACHE_NAME, key="'earnCode=' + #p0 + '|' + 'asOfDate=' + #p1")
074            public EarnCode getEarnCode(String earnCode, Date asOfDate);
075    
076        /**
077         * Fetch the earn code type for a particular date
078         * @param earnCode
079         * @param asOfDate
080         * @return
081         */
082        @Cacheable(value=EarnCode.CACHE_NAME, key="'{getEarnCodeType}' + 'earnCode=' + #p0 + '|' + 'asOfDate=' + #p1")
083        String getEarnCodeType(String earnCode, Date asOfDate);
084        
085        /**
086         * Fetch earn code by id
087         * @param earnCodeId
088         * @return
089         */
090        @Cacheable(value=EarnCode.CACHE_NAME, key="'earnCodeId=' + #p0")
091        public EarnCode getEarnCodeById(String earnCodeId);
092        
093        /**
094         * Fetch list of system defined overtime earn codes
095         * @param asOfDate
096         * @return
097         */
098        @Cacheable(value=EarnCode.CACHE_NAME, key="'{getOvertimeEarnCodes}' + 'asOfDate=' + #p0")
099        public List<EarnCode> getOvertimeEarnCodes(Date asOfDate);
100    
101    
102        /**
103         * Fetch list of system defined overtime earn codes as strings
104         * @param asOfDate
105         * @return
106         */
107        @Cacheable(value=EarnCode.CACHE_NAME, key="'{getOvertimeEarnCodesStrs}' + 'asOfDate=' + #p0")
108        public List<String> getOvertimeEarnCodesStrs(Date asOfDate);
109    
110        /**
111             * get count of earn code with give earnCode
112             * @param earnCode
113             * @return int
114             */
115        public int getEarnCodeCount(String earnCode);
116    
117        /**
118             * get count of newer version of earn code with give earnCode and date
119             * @param earnCode
120             * @param effdt
121             * @return int
122             */
123        public int getNewerEarnCodeCount(String earnCode, Date effdt);
124        
125        /**
126         * roundHrsWithLEarnCode
127         * @param hours
128         * @param earnCode
129         * @return
130         */
131        public BigDecimal roundHrsWithEarnCode(BigDecimal hours, EarnCode earnCode);
132    
133        /**
134         * @param principalId
135         * @param isLeavePlanningCalendar
136         * @return
137         */
138        @Cacheable(value= EarnCode.CACHE_NAME, key="'{getEarnCodesForDisplay}' + 'principalId=' + #p0 + '|' + 'isLeavePlanningCalendar=' +#p1")
139        public Map<String, String> getEarnCodesForDisplay(String principalId, boolean isLeavePlanningCalendar);
140    
141        /**
142         * @param principalId
143         * @param asOfDate
144         * @return
145         */
146        @Cacheable(value= EarnCode.CACHE_NAME, key="'{getEarnCodesForDisplayWithEffectiveDate}' + 'principalId=' + #p0 + '|' + 'asOfDate=' + #p1 + '|' + 'isLeavePlanningCalendar=' +#p2")
147        public Map<String, String> getEarnCodesForDisplayWithEffectiveDate(String principalId, Date asOfDate, boolean isLeavePlanningCalendar);
148    
149        List<EarnCode> getEarnCodes(String earnCode, String ovtEarnCode, String leavePlan, String accrualCategory, String descr, Date fromEffdt, Date toEffdt, String active, String showHist);
150    }