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        /**
063         *
064         * @param principalId
065         * @param leaveBlockType
066         * @param requestStatus
067         * @param beginDate
068         * @param endDate
069         * @return List of LeaveBlocks
070         */
071        public List<LeaveBlock> getLeaveBlocks(String principalId, String leaveBlockType, String requestStatus, Date beginDate, Date endDate);
072    
073        /**
074         * Get the list of leave blocks from the given leaveDate for the principalId
075         * @param principalId
076         * @param leaveDate
077         * @return List of LeaveBlocks
078         */
079        public List<LeaveBlock> getLeaveBlocksForDate(String principalId, Date leaveDate);
080        /**
081         * Get the list of not-accrual-generated leave blocks from the given leaveDate for the principalId
082         * @param principalId
083         * @param leaveDate
084         * @return List of LeaveBlocks
085         */
086        public List<LeaveBlock> getNotAccrualGeneratedLeaveBlocksForDate(String principalId, Date leaveDate);
087        /**
088         * Get list of leave blocks to display on time sheet with given dates and principal id
089         * Only get leave blocks with type of leave calendar and time calendar
090         * the leave blocks should have assignments in the list of assignment keys
091         * @param principalId
092         * @param beginDate
093         * @param endDate
094         * @param assignmentKeys
095         * @return List of leave blocks
096         */
097        public List<LeaveBlock> getLeaveBlocksForTimeCalendar(String principalId, Date beginDate, Date endDate, List<String> assignmentKeys); 
098        /**
099         * Get list of leave blocks to display on leave calendar with given dates and principal id
100         * the leave blocks created from time calendar should have assignments in the list of assignment keys
101         * @param principalId
102         * @param beginDate
103         * @param endDate
104         * @param assignmentKeys
105         * @return List of leave blocks
106         */    
107        public List<LeaveBlock> getLeaveBlocksForLeaveCalendar(String principalId, Date beginDate, Date endDate, List<String> assignmentKeys); 
108       
109        /**
110         * Filter list of leave blocks with given list of assignmentKeys for Time Calendar
111         * @param lbs
112         * @param assignmentKeys
113         * @return List of leave blocks
114         */
115        public List<LeaveBlock> filterLeaveBlocksForTimeCalendar(List<LeaveBlock> lbs, List<String> assignmentKeys);
116        /**
117         * Filter list of leave blocks with given list of assignmentKeys for Leave Calendar
118         * @param lbs
119         * @param assignmentKeys
120         * @return List of leave blocks
121         */
122        public List<LeaveBlock> filterLeaveBlocksForLeaveCalendar(List<LeaveBlock> lbs, List<String> assignmentKeys);
123        /**
124         *  Delete time blocks for a given document id
125         *  @param documentId
126         */
127        public void deleteLeaveBlocksForDocumentId(String documentId);
128        
129        /**
130         * Retrieve list of accrual generated leave blocks for given Date range and User
131         * @param principalId 
132         * @param beginDate
133         * @param endDate
134         * @return List of leave blocks
135         */
136        public List<LeaveBlock> getAccrualGeneratedLeaveBlocks(String principalId, Date beginDate, Date endDate);
137        
138        /**
139         * Retrieve list of leave blocks generated with given system scheduled time off id, date and user
140         * @param principalId
141         * @param sstoId
142         * @param accruledDate
143         * @return
144         */
145        public List<LeaveBlock> getSSTOLeaveBlocks(String principalId, String sstoId, Date accruledDate);
146        
147        /**
148         * gets list of leave blocks created for earn codes with eligible-for-accrual=no since the given timestamp
149         * @param principalId
150         * @param lastRanTime
151         * @return
152         */
153        public List<LeaveBlock> getABELeaveBlocksSinceTime(String principalId, Timestamp lastRanTime);
154    }