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.lm.leaveblock.LeaveBlock;
029    import org.kuali.hr.time.approval.web.ApprovalTimeSummaryRow;
030    import org.kuali.hr.time.calendar.Calendar;
031    import org.kuali.hr.time.calendar.CalendarEntries;
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<String> 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, List<LeaveBlock> leaveBlocks, 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, List<LeaveBlock> leaveBlocks, 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> getPrincipalDocumentHeader(List<String> principalIds, 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    }