View Javadoc
1   /*
2    * The Kuali Financial System, a comprehensive financial management system for higher education.
3    * 
4    * Copyright 2005-2014 The Kuali Foundation
5    * 
6    * This program is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Affero General Public License as
8    * published by the Free Software Foundation, either version 3 of the
9    * License, or (at your option) any later version.
10   * 
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Affero General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Affero General Public License
17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package org.kuali.kfs.module.bc.document.service;
20  
21  import org.kuali.kfs.coa.businessobject.Account;
22  import org.kuali.kfs.coa.businessobject.Chart;
23  import org.kuali.kfs.coa.businessobject.ObjectCode;
24  import org.kuali.kfs.coa.businessobject.SubAccount;
25  import org.kuali.kfs.coa.businessobject.SubObjectCode;
26  import org.kuali.kfs.module.bc.businessobject.BudgetConstructionIntendedIncumbent;
27  import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPosition;
28  import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding;
29  import org.kuali.kfs.module.bc.document.BudgetConstructionDocument;
30  import org.kuali.rice.krad.util.MessageMap;
31  
32  /**
33   * define a set of validations methods for buddget construction
34   */
35  public interface BudgetConstructionRuleHelperService {
36  
37      /**
38       * test if the given appointment funding is associated with a labor detail allowed object
39       *
40       * @param appointmentFunding the given appointment funding
41       * @param errorMap the error map that contains errors if any
42       * @return true if the given appointment funding is associated with a labor detail allowed object; otherwise, false
43       */
44      public boolean hasDetailPositionRequiredObjectCode(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
45  
46      /**
47       * test if the given appointment funding is associated with a valid account
48       *
49       * @param appointmentFunding the given appointment funding
50       * @param errorMap the error map that contains errors if any
51       * @return true if the given appointment funding is associated with a valid account; otherwise, false
52       */
53      public boolean hasValidAccount(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
54  
55      /**
56       * test if the given appointment funding is associated with a valid chart of accounts
57       *
58       * @param appointmentFunding the given appointment funding
59       * @param errorMap the error map that contains errors if any
60       * @return true if the given appointment funding is associated with a valid chart of accounts; otherwise, false
61       */
62      public boolean hasValidChart(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
63  
64      /**
65       * test if the given appointment funding is associated with a valid incumbent
66       *
67       * @param appointmentFunding the given appointment funding
68       * @param errorMap the error map that contains errors if any
69       * @return true if the given appointment funding is associated with a valid incumbent; otherwise, false
70       */
71      public boolean hasValidIncumbent(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
72  
73      /**
74       * separate quick salary setting test if the given appointment funding is associated with a valid incumbent
75       *
76       * @param appointmentFunding
77       * @param errorMap
78       * @return
79       */
80      public boolean hasValidIncumbentQuickSalarySetting(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
81  
82      /**
83       * test if the given appointment funding is associated with a valid financial object
84       *
85       * @param appointmentFunding the given appointment funding
86       * @param errorMap the error map that contains errors if any
87       * @return true if the given appointment funding is associated with a valid financial object; otherwise, false
88       */
89      public boolean hasValidObjectCode(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
90  
91      /**
92       * test if the given appointment funding is associated with a valid budget position
93       *
94       * @param appointmentFunding the given appointment funding
95       * @param errorMap the error map that contains errors if any
96       * @return true if the given appointment funding is associated with a valid budget position; otherwise, false
97       */
98      public boolean hasValidPosition(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
99  
100     /**
101      * test if the given appointment funding is associated with a valid sub account
102      *
103      * @param appointmentFunding the given appointment funding
104      * @param errorMap the error map that contains errors if any
105      * @return true if the given appointment funding is associated with a valid sub account; otherwise, false
106      */
107     public boolean hasValidSubAccount(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
108 
109     /**
110      * test if the given appointment funding is associated with a valid sub object
111      *
112      * @param appointmentFunding the given appointment funding
113      * @param errorMap the error map that contains errors if any
114      * @return true if the given appointment funding is associated with a valid sub object; otherwise, false
115      */
116     public boolean hasValidSubObjectCode(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
117 
118     /**
119      * determine whether the given appointment funding can be associated with a valid budget construction document
120      *
121      * @param appointmentFunding the given appointment funding
122      * @param errorMap the given error map that can hold the error message if any
123      * @param errorPropertyName the specified property name that is tested
124      * @return true if the given appointment funding can be associated with a valid budget construction document; otherwise, false
125      */
126     public boolean isAssociatedWithValidDocument(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap, String errorPropertyName);
127 
128     /**
129      * determine wether the given budget document is allowed to be budgeted
130      *
131      * @param budgetConstructionDocument the given budget document
132      * @param errorMap the given error map that can hold the error message if any
133      * @param errorPropertyName the specified property name that is tested
134      * @return true if the given budget document can be budgeted; otherwise, false
135      */
136     public boolean isBudgetableDocument(BudgetConstructionDocument budgetConstructionDocument, MessageMap errorMap, String errorPropertyName);
137 
138     /**
139      * determine whether the given object requires a detail position
140      *
141      * @param financialObject the given financial object
142      * @param currentValue the given current value
143      * @param errorMap the given error map that can hold the error message if any
144      * @param errorPropertyName the specified property name that is tested
145      * @return true if the given object requires a detail position; otherwise, false
146      */
147     public boolean isDetailPositionRequiredObjectCode(ObjectCode financialObject, String currentValue, MessageMap errorMap, String errorPropertyName);
148 
149     /**
150      * determine if the fields in the given appointment funding line are in the correct formats defined in the data dictionary
151      *
152      * @param appointmentFunding the given appointment funding
153      * @param errorMap the given error map that can hold the error message if any
154      * @return true if the fields in the given appointment funding line are in the correct formats defined in the data dictionary;
155      *         otherwise, false
156      */
157     public boolean isFieldFormatValid(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
158 
159     /**
160      * determine whether the given account is valid
161      *
162      * @param account the given account
163      * @param currentValue the given current value
164      * @param errorMap the given error map that can hold the error message if any
165      * @param errorPropertyName the specified property name that is tested
166      * @return true if the given account is valid; otherwise, false
167      */
168     public boolean isValidAccount(Account account, String currentValue, MessageMap errorMap, String errorPropertyName);
169 
170     /**
171      * determine whether the given chart is valid
172      *
173      * @param chart the given chart
174      * @param invalidValue the given current value
175      * @param errorMap the given error map that can hold the error message if any
176      * @param errorPropertyName the specified property name that is tested
177      * @return true if the given chart is valid; otherwise, false
178      */
179     public boolean isValidChart(Chart chart, String currentValue, MessageMap errorMap, String errorPropertyName);
180 
181     /**
182      * determine whether the given budget construction intended incumbent is valid
183      *
184      * @param intendedIncumbent the given budget construction intended incumbent
185      * @param currentValue the given current value
186      * @param errorMap the given error map that can hold the error message if any
187      * @param errorPropertyName the specified property name that is tested
188      * @return true if the given budget construction intended incumbent is valid; otherwise, false
189      */
190     public boolean isValidIncumbent(BudgetConstructionIntendedIncumbent intendedIncumbent, String currentValue, MessageMap errorMap, String errorPropertyName);
191 
192     /**
193      * Runs existence and active tests on the ObjectCode reference This method is different than the one in
194      * AccountingLineRuleHelper in that it adds the bad value to the errormessage This method signature should probably be added to
195      * AccountingLineRuleHelper
196      *
197      * @param objectCode the given object code
198      * @param currentValue the given current value
199      * @param errorMap the given error map that can hold the error message if any
200      * @param errorPropertyName the specified property name that is tested
201      * @return true if the given object code is valid; otherwise, false
202      */
203     public boolean isValidObjectCode(ObjectCode objectCode, String currentValue, MessageMap errorMap, String errorPropertyName);
204 
205     /**
206      * determine whether the given budget construction position is valid
207      *
208      * @param position the given budget construction position
209      * @param currentValue the given current value
210      * @param errorMap the given error map that can hold the error message if any
211      * @param errorPropertyName the specified property name that is tested
212      * @return true if the given budget construction position is valid; otherwise, false
213      */
214     public boolean isValidPosition(BudgetConstructionPosition position, String currentValue, MessageMap errorMap, String errorPropertyName);
215 
216     /**
217      * determine whether the given sub account is valid
218      *
219      * @param subAccount the given sub account
220      * @param currentValue the given current value
221      * @param errorMap the given error map that can hold the error message if any
222      * @param errorPropertyName the specified property name that is tested
223      * @return true if the given sub account is valid; otherwise, false
224      */
225     public boolean isValidSubAccount(SubAccount subAccount, String currentValue, MessageMap errorMap, String errorPropertyName);
226 
227     /**
228      * Runs existence and active tests on the SubObjectCode reference This method is different than the one in
229      * AccountingLineRuleHelper in that it adds the bad value to the errormessage This method signature should probably be added to
230      * AccountingLineRuleHelper
231      *
232      * @param subObjectCode the given sub object
233      * @param currentValue the given current value
234      * @param errorMap the given error map that can hold the error message if any
235      * @param errorPropertyName the specified property name that is tested
236      * @return true if the given sub object is valid; otherwise, false
237      */
238     public boolean isValidSubObjectCode(SubObjectCode subObjectCode, String currentValue, MessageMap errorMap, String errorPropertyName);
239 }