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.lm.leaveblock.service;
017    
018    import java.math.BigDecimal;
019    import java.sql.Timestamp;
020    import java.util.Date;
021    import java.util.List;
022    import java.util.Map;
023    
024    import org.joda.time.DateTime;
025    import org.kuali.hr.lm.leaveblock.LeaveBlock;
026    import org.kuali.hr.time.assignment.Assignment;
027    import org.kuali.hr.time.calendar.CalendarEntries;
028    
029    public interface LeaveBlockService {
030        public LeaveBlock getLeaveBlock(String leaveBlockId);
031        public List<LeaveBlock> getLeaveBlocksForDocumentId(String documentId);
032        public List<LeaveBlock> getLeaveBlocks(String principalId, Date beginDate, Date endDate);
033        public List<LeaveBlock> getLeaveBlocksWithType(String principalId, Date beginDate, Date endDate, String leaveBlockType);
034        public List<LeaveBlock> getLeaveBlocksWithAccrualCategory(String principalId, Date beginDate, Date endDate, String accrualCategory);
035        public List<LeaveBlock> getLeaveBlocksSinceCarryOver(String principalId, Map<String, LeaveBlock> carryOverBlocks, DateTime endDate, boolean includeAllAccrualCategories);
036        public Map<String, LeaveBlock> getLastCarryOverBlocks(String principalId, Date asOfDate);
037        public void saveLeaveBlocks(List<LeaveBlock> leaveBlocks);
038    
039        public void saveLeaveBlock(LeaveBlock leaveBlock, String principalId);
040    
041        /**
042         * The deletion marks the leave block inactive instead of removing the row from the database.
043         * @param leaveBlockId
044         * @param principalId
045         */
046        public void deleteLeaveBlock(String leaveBlockId, String principalId);
047    
048        public void addLeaveBlocks(DateTime beginDate, DateTime endDate, CalendarEntries ce, String selectedEarnCode, 
049                    BigDecimal hours, String description, Assignment selectedAssignment, String spanningWeeks, String leaveBlockType, String principalId);
050        
051        public void updateLeaveBlock(LeaveBlock leaveBlock, String principalId);
052        /**
053         * 
054         * @param principalId
055         * @param leaveBlockType
056         * @param requestStatus
057         * @param currentDate currentDate to get the records for the future date, pass null when not required
058         * @return List of LeaveBlocks
059         */
060        public List<LeaveBlock> getLeaveBlocks(String principalId, String leaveBlockType, String requestStatus, Date currentDate);
061        /**
062         * Get the list of leave blocks from the given leaveDate for the principalId
063         * @param principalId
064         * @param leaveDate
065         * @return List of LeaveBlocks
066         */
067        public List<LeaveBlock> getLeaveBlocksForDate(String principalId, Date leaveDate);
068        /**
069         * Get the list of not-accrual-generated leave blocks from the given leaveDate for the principalId
070         * @param principalId
071         * @param leaveDate
072         * @return List of LeaveBlocks
073         */
074        public List<LeaveBlock> getNotAccrualGeneratedLeaveBlocksForDate(String principalId, Date leaveDate);
075        /**
076         * Get list of leave blocks to display on time sheet with given dates and principal id
077         * Only get leave blocks with type of leave calendar and time calendar
078         * the leave blocks should have assignments in the list of assignment keys
079         * @param principalId
080         * @param beginDate
081         * @param endDate
082         * @param assignmentKeys
083         * @return List of leave blocks
084         */
085        public List<LeaveBlock> getLeaveBlocksForTimeCalendar(String principalId, Date beginDate, Date endDate, List<String> assignmentKeys); 
086        /**
087         * Get list of leave blocks to display on leave calendar with given dates and principal id
088         * the leave blocks created from time calendar should have assignments in the list of assignment keys
089         * @param principalId
090         * @param beginDate
091         * @param endDate
092         * @param assignmentKeys
093         * @return List of leave blocks
094         */    
095        public List<LeaveBlock> getLeaveBlocksForLeaveCalendar(String principalId, Date beginDate, Date endDate, List<String> assignmentKeys); 
096       
097        /**
098         * Filter list of leave blocks with given list of assignmentKeys for Time Calendar
099         * @param lbs
100         * @param assignmentKeys
101         * @return List of leave blocks
102         */
103        public List<LeaveBlock> filterLeaveBlocksForTimeCalendar(List<LeaveBlock> lbs, List<String> assignmentKeys);
104        /**
105         * Filter list of leave blocks with given list of assignmentKeys for Leave Calendar
106         * @param lbs
107         * @param assignmentKeys
108         * @return List of leave blocks
109         */
110        public List<LeaveBlock> filterLeaveBlocksForLeaveCalendar(List<LeaveBlock> lbs, List<String> assignmentKeys);
111        /**
112         *  Delete time blocks for a given document id
113         *  @param documentId
114         */
115        public void deleteLeaveBlocksForDocumentId(String documentId);
116        
117        /**
118         * Retrieve list of accrual generated leave blocks for given Date range and User
119         * @param principalId 
120         * @param beginDate
121         * @param endDate
122         * @return List of leave blocks
123         */
124        public List<LeaveBlock> getAccrualGeneratedLeaveBlocks(String principalId, Date beginDate, Date endDate);
125        
126        /**
127         * Retrieve list of leave blocks generated with given system scheduled time off id, date and user
128         * @param principalId
129         * @param sstoId
130         * @param accruledDate
131         * @return
132         */
133        public List<LeaveBlock> getSSTOLeaveBlocks(String principalId, String sstoId, Date accruledDate);
134        
135        /**
136         * gets list of leave blocks created for earn codes with eligible-for-accrual=no since the given timestamp
137         * @param principalId
138         * @param lastRanTime
139         * @return
140         */
141        public List<LeaveBlock> getABELeaveBlocksSinceTime(String principalId, Timestamp lastRanTime);
142    }