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