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.balancetransfer.service;
017
018 import java.math.BigDecimal;
019 import java.sql.Date;
020 import java.util.ArrayList;
021 import java.util.List;
022 import java.util.Map;
023 import java.util.Set;
024
025 import org.kuali.hr.lm.accrual.AccrualCategory;
026 import org.kuali.hr.lm.balancetransfer.BalanceTransfer;
027 import org.kuali.hr.lm.leaveSummary.LeaveSummaryRow;
028 import org.kuali.hr.lm.leaveblock.LeaveBlock;
029 import org.kuali.hr.lm.leavecalendar.LeaveCalendarDocument;
030 import org.kuali.hr.time.calendar.CalendarEntries;
031 import org.kuali.rice.kew.api.exception.WorkflowException;
032
033 public interface BalanceTransferService {
034
035 //Data access
036 public List<BalanceTransfer> getAllBalanceTransfersForPrincipalId(String principalId);
037 public List<BalanceTransfer> getAllBalanceTransferForPrincipalIdAsOfDate(String principalId, Date effectiveDate);
038 public List<BalanceTransfer> getAllBalanceTransferByEffectiveDate(Date effectiveDate);
039 public void saveOrUpdate(BalanceTransfer balanceTransfer);
040
041 //@Cacheable(value= LeaveDonation.CACHE_NAME, key="'balanceTransferId=' + #p0")
042 public BalanceTransfer getBalanceTransferById(String balanceTransferId);
043
044 //Use-Case specific service providers. Could be combined if max carry over applies to all use cases.
045 /**
046 * A service that instantiates and returns BalanceTransfer objects that follow the given accrual category rule.
047 *
048 * @param principalId The principal this transfer pertains to.
049 * @param accrualCategoryRule The accrual category rule that contains the max balance information.
050 * @param accruedBalance Holds balance information needed for transfer.
051 * @param effectiveDate
052 * @return A BalanceTransfer object conforming to @param accrualCategoryRule, if one exists. Null otherwise.
053 *
054 * The transfer amount will be the minimum of:
055 *
056 * 1.) the accrual category rule's maximum transfer amount, adjusted for the employees FTE.
057 * 2.) the number of time units exceeding the maximum balance
058 *
059 */
060 public BalanceTransfer initializeTransfer(String principalId, String accrualCategoryRule, BigDecimal accruedBalance, Date effectiveDate);
061
062 /**
063 * Consumes a BalanceTransfer object, creating up to three leave blocks.
064 * @param balanceTransfer The BalanceTransfer object to use for transfer.
065 * @return The same BalanceTransfer object, but with associated leave block ids.
066 */
067 public BalanceTransfer transfer(BalanceTransfer balanceTransfer);
068
069 /**
070 * Helper Services
071 */
072
073 /**
074 * Determines which accrual categories within the given leave calendar document, are TRANSFERABLE for the given action frequency.
075 * Includes accrual categories for which ACTION_AT_MAX_BALANCE = LOSE.
076 *
077 * @param document The LeaveCalendarDocument to use in gathering transfer eligible accrual categories.
078 * @param actionFrequency One of LMConstants.MAX_BAL_ACTION_FREQ
079 * @return A List of accrualCategoryRuleId's in {@param document}'s leave summary with MAX_BAL_ACTION_FREQUENCY = {@param actionFrequency}
080 * @throws Exception
081 */
082 /* public Map<String,ArrayList<String>> getEligibleTransfers(CalendarEntries calendarEntry, String principalId) throws Exception;
083 */
084 public void submitToWorkflow(BalanceTransfer balanceTransfer) throws WorkflowException;
085
086 /**
087 * transfer system scheduled time off
088 * @param balanceTransfer
089 * @return
090 */
091 public BalanceTransfer transferSsto(BalanceTransfer balanceTransfer);
092
093 public List<BalanceTransfer> getBalanceTransfers(String viewPrincipal, Date beginPeriodDate, Date endPeriodDate);
094
095 }