1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.kuali.kfs.module.ld.document.validation.impl;
20
21 import java.util.Iterator;
22 import java.util.List;
23
24 import org.kuali.kfs.module.ld.LaborKeyConstants;
25 import org.kuali.kfs.module.ld.businessobject.ExpenseTransferAccountingLine;
26 import org.kuali.kfs.module.ld.document.LaborExpenseTransferDocumentBase;
27 import org.kuali.kfs.sys.KFSPropertyConstants;
28 import org.kuali.kfs.sys.businessobject.AccountingLine;
29 import org.kuali.kfs.sys.document.validation.GenericValidation;
30 import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent;
31 import org.kuali.rice.core.api.util.type.KualiDecimal;
32 import org.kuali.rice.krad.document.Document;
33 import org.kuali.rice.krad.util.GlobalVariables;
34
35
36
37
38
39
40
41
42 public class LaborExpenseTransferAccountLineTotalsMatchValidation extends GenericValidation {
43 private Document documentForValidation;
44
45
46
47
48
49 public boolean validate(AttributedDocumentEvent event) {
50 boolean result = true;
51
52 Document documentForValidation = getDocumentForValidation();
53
54 LaborExpenseTransferDocumentBase expenseTransferDocument = (LaborExpenseTransferDocumentBase) documentForValidation;
55
56 List sourceLines = expenseTransferDocument.getSourceAccountingLines();
57 List targetLines = expenseTransferDocument.getTargetAccountingLines();
58
59
60 if (!isAccountingLineTotalsMatch(sourceLines, targetLines)) {
61 GlobalVariables.getMessageMap().putError(KFSPropertyConstants.SOURCE_ACCOUNTING_LINES, LaborKeyConstants.ACCOUNTING_LINE_TOTALS_MISMATCH_ERROR);
62 return false;
63 }
64
65 return result;
66 }
67
68
69
70
71
72
73
74
75
76 public boolean isAccountingLineTotalsMatch(List sourceLines, List targetLines) {
77 boolean isValid = true;
78
79 AccountingLine line = null;
80
81
82 KualiDecimal sourceLinesAmount = KualiDecimal.ZERO;
83 KualiDecimal targetLinesAmount = KualiDecimal.ZERO;
84
85
86 for (Iterator i = sourceLines.iterator(); i.hasNext();) {
87 line = (ExpenseTransferAccountingLine) i.next();
88 sourceLinesAmount = sourceLinesAmount.add(line.getAmount());
89 }
90
91
92 for (Iterator i = targetLines.iterator(); i.hasNext();) {
93 line = (ExpenseTransferAccountingLine) i.next();
94 targetLinesAmount = targetLinesAmount.add(line.getAmount());
95 }
96
97
98 if (sourceLinesAmount.compareTo(targetLinesAmount) != 0) {
99 isValid = false;
100 }
101
102 return isValid;
103 }
104
105
106
107
108
109 public Document getDocumentForValidation() {
110 return documentForValidation;
111 }
112
113
114
115
116
117 public void setDocumentForValidation(Document documentForValidation) {
118 this.documentForValidation = documentForValidation;
119 }
120 }