001 /*
002 * Copyright 2011 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.kfs.module.bc.document.service;
017
018 import org.kuali.kfs.coa.businessobject.Account;
019 import org.kuali.kfs.coa.businessobject.Chart;
020 import org.kuali.kfs.coa.businessobject.ObjectCode;
021 import org.kuali.kfs.coa.businessobject.SubAccount;
022 import org.kuali.kfs.coa.businessobject.SubObjectCode;
023 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionIntendedIncumbent;
024 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPosition;
025 import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding;
026 import org.kuali.kfs.module.bc.document.BudgetConstructionDocument;
027 import org.kuali.rice.kns.util.ErrorMap;
028 import org.kuali.rice.kns.util.MessageMap;
029
030 /**
031 * define a set of validations methods for buddget construction
032 */
033 public interface BudgetConstructionRuleHelperService {
034
035 /**
036 * test if the given appointment funding is associted with a labor detail allowed object
037 *
038 * @param appointmentFunding the given appointment funding
039 * @param errorMap the error map that contains errors if any
040 * @return true if the given appointment funding is associted with a labor detail allowed object; otherwise, false
041 */
042 public boolean hasDetailPositionRequiredObjectCode(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
043
044 /**
045 * test if the given appointment funding is associted with a valid account
046 *
047 * @param appointmentFunding the given appointment funding
048 * @param errorMap the error map that contains errors if any
049 * @return true if the given appointment funding is associted with a valid account; otherwise, false
050 */
051 public boolean hasValidAccount(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
052
053 /**
054 * test if the given appointment funding is associted with a valid chart of accounts
055 *
056 * @param appointmentFunding the given appointment funding
057 * @param errorMap the error map that contains errors if any
058 * @return true if the given appointment funding is associted with a valid chart of accounts; otherwise, false
059 */
060 public boolean hasValidChart(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
061
062 /**
063 * test if the given appointment funding is associted with a valid incumbent
064 *
065 * @param appointmentFunding the given appointment funding
066 * @param errorMap the error map that contains errors if any
067 * @return true if the given appointment funding is associted with a valid incumbent; otherwise, false
068 */
069 public boolean hasValidIncumbent(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
070
071 /**
072 * test if the given appointment funding is associted with a valid financial object
073 *
074 * @param appointmentFunding the given appointment funding
075 * @param errorMap the error map that contains errors if any
076 * @return true if the given appointment funding is associted with a valid financial object; otherwise, false
077 */
078 public boolean hasValidObjectCode(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
079
080 /**
081 * test if the given appointment funding is associted with a valid budget position
082 *
083 * @param appointmentFunding the given appointment funding
084 * @param errorMap the error map that contains errors if any
085 * @return true if the given appointment funding is associted with a valid budget position; otherwise, false
086 */
087 public boolean hasValidPosition(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
088
089 /**
090 * test if the given appointment funding is associted with a valid sub account
091 *
092 * @param appointmentFunding the given appointment funding
093 * @param errorMap the error map that contains errors if any
094 * @return true if the given appointment funding is associted with a valid sub account; otherwise, false
095 */
096 public boolean hasValidSubAccount(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
097
098 /**
099 * test if the given appointment funding is associted with a valid sub object
100 *
101 * @param appointmentFunding the given appointment funding
102 * @param errorMap the error map that contains errors if any
103 * @return true if the given appointment funding is associted with a valid sub object; otherwise, false
104 */
105 public boolean hasValidSubObjectCode(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
106
107 /**
108 * determine whether the given appoinment funding can be associated with a valid budget contruction document
109 *
110 * @param appointmentFunding the given appointment funding
111 * @param errorMap the given error map that can hold the error message if any
112 * @param errorPropertyName the specified property name that is tested
113 * @return true if the given appoinment funding can be associated with a valid budget contruction document; otherwise, false
114 */
115 public boolean isAssociatedWithValidDocument(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap, String errorPropertyName);
116
117 /**
118 * determine wether the given budget document is allowed to be budgeted
119 *
120 * @param budgetConstructionDocument the given budget document
121 * @param errorMap the given error map that can hold the error message if any
122 * @param errorPropertyName the specified property name that is tested
123 * @return true if the given budget document can be budgeted; otherwise, false
124 */
125 public boolean isBudgetableDocument(BudgetConstructionDocument budgetConstructionDocument, MessageMap errorMap, String errorPropertyName);
126
127 /**
128 * determine whether the given object requires a detail position
129 *
130 * @param financialObject the given financial object
131 * @param currentValue the given current value
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 object requires a detail position; otherwise, false
135 */
136 public boolean isDetailPositionRequiredObjectCode(ObjectCode financialObject, String currentValue, MessageMap errorMap, String errorPropertyName);
137
138 /**
139 * determine if the fields in the given appointment funding line are in the correct formats defined in the data dictionary
140 *
141 * @param appointmentFunding the given appointment funding
142 * @param errorMap the given error map that can hold the error message if any
143 * @return true if the fields in the given appointment funding line are in the correct formats defined in the data dictionary;
144 * otherwise, false
145 */
146 public boolean isFieldFormatValid(PendingBudgetConstructionAppointmentFunding appointmentFunding, MessageMap errorMap);
147
148 /**
149 * determine whether the given account is valid
150 *
151 * @param account the given account
152 * @param currentValue the given current value
153 * @param errorMap the given error map that can hold the error message if any
154 * @param errorPropertyName the specified property name that is tested
155 * @return true if the given account is valid; otherwise, false
156 */
157 public boolean isValidAccount(Account account, String currentValue, MessageMap errorMap, String errorPropertyName);
158
159 /**
160 * determine whether the given chart is valid
161 *
162 * @param chart the given chart
163 * @param invalidValue 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 chart is valid; otherwise, false
167 */
168 public boolean isValidChart(Chart chart, String currentValue, MessageMap errorMap, String errorPropertyName);
169
170 /**
171 * determine whether the given budget contruction intended incumbent is valid
172 *
173 * @param intendedIncumbent the given budget contruction intended incumbent
174 * @param currentValue 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 budget contruction intended incumbent is valid; otherwise, false
178 */
179 public boolean isValidIncumbent(BudgetConstructionIntendedIncumbent intendedIncumbent, String currentValue, MessageMap errorMap, String errorPropertyName);
180
181 /**
182 * Runs existence and active tests on the ObjectCode reference This method is differenct than the one in
183 * AccountingLineRuleHelper in that it adds the bad value to the errormessage This method signature should probably be added to
184 * AccountingLineRuleHelper
185 *
186 * @param objectCode the given object code
187 * @param currentValue the given current value
188 * @param errorMap the given error map that can hold the error message if any
189 * @param errorPropertyName the specified property name that is tested
190 * @return true if the given object code is valid; otherwise, false
191 */
192 public boolean isValidObjectCode(ObjectCode objectCode, String currentValue, MessageMap errorMap, String errorPropertyName);
193
194 /**
195 * determine whether the given budget contruction position is valid
196 *
197 * @param position the given budget contruction position
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 budget contruction position is valid; otherwise, false
202 */
203 public boolean isValidPosition(BudgetConstructionPosition position, String currentValue, MessageMap errorMap, String errorPropertyName);
204
205 /**
206 * determine whether the given sub account is valid
207 *
208 * @param subAccount the given sub account
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 sub account is valid; otherwise, false
213 */
214 public boolean isValidSubAccount(SubAccount subAccount, String currentValue, MessageMap errorMap, String errorPropertyName);
215
216 /**
217 * Runs existence and active tests on the SubObjectCode reference This method is differenct than the one in
218 * AccountingLineRuleHelper in that it adds the bad value to the errormessage This method signature should probably be added to
219 * AccountingLineRuleHelper
220 *
221 * @param subObjectCode the given sub object
222 * @param currentValue the given current value
223 * @param errorMap the given error map that can hold the error message if any
224 * @param errorPropertyName the specified property name that is tested
225 * @return true if the given sub object is valid; otherwise, false
226 */
227 public boolean isValidSubObjectCode(SubObjectCode subObjectCode, String currentValue, MessageMap errorMap, String errorPropertyName);
228 }