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.approval.service; 017 018 import java.math.BigDecimal; 019 import java.util.Date; 020 import java.util.List; 021 import java.util.Map; 022 import java.util.Set; 023 import java.util.SortedSet; 024 025 import org.joda.time.DateTimeZone; 026 import org.joda.time.Interval; 027 import org.kuali.hr.core.KPMEConstants; 028 import org.kuali.hr.time.approval.web.ApprovalTimeSummaryRow; 029 import org.kuali.hr.time.calendar.Calendar; 030 import org.kuali.hr.time.calendar.CalendarEntries; 031 import org.kuali.hr.time.person.TKPerson; 032 import org.kuali.hr.time.timeblock.TimeBlock; 033 import org.kuali.hr.time.workflow.TimesheetDocumentHeader; 034 import org.kuali.rice.kew.api.note.Note; 035 import org.kuali.rice.kew.routeheader.DocumentRouteHeaderValue; 036 import org.springframework.cache.annotation.Cacheable; 037 038 import com.google.common.collect.Multimap; 039 040 041 public interface TimeApproveService { 042 043 /** 044 * Obtains a Map of Lists of ApprovalTimeSummaryRows. The Key to the map is 045 * the PayCalendar Group name. 046 * 047 * @param payBeginDate 048 * @param payEndDate 049 * @param calGroup Specify a calendar group to filter by. 050 * @return A Map<String, List<ApprovalTimeSummaryRow>> container. 051 */ 052 public List<ApprovalTimeSummaryRow> getApprovalSummaryRows(Date payBeginDate, Date payEndDate, String calGroup, List<TKPerson> principalIds, List<String> payCalendarLabels, CalendarEntries payCalendarEntries); 053 054 055 056 // public List<ApprovalTimeSummaryRow> getApprovalSummaryRows(Date payBeginDate, Date payEndDate, String calGroup, List<String> principalIds); 057 058 @Cacheable(value= KPMEConstants.KPME_GLOBAL_CACHE_NAME, key="'{PayCalendarLabelsForApprovalTab}' + 'payBeginDate=' + #p0 + '|' + 'payEndDate=' + #p1") 059 public List<String> getPayCalendarLabelsForApprovalTab(Date payBeginDate, Date payEndDate); 060 061 /** 062 * Method to obtain all of the active Pay Calendar Group names for the current 063 * user / approver. 064 * We used SortedSet here since we only want unique values while keeping the order. 065 * Besides, we also need to get the first value as the default pay calendar group in some cases. 066 * There is not get() method in the Set interface. 067 * 068 * @param payBeginDate 069 * @param payEndDate 070 * @return 071 */ 072 public SortedSet<String> getApproverPayCalendarGroups(Date payBeginDate, Date payEndDate); 073 074 /** 075 * Used to determine if there are notes on a document 076 * @param documentNumber 077 * @return list of note objects 078 */ 079 public List<Note> getNotesForDocument(String documentNumber); 080 081 public Map<String, BigDecimal> getHoursToPayDayMap(String principalId, Date payEndDate, List<String> payCalendarLabels, List<TimeBlock> lstTimeBlocks, Long workArea, CalendarEntries payCalendarEntries, Calendar payCalendar, DateTimeZone dateTimeZone, List<Interval> dayIntervals); 082 083 public Map<String, BigDecimal> getHoursToFlsaWeekMap(String principalId, Date payEndDate, List<String> payCalendarLabels, List<TimeBlock> lstTimeBlocks, Long workArea, CalendarEntries payCalendarEntries, Calendar payCalendar, DateTimeZone dateTimeZone, List<Interval> dayIntervals); 084 /** 085 * Method to provide a mapping of PayCalendarGroupNames to PayCalendarEntries to 086 * allow for various starting points in Approval Tab Navigation. 087 * 088 * @param currentDate The current date. This method will search for active 089 * assignments for this approver active as of this date, and 31 days prior 090 * to pull back PayCalendarEntries. 091 * 092 * @return A CalendarGroup Name to PayCalendarEntries mapping. 093 */ 094 public Map<String,CalendarEntries> getPayCalendarEntriesForApprover(String principalId, Date currentDate, String dept); 095 096 /* 097 * returns all Calendar entries with TimeSheetDocument created and can be approved by given principalId 098 */ 099 public List<CalendarEntries> getAllPayCalendarEntriesForApprover(String principalId, Date currentDate); 100 101 102 103 public boolean doesApproverHavePrincipalsForCalendarGroup(Date asOfDate, String calGroup); 104 public Map<String,CalendarEntries> getPayCalendarEntriesForDept(String dept, Date currentDate); 105 106 /** 107 * Method to create a map that contains the principal's id and corresponding timesheet document header. 108 * 109 * @param payBeginDate 110 * @param payEndDate 111 * @return A PrincipalId to TimesheetDocumentHeader mapping. 112 */ 113 Map<String, TimesheetDocumentHeader> getPrincipalDocumehtHeader(List<TKPerson> person, Date payBeginDate, Date payEndDate); 114 115 /** 116 * Method to create a map of the depts and their associated work areas based on the given approver work areas. 117 * 118 * @param approverWorkAres 119 * @return A Dept and Work Areas mapping. 120 */ 121 Multimap<String, Long> getDeptWorkAreasByWorkAreas(Set<Long> approverWorkAres); 122 123 /** 124 * Method to create a map of the depts and their associated work areas based on the given depts. 125 * 126 * @param userDepts 127 * @return A Dept and Work Areas mapping. 128 */ 129 Multimap<String, Long> getDeptWorkAreasByDepts(Set<String> userDepts); 130 131 public DocumentRouteHeaderValue getRouteHeader(String documentId); 132 133 /** 134 * Get a list of unique principal ids with given criteria 135 * used to populate tables in Time approval page 136 * @param workAreaList 137 * @param calendarGroup 138 * @param effdt 139 * @param beginDate 140 * @param endDate 141 * @return 142 */ 143 public List<String> getTimePrincipalIdsWithSearchCriteria(List<String> workAreaList, String calendarGroup, java.sql.Date effdt, java.sql.Date beginDate, java.sql.Date endDate); 144 }