1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.hr.time.util;
17
18 import java.math.BigDecimal;
19 import java.sql.Date;
20 import java.util.HashMap;
21 import java.util.List;
22 import java.util.Map;
23
24 import org.apache.commons.lang.StringUtils;
25 import org.kuali.hr.earncodesec.EarnCodeSecurity;
26 import org.kuali.hr.location.Location;
27 import org.kuali.hr.paygrade.PayGrade;
28 import org.kuali.hr.time.accrual.AccrualCategory;
29 import org.kuali.hr.time.accrual.TimeOffAccrual;
30 import org.kuali.hr.time.authorization.DepartmentalRule;
31 import org.kuali.hr.time.calendar.Calendar;
32 import org.kuali.hr.time.department.Department;
33 import org.kuali.hr.time.earncode.EarnCode;
34 import org.kuali.hr.time.earngroup.EarnGroup;
35 import org.kuali.hr.time.earngroup.EarnGroupDefinition;
36 import org.kuali.hr.time.paytype.PayType;
37 import org.kuali.hr.time.salgroup.SalGroup;
38 import org.kuali.hr.time.service.base.TkServiceLocator;
39 import org.kuali.hr.time.task.Task;
40 import org.kuali.hr.time.workarea.WorkArea;
41 import org.kuali.kfs.coa.businessobject.Chart;
42 import org.kuali.rice.kim.api.identity.Person;
43 import org.kuali.rice.kim.api.services.KimApiServiceLocator;
44 import org.kuali.rice.krad.service.KRADServiceLocator;
45
46
47
48
49 public class ValidationUtils {
50
51
52
53
54
55
56
57
58
59 public static boolean validateWorkAreaDeptWildcarding(DepartmentalRule dr) {
60 boolean ret = true;
61
62 if (StringUtils.equals(dr.getDept(), TkConstants.WILDCARD_CHARACTER)) {
63 ret = dr.getWorkArea().equals(TkConstants.WILDCARD_LONG);
64 }
65
66 return ret;
67 }
68
69
70
71
72 public static boolean validateWorkArea(Long workArea) {
73 return validateWorkArea(workArea, null);
74 }
75
76
77
78
79 public static boolean validateDepartment(String department) {
80 return validateDepartment(department, null);
81 }
82
83
84
85
86 public static boolean validateAccrualCategory(String accrualCategory) {
87 return validateAccrualCategory(accrualCategory, null);
88 }
89
90
91 public static boolean validateSalGroup(String salGroup, Date asOfDate) {
92 boolean valid = false;
93
94 if (StringUtils.equals(salGroup, TkConstants.WILDCARD_CHARACTER)) {
95 valid = true;
96 } else if (asOfDate != null) {
97 SalGroup sg = TkServiceLocator.getSalGroupService().getSalGroup(salGroup, asOfDate);
98 valid = (sg != null);
99 } else {
100 int count = TkServiceLocator.getSalGroupService().getSalGroupCount(salGroup);
101 valid = (count > 0);
102 }
103
104 return valid;
105 }
106
107 public static boolean validateEarnCode(String earnCode, Date asOfDate) {
108 boolean valid = false;
109
110 if (asOfDate != null) {
111 EarnCode ec = TkServiceLocator.getEarnCodeService().getEarnCode(earnCode, asOfDate);
112 valid = (ec != null);
113 } else {
114 int count = TkServiceLocator.getEarnCodeService().getEarnCodeCount(earnCode);
115 valid = (count > 0);
116 }
117
118 return valid;
119 }
120
121 public static boolean validateEarnCodeOfAccrualCategory(String earnCode, String accrualCategory, String principalId, Date asOfDate) {
122 boolean valid = false;
123
124 return valid;
125 }
126
127 public static boolean validateAccCategory(String accrualCategory, Date asOfDate) {
128 boolean valid = false;
129
130 if (asOfDate != null) {
131 AccrualCategory ac = TkServiceLocator.getAccrualCategoryService().getAccrualCategory(accrualCategory, asOfDate);
132 valid = (ac != null);
133 } else {
134 Map<String, String> fieldValues = new HashMap<String, String>();
135 fieldValues.put("accrualCategory", accrualCategory);
136 int matches = KRADServiceLocator.getBusinessObjectService().countMatching(AccrualCategory.class, fieldValues);
137
138 valid = matches > 0;
139 }
140
141 return valid;
142 }
143
144 public static boolean validateLocation(String location, Date asOfDate) {
145 boolean valid = false;
146
147 if (asOfDate != null) {
148 Location l = TkServiceLocator.getLocationService().getLocation(location, asOfDate);
149 valid = (l != null);
150 } else {
151 int count = TkServiceLocator.getLocationService().getLocationCount(location);
152 valid = (count > 0);
153 }
154
155 return valid;
156 }
157
158 public static boolean validatePayType(String payType, Date asOfDate) {
159 boolean valid = false;
160
161 if (asOfDate != null) {
162 PayType pt = TkServiceLocator.getPayTypeService().getPayType(payType, asOfDate);
163 valid = (pt != null);
164 } else {
165 int count = TkServiceLocator.getPayTypeService().getPayTypeCount(payType);
166 valid = (count > 0);
167 }
168
169 return valid;
170 }
171
172
173 public static boolean validatePayGrade(String payGrade, Date asOfDate) {
174 boolean valid = false;
175
176 if (asOfDate != null) {
177 PayGrade pg = TkServiceLocator.getPayGradeService().getPayGrade(payGrade, asOfDate);
178 valid = (pg != null);
179 } else {
180 int count = TkServiceLocator.getPayGradeService().getPayGradeCount(payGrade);
181 valid = (count > 0);
182 }
183
184 return valid;
185 }
186
187
188
189
190
191
192
193
194 public static boolean validateEarnCode(String earnCode, boolean otEarnCode, Date asOfDate) {
195 boolean valid = false;
196
197 if (asOfDate != null) {
198 EarnCode ec = TkServiceLocator.getEarnCodeService().getEarnCode(earnCode, asOfDate);
199 valid = (ec != null) && (otEarnCode ? ec.getOvtEarnCode().booleanValue() : true);
200 }
201
202 return valid;
203 }
204
205
206
207
208
209 public static boolean validateDepartment(String department, Date asOfDate) {
210 boolean valid = false;
211
212 if (StringUtils.isEmpty(department)) {
213
214 } else if (asOfDate != null) {
215 Department d = TkServiceLocator.getDepartmentService().getDepartment(department, asOfDate);
216 valid = (d != null);
217 } else {
218 int count = TkServiceLocator.getDepartmentService().getDepartmentCount(department);
219 valid = (count > 0);
220 }
221
222 return valid;
223 }
224
225 public static boolean validateChart(String chart) {
226 boolean valid = false;
227
228 if (!StringUtils.isEmpty(chart)) {
229 Object o = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(Chart.class, chart);
230 valid = (o instanceof Chart);
231 }
232
233 return valid;
234 }
235
236
237
238
239
240 public static boolean validateWorkArea(Long workArea, Date asOfDate) {
241 return ValidationUtils.validateWorkArea(workArea, null, asOfDate);
242 }
243
244 public static boolean validateWorkArea(Long workArea, String dept, Date asOfDate) {
245 boolean valid = false;
246
247 if (workArea == null) {
248 valid = false;
249 } else if (workArea.equals(TkConstants.WILDCARD_LONG)) {
250 valid = true;
251 } else if (asOfDate != null) {
252 WorkArea wa = TkServiceLocator.getWorkAreaService().getWorkArea(workArea, asOfDate);
253 if (wa != null && dept != null) {
254 valid = StringUtils.equalsIgnoreCase(dept, wa.getDept());
255 } else {
256 valid = (wa != null);
257 }
258 } else {
259
260 }
261
262 return valid;
263 }
264
265
266
267
268 public static boolean validateAccrualCategory(String accrualCategory, Date asOfDate) {
269 boolean valid = false;
270
271 if (StringUtils.equals(accrualCategory, TkConstants.WILDCARD_CHARACTER)) {
272 valid = true;
273 } else if (asOfDate != null) {
274 AccrualCategory ac = TkServiceLocator.getAccrualCategoryService().getAccrualCategory(accrualCategory, asOfDate);
275 valid = (ac != null);
276 }
277
278 return valid;
279 }
280
281
282
283
284
285 public static boolean validatePrincipalId(String principalId) {
286 boolean valid = false;
287 if (principalId != null) {
288 Person p = KimApiServiceLocator.getPersonService().getPerson(principalId);
289 valid = (p != null);
290 }
291 return valid;
292 }
293
294
295
296
297
298
299
300 public static boolean validateTask(Long task, Date asOfDate) {
301 boolean valid = false;
302
303 if (task != null && asOfDate != null) {
304 Task t = TkServiceLocator.getTaskService().getTask(task, asOfDate);
305 valid = (t != null);
306 } else if (task != null) {
307 int count = TkServiceLocator.getTaskService().getTaskCount(task);
308 valid = (count > 0);
309 }
310
311 return valid;
312 }
313
314
315
316
317
318
319
320 public static boolean validateEarnGroup(String earnGroup, Date asOfDate) {
321 boolean valid = false;
322
323 if (earnGroup != null && asOfDate != null) {
324 EarnGroup eg = TkServiceLocator.getEarnGroupService().getEarnGroup(earnGroup, asOfDate);
325 valid = (eg != null);
326 } else if (earnGroup != null) {
327 int count = TkServiceLocator.getEarnGroupService().getEarnGroupCount(earnGroup);
328 valid = (count > 0);
329 }
330
331 return valid;
332 }
333
334
335
336
337
338
339 public static boolean earnGroupHasOvertimeEarnCodes(String earnGroup, Date asOfDate) {
340 if (earnGroup != null && asOfDate != null) {
341 EarnGroup eg = TkServiceLocator.getEarnGroupService().getEarnGroup(earnGroup, asOfDate);
342 if(eg != null) {
343 for(EarnGroupDefinition egd : eg.getEarnGroups()) {
344 if(egd.getEarnCode() != null) {
345 EarnCode ec = TkServiceLocator.getEarnCodeService().getEarnCode(egd.getEarnCode(), asOfDate);
346 if(ec != null && ec.getOvtEarnCode()) {
347 return true;
348 }
349 }
350 }
351 }
352 }
353
354 return false;
355 }
356
357
358
359
360
361 public static boolean validateCalendar(String calendarName) {
362 Map<String, String> fieldValues = new HashMap<String, String>();
363 fieldValues.put("calendarName", calendarName);
364 int matches = KRADServiceLocator.getBusinessObjectService().countMatching(Calendar.class, fieldValues);
365
366 return matches > 0;
367 }
368
369 public static boolean duplicateDeptEarnCodeExists(EarnCodeSecurity deptEarnCode) {
370 boolean valid = false;
371 int count = TkServiceLocator.getEarnCodeSecurityService().getEarnCodeSecurityCount
372 (deptEarnCode.getDept(), deptEarnCode.getHrSalGroup(), deptEarnCode.getEarnCode(), deptEarnCode.isEmployee() ? "1" : "0",
373 deptEarnCode.isApprover() ? "1" : "0", deptEarnCode.getLocation(), deptEarnCode.getActive() ? "Y" : "N", deptEarnCode.getEffectiveDate(), null);
374 if(count == 1) {
375 valid = true;
376 count = TkServiceLocator.getEarnCodeSecurityService().getEarnCodeSecurityCount
377 (deptEarnCode.getDept(), deptEarnCode.getHrSalGroup(), deptEarnCode.getEarnCode(), deptEarnCode.isEmployee() ? "1" : "0",
378 deptEarnCode.isApprover() ? "1" : "0", deptEarnCode.getLocation(), deptEarnCode.getActive() ? "Y" : "N", deptEarnCode.getEffectiveDate(), deptEarnCode.getHrEarnCodeSecurityId());
379 if(count == 1) {
380 valid = false;
381 }
382 } else if(count > 1) {
383 valid = true;
384 }
385
386 return valid;
387 }
388
389 public static boolean duplicateTimeOffAccrual (TimeOffAccrual timeOffAccrual) {
390 boolean valid = false;
391 int count = TkServiceLocator.getTimeOffAccrualService().getTimeOffAccrualCount
392 (timeOffAccrual.getAccrualCategory(), timeOffAccrual.getEffectiveDate(), timeOffAccrual.getPrincipalId(), null);
393 if(count == 1) {
394 valid = true;
395 count = TkServiceLocator.getTimeOffAccrualService().getTimeOffAccrualCount
396 (timeOffAccrual.getAccrualCategory(), timeOffAccrual.getEffectiveDate(), timeOffAccrual.getPrincipalId(), timeOffAccrual.getLmAccrualId());
397 if(count == 1) {
398 valid = false;
399 }
400 } else if(count > 1) {
401 valid = true;
402 }
403 return valid;
404 }
405
406
407
408
409
410
411 public static boolean validateOneYearFutureDate(Date date){
412 java.util.Calendar startDate = java.util.Calendar.getInstance();
413 startDate.add(java.util.Calendar.DATE, -1);
414 startDate.set(java.util.Calendar.SECOND, 0);
415 startDate.set(java.util.Calendar.MINUTE, 0);
416 startDate.set(java.util.Calendar.HOUR_OF_DAY, 0);
417 java.util.Calendar endDate = java.util.Calendar.getInstance();
418 endDate.add(java.util.Calendar.YEAR, 1);
419 return date.compareTo(startDate.getTime()) * date.compareTo(endDate.getTime()) <= 0;
420 }
421
422
423
424
425
426
427 public static boolean validateOneYearFutureEffectiveDate(Date date){
428 java.util.Calendar startDate = java.util.Calendar.getInstance();
429 startDate.set(java.util.Calendar.MILLISECOND, 0);
430 startDate.set(java.util.Calendar.SECOND, 0);
431 startDate.set(java.util.Calendar.MINUTE, 0);
432 startDate.set(java.util.Calendar.HOUR_OF_DAY, 0);
433 startDate.add(java.util.Calendar.YEAR, 1);
434 return date.compareTo(startDate.getTime()) <= 0;
435 }
436
437
438
439
440
441
442 public static boolean validateFutureDate(Date date){
443 java.util.Calendar startDate = java.util.Calendar.getInstance();
444 startDate.add(java.util.Calendar.DATE, 0);
445 startDate.set(java.util.Calendar.SECOND, 0);
446 startDate.set(java.util.Calendar.MINUTE, 0);
447 startDate.set(java.util.Calendar.HOUR_OF_DAY, 0);
448 return date.compareTo(startDate.getTime()) > 0;
449 }
450
451
452
453
454 public static boolean validateCalendarByType(String calendarName, String calendarType) {
455 Map<String, String> fieldValues = new HashMap<String, String>();
456 fieldValues.put("calendarName", calendarName);
457 fieldValues.put("calendarTypes", calendarType);
458 int matches = KRADServiceLocator.getBusinessObjectService().countMatching(Calendar.class, fieldValues);
459
460 return matches > 0;
461 }
462
463 public static boolean validateRecordMethod(String recordMethod, String accrualCategory, Date asOfDate) {
464 boolean valid = false;
465 if (asOfDate != null) {
466 AccrualCategory ac = TkServiceLocator.getAccrualCategoryService().getAccrualCategory(accrualCategory, asOfDate);
467 if (ac != null
468 && ac.getUnitOfTime() != null) {
469 if (TkConstants.RECORD_METHOD.HOUR.equals(ac.getUnitOfTime())
470 && (TkConstants.RECORD_METHOD.HOUR.equals(recordMethod))
471 || TkConstants.RECORD_METHOD.TIME.equals(recordMethod)) {
472 valid = true;
473 } else {
474 valid = StringUtils.equalsIgnoreCase(ac.getUnitOfTime(), recordMethod);
475 }
476
477 }
478 }
479 return valid;
480 }
481
482 }