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 }