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.lm.leavecalendar.LeaveCalendarDocument; 019 import org.kuali.hr.time.assignment.Assignment; 020 import org.kuali.hr.time.assignment.AssignmentDescriptionKey; 021 import org.kuali.hr.time.calendar.CalendarEntries; 022 import org.kuali.hr.time.timesheet.TimesheetDocument; 023 import org.springframework.cache.annotation.Cacheable; 024 025 import java.sql.Date; 026 import java.util.List; 027 import java.util.Map; 028 029 public interface AssignmentService { 030 /** 031 * Fetches a list of Assignments for a given principal Id as of a particular date 032 * @param principalId 033 * @param asOfDate 034 * @return 035 */ 036 @Cacheable(value= Assignment.CACHE_NAME, key="'principalId=' + #p0 + '|' + 'asOfDate=' + #p1") 037 public List<Assignment> getAssignments(String principalId, Date asOfDate); 038 /** 039 * Reverse lookup of an assignment based on the assignment key and the document 040 * @param timesheetDocument 041 * @param assignmentKey 042 * @return 043 */ 044 public Assignment getAssignment(TimesheetDocument timesheetDocument, String assignmentKey); 045 /** 046 * Reverse lookup of an assignment based on the assignment id 047 * @param tkAssignmentId 048 * @return 049 */ 050 @Cacheable(value= Assignment.CACHE_NAME, key="'tkAssignmentId=' + #p0") 051 public Assignment getAssignment(String tkAssignmentId); 052 /** 053 * Get Assignment Description key based off of description 054 * @param assignmentDesc 055 * @return 056 */ 057 public AssignmentDescriptionKey getAssignmentDescriptionKey(String assignmentDesc); 058 /** 059 * Get all assignment descriptions for a document 060 * @param td 061 * @param clockOnlyAssignments 062 * @return 063 */ 064 public Map<String,String> getAssignmentDescriptions(TimesheetDocument td, boolean clockOnlyAssignments); 065 /** 066 * Get all assignment descriptions for an assignment 067 * @param assignment 068 * @return 069 */ 070 public Map<String,String> getAssignmentDescriptions(Assignment assignment); 071 /** 072 * Get all active assignments for a work area 073 * @param workArea 074 * @param asOfDate 075 * @return 076 */ 077 @Cacheable(value= Assignment.CACHE_NAME, key="'workArea=' + #p0 + '|' + 'asOfDate=' + #p1") 078 public List<Assignment> getActiveAssignmentsForWorkArea(Long workArea, Date asOfDate); 079 080 /** 081 * Get active assignments for all users for the current date 082 * CAUTION this method will return a lot of data in a normal production env 083 * It is intended to only be used in a batch setting 084 * @param asOfDate 085 * @return 086 */ 087 @Cacheable(value= Assignment.CACHE_NAME, key="'asOfDate=' + #p0") 088 public List<Assignment> getActiveAssignments(Date asOfDate); 089 090 091 /** 092 * For a given AssignmentDescriptionKey return the matching assignment. 093 * @param key 094 * @return 095 */ 096 public Assignment getAssignment(AssignmentDescriptionKey key, Date asOfDate); 097 098 099 /** 100 * Fetch principal id and key as of a particular date 101 * @param principalId 102 * @param key 103 * @param asOfDate 104 * @return 105 */ 106 public Assignment getAssignment(String principalId, AssignmentDescriptionKey key, Date asOfDate); 107 108 /** 109 * Get assignments by pay calendar entry 110 * @param principalId 111 * @param payCalendarEntry 112 * @return 113 */ 114 public List<Assignment> getAssignmentsByPayEntry(String principalId, CalendarEntries payCalendarEntry); 115 /** 116 * Get assignments for Time Calendar by calendar entry 117 * @param principalId 118 * @param calendarEntry 119 * @return 120 */ 121 public List<Assignment> getAssignmentsByCalEntryForTimeCalendar(String principalId, CalendarEntries calendarEntry); 122 /** 123 * Get assignments for Leave Calendar by calendar entry 124 * @param principalId 125 * @param calendarEntry 126 * @return 127 */ 128 public List<Assignment> getAssignmentsByCalEntryForLeaveCalendar(String principalId, CalendarEntries calendarEntry); 129 130 /** 131 * KPME-1129 Kagata 132 * Get a list of active assignments based on principalId and jobNumber as of a particular date 133 * @param principalId 134 * @param jobNumber 135 * @param asOfDate 136 * @return 137 */ 138 @Cacheable(value= Assignment.CACHE_NAME, key="'principalId=' + #p0 + '|' + 'jobNumber=' + #p1 + '|' + 'asOfDate=' + #p2") 139 public List<Assignment> getActiveAssignmentsForJob(String principalId, Long jobNumber, Date asOfDate); 140 141 List<Assignment> searchAssignments(Date fromEffdt, Date toEffdt, String principalId, String jobNumber, 142 String dept, String workArea, String active, String showHistory); 143 144 145 /** 146 * Get all assignment descriptions for a document 147 * @param td 148 * @param clockOnlyAssignments 149 * @return 150 */ 151 public Map<String,String> getAssignmentDescriptions(LeaveCalendarDocument lcd); 152 153 /** 154 * Get all assignment descriptions for given list of Assignments 155 * @param assignments 156 * @return 157 */ 158 public Map<String, String> getAssignmentDescriptionsForAssignments(List<Assignment> assignments); 159 160 public Assignment getAssignment(LeaveCalendarDocument leaveCalendarDocument, String assignmentKey); 161 162 public Assignment getAssignment(List<Assignment> assignments, String assignmentKey, Date beginDate); 163 164 public Assignment getMaxTimestampAssignment(String principalId); 165 166 /** 167 * Filter the given list of assignments with given criteria 168 * @param assignments 169 * @param flsaStatus 170 * @param chkForLeaveEligible 171 * @return List<Assignment> 172 */ 173 public List<Assignment> filterAssignments(List<Assignment> assignments, String flsaStatus, boolean chkForLeaveEligible); 174 175 /** 176 * Get assignment that applies to primary job of employee 177 * to be used in calculating system scheduled time off 178 * @param timesheetDocument 179 * @param payEndDate 180 * @return 181 */ 182 public Assignment getAssignmentToApplyScheduledTimeOff(TimesheetDocument timesheetDocument, java.sql.Date payEndDate); 183 /** 184 * Get list of unique principalIds with given workarea list and dates 185 * @param workAreaList 186 * @param effdt 187 * @param startDate 188 * @param endDate 189 * @return 190 */ 191 public List<String> getPrincipalIds(List<String> workAreaList, Date effdt, Date startDate, Date endDate); 192 193 public List<Assignment> getAssignments(List<String> workAreaList, Date effdt, Date startDate, Date endDate); 194 }