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