View Javadoc
1   /**
2    * Copyright 2004-2014 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.kpme.tklm.leave.transfer.service;
17  
18  import java.math.BigDecimal;
19  import java.util.List;
20  
21  import org.joda.time.LocalDate;
22  import org.kuali.kpme.tklm.leave.transfer.BalanceTransfer;
23  import org.kuali.rice.kew.api.exception.WorkflowException;
24  
25  public interface BalanceTransferService {
26  
27  	//Data access
28  	public List<BalanceTransfer> getAllBalanceTransfersForPrincipalId(String principalId);
29  	public List<BalanceTransfer> getAllBalanceTransferForPrincipalIdAsOfDate(String principalId, LocalDate effectiveDate);
30  	public List<BalanceTransfer> getAllBalanceTransferByEffectiveDate(LocalDate effectiveDate);
31  	public void saveOrUpdate(BalanceTransfer balanceTransfer);
32  	
33  	//@Cacheable(value= LeaveDonation.CACHE_NAME, key="'balanceTransferId=' + #p0")
34  	public BalanceTransfer getBalanceTransferById(String balanceTransferId);
35  	
36  	//Use-Case specific service providers. Could be combined if max carry over applies to all use cases.
37  	/**
38  	 * A service that instantiates and returns BalanceTransfer objects that follow the given accrual category rule.
39  	 * 
40  	 * @param principalId	The principal this transfer pertains to.
41  	 * @param accrualCategoryRule	The accrual category rule that contains the max balance information.
42  	 * @param accruedBalance	Holds balance information needed for transfer.
43  	 * @param effectiveDate 
44  	 * @return A BalanceTransfer object conforming to @param accrualCategoryRule, if one exists. Null otherwise.
45  	 * 
46  	 * The transfer amount will be the minimum of:
47  	 *  
48  	 *  	1.) the accrual category rule's maximum transfer amount, adjusted for the employees FTE.
49  	 *  	2.) the number of time units exceeding the maximum balance 
50  	 *
51  	 */
52  	public BalanceTransfer initializeTransfer(String principalId, String accrualCategoryRule, BigDecimal accruedBalance, LocalDate effectiveDate);
53  
54  	/**
55  	 * Consumes a BalanceTransfer object, creating up to three leave blocks.
56  	 * @param balanceTransfer The BalanceTransfer object to use for transfer.
57  	 * @return The same BalanceTransfer object, but with associated leave block ids.
58  	 */
59  	public BalanceTransfer transfer(BalanceTransfer balanceTransfer);
60  	
61  	/**
62  	 * Helper Services
63  	 */
64  	
65  	/**
66  	 * Determines which accrual categories within the given leave calendar document, are TRANSFERABLE for the given action frequency.
67  	 * Includes accrual categories for which ACTION_AT_MAX_BALANCE = LOSE.
68  	 * 
69  	 * @param document The LeaveCalendarDocument to use in gathering transfer eligible accrual categories.
70  	 * @param actionFrequency One of HrConstants.MAX_BAL_ACTION_FREQ
71  	 * @return A List of accrualCategoryRuleId's in {@param document}'s leave summary with MAX_BAL_ACTION_FREQUENCY = {@param actionFrequency} 
72  	 * @throws Exception
73  	 */
74  /*	public Map<String,ArrayList<String>> getEligibleTransfers(CalendarEntry calendarEntry, String principalId) throws Exception;
75  */	
76  	public String submitToWorkflow(BalanceTransfer balanceTransfer) throws WorkflowException;
77  	
78  	/**
79  	 * transfer system scheduled time off
80  	 * @param balanceTransfer
81  	 * @return
82  	 */
83  	public BalanceTransfer transferSsto(BalanceTransfer balanceTransfer);
84  	
85  	public List<BalanceTransfer> getBalanceTransfers(String viewPrincipal, LocalDate beginPeriodDate, LocalDate endPeriodDate);
86  
87  
88      public List<BalanceTransfer> getBalanceTransfers(String principalId, String fromAccrualCategory, String transferAmount, String toAccrualCategory, String amountTransferred, String forfeitedAmount, LocalDate fromEffdt, LocalDate toEffdt);
89  }