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.assignment.service;
017    
018    import org.kuali.hr.time.assignment.Assignment;
019    import org.kuali.hr.time.assignment.AssignmentDescriptionKey;
020    import org.kuali.hr.time.calendar.CalendarEntries;
021    import org.kuali.hr.time.timesheet.TimesheetDocument;
022    import org.springframework.cache.annotation.Cacheable;
023    
024    import java.sql.Date;
025    import java.util.List;
026    import java.util.Map;
027    
028    public interface AssignmentService {
029            /**
030             * Fetches a list of Assignments for a given principal Id as of a particular date
031             * @param principalId
032             * @param asOfDate
033             * @return
034             */
035        @Cacheable(value= Assignment.CACHE_NAME, key="'principalId=' + #p0 + '|' + 'asOfDate=' + #p1")
036        public List<Assignment> getAssignments(String principalId, Date asOfDate);
037        /**
038         * Reverse lookup of an assignment based on the assignment key and the document
039         * @param timesheetDocument
040         * @param assignmentKey
041         * @return
042         */
043        public Assignment getAssignment(TimesheetDocument timesheetDocument, String assignmentKey);
044        /**
045         * Reverse lookup of an assignment based on the assignment id
046         * @param tkAssignmentId
047         * @return
048         */
049        @Cacheable(value= Assignment.CACHE_NAME, key="'tkAssignmentId=' + #p0")
050        public Assignment getAssignment(String tkAssignmentId);
051        /**
052         * Get Assignment Description key based off of description
053         * @param assignmentDesc
054         * @return
055         */
056        public AssignmentDescriptionKey getAssignmentDescriptionKey(String assignmentDesc);
057        /**
058         * Get all assignment descriptions for a document
059         * @param td
060         * @param clockOnlyAssignments
061         * @return
062         */
063        public Map<String,String> getAssignmentDescriptions(TimesheetDocument td, boolean clockOnlyAssignments);
064        /**
065         * Get all assignment descriptions for an assignment
066         * @param assignment
067         * @return
068         */
069            public Map<String,String> getAssignmentDescriptions(Assignment assignment);
070            /**
071             * Get all active assignments for a work area
072             * @param workArea
073             * @param asOfDate
074             * @return
075             */
076        @Cacheable(value= Assignment.CACHE_NAME, key="'workArea=' + #p0 + '|' + 'asOfDate=' + #p1")
077            public List<Assignment> getActiveAssignmentsForWorkArea(Long workArea, Date asOfDate);
078    
079            /**
080             * Get active assignments for all users for the current date
081             * CAUTION this method will return a lot of data in a normal production env
082             * It is intended to only be used in a batch setting
083             * @param asOfDate
084             * @return
085             */
086        @Cacheable(value= Assignment.CACHE_NAME, key="'asOfDate=' + #p0")
087            public List<Assignment> getActiveAssignments(Date asOfDate);
088    
089    
090        /**
091         * For a given AssignmentDescriptionKey return the matching assignment.
092         * @param key
093         * @return
094         */
095        public Assignment getAssignment(AssignmentDescriptionKey key, Date asOfDate);
096    
097        
098        /**
099         * Fetch principal id and key as of a particular date
100         * @param principalId
101         * @param key
102         * @param asOfDate
103         * @return
104         */
105        public Assignment getAssignment(String principalId, AssignmentDescriptionKey key, Date asOfDate);
106        
107        /**
108         * Get assignments by pay calendar entry
109         * @param principalId
110         * @param payCalendarEntry
111         * @return
112         */
113        public List<Assignment> getAssignmentsByPayEntry(String principalId, CalendarEntries payCalendarEntry);
114        
115        /**
116             * KPME-1129 Kagata
117             * Get a list of active assignments based on principalId and jobNumber as of a particular date 
118             * @param principalId
119             * @param jobNumber
120             * @param asOfDate
121             * @return
122             */
123        @Cacheable(value= Assignment.CACHE_NAME, key="'principalId=' + #p0 + '|' + 'jobNumber=' + #p1 + '|' + 'asOfDate=' + #p2")
124        public List<Assignment> getActiveAssignmentsForJob(String principalId, Long jobNumber, Date asOfDate);
125    
126        List<Assignment> searchAssignments(Date fromEffdt, Date toEffdt, String principalId, String jobNumber,
127                                        String dept, String workArea, String active, String showHistory);
128    
129        public Assignment getMaxTimestampAssignment(String principalId);
130    }