1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.kuali.kfs.coa.document.validation.impl;
20
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.HashMap;
24 import java.util.List;
25 import java.util.Map;
26 import java.util.Properties;
27 import java.util.Set;
28
29 import org.apache.commons.lang.StringUtils;
30 import org.kuali.kfs.coa.businessobject.IndirectCostRecoveryExclusionAccount;
31 import org.kuali.kfs.coa.businessobject.ObjectCode;
32 import org.kuali.kfs.coa.businessobject.ObjectCodeGlobal;
33 import org.kuali.kfs.coa.businessobject.ObjectCodeGlobalDetail;
34 import org.kuali.kfs.coa.businessobject.ObjectLevel;
35 import org.kuali.kfs.coa.businessobject.OffsetDefinition;
36 import org.kuali.kfs.coa.service.ObjectCodeService;
37 import org.kuali.kfs.coa.service.ObjectLevelService;
38 import org.kuali.kfs.sys.KFSConstants;
39 import org.kuali.kfs.sys.KFSKeyConstants;
40 import org.kuali.kfs.sys.KFSPropertyConstants;
41 import org.kuali.kfs.sys.context.SpringContext;
42 import org.kuali.kfs.sys.service.UniversityDateService;
43 import org.kuali.rice.kns.document.MaintenanceDocument;
44 import org.kuali.rice.kns.maintenance.Maintainable;
45 import org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase;
46 import org.kuali.rice.krad.bo.BusinessObject;
47 import org.kuali.rice.krad.bo.GlobalBusinessObject;
48 import org.kuali.rice.krad.bo.PersistableBusinessObject;
49 import org.kuali.rice.krad.datadictionary.InactivationBlockingMetadata;
50 import org.kuali.rice.krad.service.BusinessObjectService;
51 import org.kuali.rice.krad.service.InactivationBlockingDetectionService;
52 import org.kuali.rice.krad.util.GlobalVariables;
53 import org.kuali.rice.krad.util.KRADConstants;
54 import org.kuali.rice.krad.util.ObjectUtils;
55 import org.kuali.rice.krad.util.UrlFactory;
56
57
58
59
60 public class ObjectCodeGlobalRule extends MaintenanceDocumentRuleBase {
61 protected ObjectCodeGlobal objectCodeGlobal;
62 protected ObjectCodeService objectCodeService;
63 protected ObjectLevelService objectLevelService;
64
65 public ObjectCodeGlobalRule() {
66 super();
67 setObjectCodeService(SpringContext.getBean(ObjectCodeService.class));
68 setObjectLevelService(SpringContext.getBean(ObjectLevelService.class));
69 }
70
71
72
73
74
75
76
77
78
79 @Override
80 public void setupConvenienceObjects() {
81
82
83
84 objectCodeGlobal = (ObjectCodeGlobal) super.getNewBo();
85
86
87 for (ObjectCodeGlobalDetail objectCodeGlobalDetail : objectCodeGlobal.getObjectCodeGlobalDetails()) {
88 objectCodeGlobalDetail.refreshNonUpdateableReferences();
89 }
90 }
91
92
93
94
95
96
97
98
99
100 @Override
101 protected boolean processCustomApproveDocumentBusinessRules(MaintenanceDocument document) {
102 boolean success = true;
103 setupConvenienceObjects();
104
105 success &= checkSimpleRulesAllLines();
106 return success;
107 }
108
109
110
111
112
113
114
115
116
117 @Override
118 protected boolean processCustomRouteDocumentBusinessRules(MaintenanceDocument document) {
119 boolean success = true;
120 setupConvenienceObjects();
121
122 success &= checkSimpleRulesAllLines();
123 return success;
124 }
125
126
127 @Override
128 protected boolean processInactivationBlockChecking(MaintenanceDocument maintenanceDocument) {
129 boolean success = true;
130 if (!objectCodeGlobal.isFinancialObjectActiveIndicator()) {
131
132 Collection<? extends ObjectCodeGlobalDetail> objectCodeGlobalDetails = objectCodeGlobal.getObjectCodeGlobalDetails();
133 int i = 0;
134 for ( ObjectCodeGlobalDetail objectCodeGlobalDetail : objectCodeGlobalDetails ) {
135
136 ObjectCode objectCode = objectCodeService.getByPrimaryId(objectCodeGlobalDetail.getUniversityFiscalYear(), objectCodeGlobalDetail.getChartOfAccountsCode(), objectCodeGlobal.getFinancialObjectCode());
137 if (objectCode != null) {
138 if (objectCode.isActive()) {
139
140 success &= processInactivationBlockChecking(maintenanceDocument.getNewMaintainableObject(), objectCode, i);
141 }
142 }
143 i++;
144 }
145 }
146 return success;
147 }
148
149 protected boolean processInactivationBlockChecking(Maintainable maintainable, ObjectCode objectCode, int index) {
150 Set<InactivationBlockingMetadata> inactivationBlockingMetadatas = ddService.getAllInactivationBlockingDefinitions(ObjectCode.class);
151 for (InactivationBlockingMetadata inactivationBlockingMetadata : inactivationBlockingMetadatas) {
152 String inactivationBlockingDetectionServiceBeanName = inactivationBlockingMetadata.getInactivationBlockingDetectionServiceBeanName();
153 InactivationBlockingDetectionService inactivationBlockingDetectionService;
154 if (StringUtils.isBlank(inactivationBlockingDetectionServiceBeanName)) {
155 inactivationBlockingDetectionService = SpringContext.getBean(InactivationBlockingDetectionService.class);
156 } else {
157 inactivationBlockingDetectionService = SpringContext.getBean(InactivationBlockingDetectionService.class, inactivationBlockingDetectionServiceBeanName);
158 }
159
160 Collection<BusinessObject> blockingBusinessObjects = inactivationBlockingDetectionService.listAllBlockerRecords(objectCode, inactivationBlockingMetadata);
161 blockingBusinessObjects = addAdditionalBlockingBusinessObjects(blockingBusinessObjects, objectCode);
162
163 if (blockingBusinessObjects != null && !blockingBusinessObjects.isEmpty()) {
164 final List<PersistableBusinessObject> persistingChanges = ((GlobalBusinessObject)maintainable.getBusinessObject()).generateGlobalChangesToPersist();
165 if (!isOnlyPersistingChangesInBlockingBusinessObjects(blockingBusinessObjects, persistingChanges)) {
166 putInactivationBlockingErrorOnPage(objectCode, inactivationBlockingMetadata, index);
167 return false;
168 }
169 }
170 }
171 return true;
172 }
173
174 protected void putInactivationBlockingErrorOnPage(ObjectCode objectCode, InactivationBlockingMetadata inactivationBlockingMetadata, int index) {
175 String objectCodeSummaryString = objectCode.getUniversityFiscalYear() + " - " + objectCode.getChartOfAccountsCode() + " - " + objectCode.getFinancialObjectCode();
176
177 Properties parameters = new Properties();
178 parameters.put(KRADConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, inactivationBlockingMetadata.getBlockedBusinessObjectClass().getName());
179 parameters.put(KRADConstants.DISPATCH_REQUEST_PARAMETER, KRADConstants.METHOD_DISPLAY_ALL_INACTIVATION_BLOCKERS);
180 parameters.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, objectCode.getUniversityFiscalYear().toString());
181 parameters.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, objectCode.getChartOfAccountsCode());
182 parameters.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, objectCode.getFinancialObjectCode());
183 String blockingUrl = UrlFactory.parameterizeUrl(KRADConstants.DISPLAY_ALL_INACTIVATION_BLOCKERS_ACTION, parameters);
184
185 String errorPropertyPath = KFSConstants.MAINTENANCE_NEW_MAINTAINABLE + KFSPropertyConstants.OBJECT_CODE_GLOBAL_DETAILS + "[" + index + "]." + KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE;
186
187
188 GlobalVariables.getMessageMap().putErrorWithoutFullErrorPath(errorPropertyPath, KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_OBJECTMAINT_INACTIVATION_BLOCKING, objectCodeSummaryString, blockingUrl);
189 }
190
191
192
193
194
195
196
197 protected boolean isOnlyPersistingChangesInBlockingBusinessObjects(Collection<BusinessObject> blockingBusinessObjects, List<PersistableBusinessObject> persistingChanges) {
198 for (BusinessObject bo : blockingBusinessObjects) {
199 if (bo instanceof ObjectCode) {
200 if (!isObjectCodeInPersistingChanges(persistingChanges, (ObjectCode)bo)) {
201 return false;
202 }
203 } else {
204 return false;
205 }
206 }
207 return true;
208 }
209
210
211
212
213
214
215
216 protected boolean isObjectCodeInPersistingChanges(List<PersistableBusinessObject> persistingChanges, ObjectCode objectCode) {
217 for (PersistableBusinessObject persistingObjectCodeAsObject : persistingChanges) {
218 if (isEqualObjectCode(objectCode, (ObjectCode)persistingObjectCodeAsObject)) {
219 return true;
220 }
221 }
222 return false;
223 }
224
225
226
227
228
229
230
231 protected boolean isEqualObjectCode(ObjectCode castor, ObjectCode pollux) {
232 return org.springframework.util.ObjectUtils.nullSafeEquals(castor.getUniversityFiscalYear(), pollux.getUniversityFiscalYear())
233 && org.springframework.util.ObjectUtils.nullSafeEquals(castor.getChartOfAccountsCode(), pollux.getChartOfAccountsCode())
234 && org.springframework.util.ObjectUtils.nullSafeEquals(castor.getFinancialObjectCode(), pollux.getFinancialObjectCode());
235 }
236
237
238
239
240
241
242
243 protected Collection<BusinessObject> addAdditionalBlockingBusinessObjects(Collection<BusinessObject> blockingBusinessObjects, ObjectCode objectCode) {
244 List<BusinessObject> additionalBlockingObjects = new ArrayList<BusinessObject>();
245 retrieveBlockingOffsetDefinitions(objectCode, additionalBlockingObjects);
246 retrieveBlockingIndirectCostRecoveryExclusionAccounts(objectCode, additionalBlockingObjects);
247 if (!additionalBlockingObjects.isEmpty()) {
248 additionalBlockingObjects.addAll(blockingBusinessObjects);
249 return additionalBlockingObjects;
250 }
251 return blockingBusinessObjects;
252 }
253
254
255
256
257
258
259 protected void retrieveBlockingOffsetDefinitions(ObjectCode objectCode, List<BusinessObject> additionalBlockingObjects) {
260 final BusinessObjectService businessObjectService = SpringContext.getBean(BusinessObjectService.class);
261
262 Map<String, Object> keys = new HashMap<String, Object>();
263 keys.put("universityFiscalYear", objectCode.getUniversityFiscalYear());
264 keys.put("chartOfAccountsCode", objectCode.getChartOfAccountsCode());
265 keys.put("financialObjectCode", objectCode.getFinancialObjectCode());
266
267 Collection<OffsetDefinition> offsetDefinitions = businessObjectService.findMatching(OffsetDefinition.class, keys);
268 if (offsetDefinitions != null && !offsetDefinitions.isEmpty()) {
269 additionalBlockingObjects.addAll(offsetDefinitions);
270 }
271 }
272
273
274
275
276
277
278 protected void retrieveBlockingIndirectCostRecoveryExclusionAccounts(ObjectCode objectCode, List<BusinessObject> additionalBlockingObjects) {
279 final UniversityDateService universityDateService = SpringContext.getBean(UniversityDateService.class);
280 if (objectCode.getUniversityFiscalYear() != null && objectCode.getUniversityFiscalYear().equals(universityDateService.getCurrentFiscalYear())) {
281 final BusinessObjectService businessObjectService = SpringContext.getBean(BusinessObjectService.class);
282
283 Map<String, Object> keys = new HashMap<String, Object>();
284 keys.put("financialObjectChartOfAccountCode", objectCode.getChartOfAccountsCode());
285 keys.put("financialObjectCode", objectCode.getFinancialObjectCode());
286
287 Collection<IndirectCostRecoveryExclusionAccount> icrExclusionAccounts = businessObjectService.findMatching(IndirectCostRecoveryExclusionAccount.class, keys);
288 if (icrExclusionAccounts != null && !icrExclusionAccounts.isEmpty()) {
289 additionalBlockingObjects.addAll(icrExclusionAccounts);
290 }
291 }
292 }
293
294
295
296
297
298
299
300
301
302 @Override
303 protected boolean processCustomSaveDocumentBusinessRules(MaintenanceDocument document) {
304 setupConvenienceObjects();
305
306 checkSimpleRulesAllLines();
307
308 return true;
309 }
310
311
312
313
314
315
316
317
318
319
320 @Override
321 public boolean processCustomAddCollectionLineBusinessRules(MaintenanceDocument document, String collectionName, PersistableBusinessObject bo) {
322 boolean success = true;
323 if (bo instanceof ObjectCodeGlobalDetail) {
324 ObjectCodeGlobalDetail detail = (ObjectCodeGlobalDetail) bo;
325 if (!checkEmptyValue(detail.getChartOfAccountsCode())) {
326
327 GlobalVariables.getMessageMap().putError("chartOfAccountsCode", KFSKeyConstants.ERROR_REQUIRED, "Chart of Accounts Code");
328 success &= false;
329 }
330 if (!checkEmptyValue(detail.getUniversityFiscalYear())) {
331
332 GlobalVariables.getMessageMap().putError("universityFiscalYear", KFSKeyConstants.ERROR_REQUIRED, "University Fiscal Year");
333 success &= false;
334 }
335 if (!checkUniqueIdentifiers(detail)) {
336
337 success &= false;
338 }
339
340 if (success) {
341 success &= checkObjectCodeDetails(detail);
342 }
343
344 }
345 return success;
346 }
347
348
349
350
351
352
353
354 protected boolean checkUniqueIdentifiers(ObjectCodeGlobalDetail dtl) {
355 boolean success = true;
356 return success;
357
358 }
359
360
361
362
363
364
365
366
367
368
369
370
371 public boolean checkObjectCodeDetails(ObjectCodeGlobalDetail dtl) {
372 boolean success = true;
373 int originalErrorCount = GlobalVariables.getMessageMap().getErrorCount();
374 getDictionaryValidationService().validateBusinessObject(dtl);
375 dtl.refreshNonUpdateableReferences();
376
377 success &= checkObjectLevelCode(objectCodeGlobal, dtl, 0, true);
378 success &= checkNextYearObjectCode(objectCodeGlobal, dtl, 0, true);
379 success &= checkReportsToObjectCode(objectCodeGlobal, dtl, 0, true);
380 success &= GlobalVariables.getMessageMap().getErrorCount() == originalErrorCount;
381
382 return success;
383 }
384
385
386
387
388
389
390
391
392 protected boolean checkReportsToObjectCode(ObjectCodeGlobal objectCodeGlobal, ObjectCodeGlobalDetail dtl, int lineNum, boolean add) {
393 boolean success = true;
394 String errorPath = KFSConstants.EMPTY_STRING;
395 if (checkEmptyValue(objectCodeGlobal.getReportsToFinancialObjectCode())) {
396
397 String reportsToObjectCode = objectCodeGlobal.getReportsToFinancialObjectCode();
398 String reportsToChartCode = dtl.getChartOfAccounts().getReportsToChartOfAccountsCode();
399 Integer fiscalYear = dtl.getUniversityFiscalYear();
400
401
402 ObjectCode objCode = objectCodeService.getByPrimaryId(fiscalYear, reportsToChartCode, reportsToObjectCode);
403 if (ObjectUtils.isNull(objCode)) {
404 success &= false;
405 String[] errorParameters = { reportsToObjectCode, reportsToChartCode, fiscalYear.toString() };
406 if (add) {
407 errorPath = KFSConstants.MAINTENANCE_ADD_PREFIX + KFSPropertyConstants.OBJECT_CODE_GLOBAL_DETAILS + "." + "chartOfAccountsCode";
408 putFieldError(errorPath, KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_OBJECTMAINT_INVALID_RPTS_TO_OBJ_CODE, errorParameters);
409 }
410 else {
411 errorPath = KFSPropertyConstants.OBJECT_CODE_GLOBAL_DETAILS + "[" + lineNum + "]." + "chartOfAccountsCode";
412 putFieldError(errorPath, KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_OBJECTMAINT_INVALID_RPTS_TO_OBJ_CODE, errorParameters);
413 }
414 }
415 return success;
416
417 }
418 else {
419 GlobalVariables.getMessageMap().putError("reportsToFinancialObjectCode", KFSKeyConstants.ERROR_REQUIRED, "Reports to Object Code");
420 success &= false;
421 }
422
423 return success;
424 }
425
426
427
428
429
430
431
432
433
434 protected boolean checkNextYearObjectCode(ObjectCodeGlobal objectCodeGlobal, ObjectCodeGlobalDetail dtl, int lineNum, boolean add) {
435 boolean success = true;
436 String errorPath = KFSConstants.EMPTY_STRING;
437
438 if (checkEmptyValue(objectCodeGlobal.getNextYearFinancialObjectCode())) {
439
440 ObjectCode objCode = objectCodeService.getByPrimaryId(dtl.getUniversityFiscalYear(), dtl.getChartOfAccountsCode(), objectCodeGlobal.getNextYearFinancialObjectCode());
441 if (ObjectUtils.isNull(objCode)) {
442 success &= false;
443 String[] errorParameters = { objectCodeGlobal.getNextYearFinancialObjectCode(), dtl.getChartOfAccountsCode(), dtl.getUniversityFiscalYear().toString() };
444 if (add) {
445 errorPath = KFSConstants.MAINTENANCE_ADD_PREFIX + KFSPropertyConstants.OBJECT_CODE_GLOBAL_DETAILS + "." + "chartOfAccountsCode";
446 putFieldError(errorPath, KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_OBJECTMAINT_INVALID_NEXT_YEAR_OBJ_CODE, errorParameters);
447 }
448 else {
449 errorPath = KFSPropertyConstants.OBJECT_CODE_GLOBAL_DETAILS + "[" + lineNum + "]." + "chartOfAccountsCode";
450 putFieldError(errorPath, KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_OBJECTMAINT_INVALID_NEXT_YEAR_OBJ_CODE, errorParameters);
451 }
452 }
453 return success;
454 }
455
456 return success;
457 }
458
459
460
461
462
463
464
465
466 protected boolean checkObjectLevelCode(ObjectCodeGlobal objectCodeGlobal, ObjectCodeGlobalDetail dtl, int lineNum, boolean add) {
467 boolean success = true;
468 String errorPath = KFSConstants.EMPTY_STRING;
469
470 if (checkEmptyValue(objectCodeGlobal.getFinancialObjectLevelCode())) {
471 ObjectLevel objLevel = objectLevelService.getByPrimaryId(dtl.getChartOfAccountsCode(), objectCodeGlobal.getFinancialObjectLevelCode());
472 if (ObjectUtils.isNull(objLevel)) {
473 success &= false;
474 String[] errorParameters = { objectCodeGlobal.getFinancialObjectLevelCode(), dtl.getChartOfAccountsCode() };
475 if (add) {
476 errorPath = KFSConstants.MAINTENANCE_ADD_PREFIX + KFSPropertyConstants.OBJECT_CODE_GLOBAL_DETAILS + "." + "chartOfAccountsCode";
477 putFieldError(errorPath, KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_OBJECTMAINT_INVALID_OBJ_LEVEL, errorParameters);
478 }
479 else {
480 errorPath = KFSPropertyConstants.OBJECT_CODE_GLOBAL_DETAILS + "[" + lineNum + "]." + "chartOfAccountsCode";
481 putFieldError(errorPath, KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_OBJECTMAINT_INVALID_OBJ_LEVEL, errorParameters);
482 }
483 }
484 return success;
485
486 }
487 else {
488 GlobalVariables.getMessageMap().putError("financialObjectLevelCode", KFSKeyConstants.ERROR_REQUIRED, "Object Level Code");
489 success &= false;
490 }
491 return success;
492 }
493
494
495
496
497
498
499
500
501
502
503
504
505
506 protected boolean checkSimpleRulesAllLines() {
507 boolean success = true;
508
509 if (!checkForObjectCodeGlobalDetails(objectCodeGlobal.getObjectCodeGlobalDetails())) {
510 success = false;
511 }
512 else {
513
514 success &= checkFiscalYearAllLines(objectCodeGlobal);
515
516
517 success &= checkChartAllLines(objectCodeGlobal);
518
519
520 success &= checkObjectLevelCodeAllLines(objectCodeGlobal);
521
522
523 success &= checkNextYearObjectCodeAllLines(objectCodeGlobal);
524
525
526 success &= checkReportsToObjectCodeAllLines(objectCodeGlobal);
527
528 }
529 return success;
530 }
531
532
533
534
535
536
537
538 protected boolean checkForObjectCodeGlobalDetails(Collection<? extends PersistableBusinessObject> objectCodeGlobalDetails) {
539 if (objectCodeGlobalDetails == null || objectCodeGlobalDetails.size() == 0) {
540 putFieldError(KFSConstants.MAINTENANCE_ADD_PREFIX + KFSPropertyConstants.OBJECT_CODE_GLOBAL_DETAILS + "." + KFSPropertyConstants.FINANCIAL_DOCUMENT_TYPE_CODE, KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_OBJECTMAINT_NO_CHART_FISCAL_YEAR);
541 return false;
542 }
543 return true;
544 }
545
546
547
548
549
550
551
552 protected boolean checkFiscalYearAllLines(ObjectCodeGlobal objectCodeGlobal) {
553 boolean success = true;
554 int i = 0;
555 for (ObjectCodeGlobalDetail objectCodeGlobalDetail : objectCodeGlobal.getObjectCodeGlobalDetails()) {
556
557
558 success &= checkFiscalYear(objectCodeGlobal, objectCodeGlobalDetail, i, false);
559
560
561 i++;
562 }
563
564 return success;
565 }
566
567
568
569
570
571
572
573
574 protected boolean checkChartAllLines(ObjectCodeGlobal ocChangeDocument) {
575 boolean success = true;
576 int i = 0;
577 for (ObjectCodeGlobalDetail objectCodeGlobalDetail : ocChangeDocument.getObjectCodeGlobalDetails()) {
578
579
580 success &= checkChartOnObjCodeDetails(ocChangeDocument, objectCodeGlobalDetail, i, false);
581
582 i++;
583 }
584
585 return success;
586 }
587
588
589
590
591
592
593
594
595
596 protected boolean checkReportsToObjectCodeAllLines(ObjectCodeGlobal objectCodeGlobalDocument2) {
597 boolean success = true;
598 int i = 0;
599 for (ObjectCodeGlobalDetail objectCodeGlobalDetail : objectCodeGlobal.getObjectCodeGlobalDetails()) {
600
601
602 success &= checkReportsToObjectCode(objectCodeGlobal, objectCodeGlobalDetail, i, false);
603
604
605 i++;
606 }
607
608 return success;
609 }
610
611
612
613
614
615
616
617
618 protected boolean checkNextYearObjectCodeAllLines(ObjectCodeGlobal objectCodeGlobalDocument2) {
619 boolean success = true;
620 int i = 0;
621 for (ObjectCodeGlobalDetail objectCodeGlobalDetail : objectCodeGlobal.getObjectCodeGlobalDetails()) {
622
623
624 success &= checkNextYearObjectCode(objectCodeGlobal, objectCodeGlobalDetail, i, false);
625
626
627 i++;
628 }
629
630 return success;
631 }
632
633
634
635
636
637
638
639
640 protected boolean checkObjectLevelCodeAllLines(ObjectCodeGlobal objectCodeGlobalDocument2) {
641 boolean success = true;
642 int i = 0;
643 for (ObjectCodeGlobalDetail objectCodeGlobalDetail : objectCodeGlobal.getObjectCodeGlobalDetails()) {
644
645
646 success &= checkObjectLevelCode(objectCodeGlobal, objectCodeGlobalDetail, i, false);
647
648
649 i++;
650 }
651
652 return success;
653 }
654
655
656
657
658
659
660
661
662
663
664 protected boolean checkFiscalYear(ObjectCodeGlobal objectCodeGlobal, ObjectCodeGlobalDetail objectCodeGlobalDetail, int lineNum, boolean add) {
665 boolean success = true;
666 String errorPath = KFSConstants.EMPTY_STRING;
667
668 if (objectCodeGlobalDetail.getUniversityFiscalYear() == null) {
669 if (add) {
670 errorPath = KFSConstants.MAINTENANCE_ADD_PREFIX + KFSPropertyConstants.OBJECT_CODE_GLOBAL_DETAILS + "." + "universityFiscalYear";
671 putFieldError(errorPath, KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_OBJECTMAINT_FISCAL_YEAR_MUST_EXIST);
672 }
673 else {
674 errorPath = KFSPropertyConstants.OBJECT_CODE_GLOBAL_DETAILS + "[" + lineNum + "]." + "universityFiscalYear";
675 putFieldError(errorPath, KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_OBJECTMAINT_FISCAL_YEAR_MUST_EXIST);
676 }
677 success &= false;
678 return success;
679 }
680
681 return success;
682 }
683
684
685
686
687
688
689
690
691
692
693 protected boolean checkChartOnObjCodeDetails(ObjectCodeGlobal objectCodeGlobal, ObjectCodeGlobalDetail objectCodeGlobalDetail, int lineNum, boolean add) {
694 boolean success = true;
695 String errorPath = KFSConstants.EMPTY_STRING;
696
697 if (objectCodeGlobalDetail.getChartOfAccounts() == null) {
698 if (add) {
699 errorPath = KFSConstants.MAINTENANCE_ADD_PREFIX + KFSPropertyConstants.OBJECT_CODE_GLOBAL_DETAILS + "." + "chartOfAccountsCode";
700 putFieldError(errorPath, KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_OBJECTMAINT_CHART_MUST_EXIST);
701 }
702 else {
703 errorPath = KFSPropertyConstants.OBJECT_CODE_GLOBAL_DETAILS + "[" + lineNum + "]." + "chartOfAccountsCode";
704 putFieldError(errorPath, KFSKeyConstants.ERROR_DOCUMENT_GLOBAL_OBJECTMAINT_CHART_MUST_EXIST);
705 }
706 success &= false;
707 return success;
708 }
709
710 return success;
711 }
712
713 protected void setObjectCodeService(ObjectCodeService objectCodeService) {
714 this.objectCodeService = objectCodeService;
715
716 }
717
718
719 protected void setObjectLevelService(ObjectLevelService objectLevelService) {
720 this.objectLevelService = objectLevelService;
721
722 }
723 }