View Javadoc
1   /*
2    * Copyright 2005 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.ole.coa.service;
17  
18  import java.util.Collection;
19  import java.util.Iterator;
20  import java.util.List;
21  
22  import org.kuali.ole.coa.businessobject.Account;
23  import org.kuali.ole.coa.businessobject.AccountDelegate;
24  import org.kuali.ole.sys.businessobject.AccountingLine;
25  import org.kuali.rice.kim.api.identity.Person;
26  
27  
28  /**
29   * This interface defines methods that an Account Service must provide
30   */
31  public interface AccountService {
32      /**
33       * Retrieves an Account object based on primary key.
34       *
35       * @param chartOfAccountsCode - Chart of Accounts Code
36       * @param accountNumber - Account Number
37       * @return Account
38       */
39      public Account getByPrimaryId(String chartOfAccountsCode, String accountNumber);
40  
41      /**
42       * Method is used by KualiAccountAttribute to enable caching of orgs for routing.
43       *
44       * @see org.kuali.ole.coa.service.AccountService#getByPrimaryId(java.lang.String, java.lang.String)
45       */
46      public Account getByPrimaryIdWithCaching(String chartOfAccountsCode, String accountNumber);
47  
48      /**
49       * This method retrieves the fiscal officers primary delegate based on the chart, account, and document type specified on the
50       * example, along with the total dollar amount
51       *
52       * @param delegateExample The object that contains the chart, account, and document type that should be used to query the
53       *        account delegate table
54       * @param totalDollarAmount The amount that should be compared to the from and to amount on the account delegate table
55       * @return The primary delegate for this account, document type, and amount
56       */
57      public AccountDelegate getPrimaryDelegationByExample(AccountDelegate delegateExample, String totalDollarAmount);
58  
59      /**
60       * This method retrieves the fiscal officers secondary delegates based on the chart, account, and document type specified on the
61       * example, along with the total dollar amount
62       *
63       * @param delegateExample The object that contains the chart, account, and document type that should be used to query the
64       *        account delegate table
65       * @param totalDollarAmount The amount that should be compared to the from and to amount on the account delegate table
66       * @return The primary delegate for this account, document type, and amount
67       */
68      public List getSecondaryDelegationsByExample(AccountDelegate delegateExample, String totalDollarAmount);
69  
70      /**
71       * Fetches the accounts that the user is either the fiscal officer or fiscal officer delegate for.
72       *
73       * @param kualiUser
74       * @return a list of Accounts that the user has responsibility for
75       */
76      public List getAccountsThatUserIsResponsibleFor(Person kualiUser);
77  
78      /**
79       * Does the given user have responsibilities on the given account?
80       *
81       * @param kualiUser the universal user to check responsibilities for
82       * @param account the account to check responsibilities on
83       * @return true if user does have responsibilities, false if otherwise
84       */
85      public boolean hasResponsibilityOnAccount(Person kualiUser, Account account);
86  
87      /**
88       * get all accounts in the system. This is needed by a sufficient funds rebuilder job
89       *
90       * @return iterator of all accounts
91       */
92      public Iterator getAllAccounts();
93  
94      /**
95       * Retrieves all active accounts from the database where the given principal is the fiscal officer
96       *
97       * @param principalId the principal id of the fiscal officer
98       * @return an Iterator of active Accounts
99       */
100     public abstract Iterator<Account> getActiveAccountsForFiscalOfficer(String principalId);
101 
102     /**
103      * Retrieves all expired accounts from the database where the given principal is the fiscal officer
104      *
105      * @param principalId the principal id of the fiscal officer
106      * @return an Iterator of expired Accounts
107      */
108     public abstract Iterator<Account> getExpiredAccountsForFiscalOfficer(String principalId);
109 
110     /**
111      * Retrieves all active accounts from the database where the given principal is the account supervisor
112      *
113      * @param principalId the principal id of the account supervisor
114      * @return an Iterator of active Accounts
115      */
116     public abstract Iterator<Account> getActiveAccountsForAccountSupervisor(String principalId);
117 
118     /**
119      * Retrieves all active accounts from the database where the given principal is the account supervisor
120      *
121      * @param principalId the principal id of the account supervisor
122      * @return an Iterator of expired Accounts
123      */
124     public abstract Iterator<Account> getExpiredAccountsForAccountSupervisor(String principalId);
125 
126     /**
127      * Determines if the given principal is the fiscal officer of any non-closed account
128      *
129      * @param principalId the principal to check for the fiscal officer role
130      * @return true if the principal is a fiscal officer for any non-closed account, false otherwise
131      */
132     public abstract boolean isPrincipalInAnyWayShapeOrFormFiscalOfficer(String principalId);
133 
134     /**
135      * Determines if the given principal is the account supervisor of any non-closed account
136      *
137      * @param principalId the principal to check for the account supervisor role
138      * @return true if the principal is a account supervisor for any non-closed account, false otherwise
139      */
140     public abstract boolean isPrincipalInAnyWayShapeOrFormAccountSupervisor(String principalId);
141 
142     /**
143      * Determines if the given principal is the account manager of any non-closed account
144      *
145      * @param principalId the principal to check for the account manager role
146      * @return true if the principal is a account manager for any non-closed account, false otherwise
147      */
148     public abstract boolean isPrincipalInAnyWayShapeOrFormAccountManager(String principalId);
149 
150     /**
151      * Returns the accounts associated with a given account number
152      *
153      * @param accountNumber the account number
154      * @return a list of accounts associated with that account number
155      */
156     public abstract Collection<Account> getAccountsForAccountNumber(String accountNumber);
157 
158     /**
159      * Retrieves the default labor benefit rate category code based on account type code.
160      *
161      * @param accountTypeCode - The Account Type Code to find the default value for
162      * @return String - the default labor benefit rate category code for given account type code
163      */
164     public String getDefaultLaborBenefitRateCategoryCodeForAccountType(String accountTypeCode);
165 
166     /**
167      * Retrieve the from the parameter if ENABLE_FRINGE_BENEFIT_CALC_BY_BENEFIT_RATE_CATEGORY_IND
168      * is enabled
169      *
170      * Default to Boolean.FALSE if it cannot be evaluated or parameter is not defined
171      *
172      * @return
173      */
174     public Boolean isFridgeBenefitCalculationEnable();
175 
176     /**
177      * Returns the unique account associated with a given account number. This method only applies when parameter
178      * ACCOUNTS_CAN_CROSS_CHARTS_IND is set to "N".
179      *
180      * @param accountNumber the account number
181      * @return the unique account associated with that account number
182      */
183     public Account getUniqueAccountForAccountNumber(String accountNumber);
184 
185     /**
186      * Returns true if parameter ACCOUNTS_CAN_CROSS_CHARTS_IND is set to "Y"; otherwise false.
187      */
188     public boolean accountsCanCrossCharts();
189 
190     /*
191      * Populate chart code if it's null, according to the account number in the specified accounting line. This only happens when
192      * parameter ACCOUNTS_CAN_CROSS_CHARTS_IND is set to "N", and Javascript is turned off.
193      * @param the new source accounting line
194      */
195     public void populateAccountingLineChartIfNeeded(AccountingLine line);
196 }
197