1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.ole.fp.document.validation.impl;
17  
18  import static org.kuali.ole.sys.OLEKeyConstants.ERROR_DOCUMENT_FUND_GROUP_SET_DOES_NOT_BALANCE;
19  
20  import java.util.ArrayList;
21  import java.util.Iterator;
22  import java.util.List;
23  
24  import org.kuali.ole.fp.document.TransferOfFundsDocument;
25  import org.kuali.ole.sys.businessobject.AccountingLine;
26  import org.kuali.ole.sys.context.SpringContext;
27  import org.kuali.ole.sys.document.AccountingDocument;
28  import org.kuali.ole.sys.document.validation.GenericValidation;
29  import org.kuali.ole.sys.document.validation.event.AttributedDocumentEvent;
30  import org.kuali.ole.sys.document.validation.impl.AccountingDocumentRuleBaseConstants;
31  import org.kuali.rice.core.api.parameter.ParameterEvaluator;
32  import org.kuali.rice.core.api.parameter.ParameterEvaluatorService;
33  import org.kuali.rice.core.api.util.type.KualiDecimal;
34  import org.kuali.rice.coreservice.framework.parameter.ParameterService;
35  import org.kuali.rice.krad.util.GlobalVariables;
36  
37  
38  
39  
40  public class TransferOfFundsFundGroupsBalancedValidation extends GenericValidation {
41      private AccountingDocument accountingDocumentForValidation;
42      private ParameterService parameterService;
43  
44      
45  
46  
47  
48  
49      public boolean validate(AttributedDocumentEvent event) {
50          return isFundGroupSetBalanceValid(accountingDocumentForValidation, TransferOfFundsDocument.class, AccountingDocumentRuleBaseConstants.APPLICATION_PARAMETER.FUND_GROUP_BALANCING_SET);
51      }
52      
53      
54  
55  
56  
57  
58  
59  
60  
61      protected boolean isFundGroupSetBalanceValid(AccountingDocument tranDoc, Class componentClass, String parameterName) {
62          
63          if (!getParameterService().parameterExists(componentClass, parameterName)) {
64              return true;
65          }
66  
67          List lines = new ArrayList();
68  
69          lines.addAll(tranDoc.getSourceAccountingLines());
70          lines.addAll(tranDoc.getTargetAccountingLines());
71  
72          KualiDecimal sourceLinesTotal = KualiDecimal.ZERO;
73          KualiDecimal targetLinesTotal = KualiDecimal.ZERO;
74  
75          
76          
77          for (Iterator i = lines.iterator(); i.hasNext();) {
78              AccountingLine line = (AccountingLine) i.next();
79              String fundGroupCode = line.getAccount().getSubFundGroup().getFundGroupCode();
80  
81              ParameterEvaluator evaluator = SpringContext.getBean(ParameterEvaluatorService.class).getParameterEvaluator(componentClass, parameterName, fundGroupCode);
82              if (evaluator.evaluationSucceeds()) {
83                  KualiDecimal glpeLineAmount = tranDoc.getGeneralLedgerPendingEntryAmountForDetail(line);
84                  if (line.isSourceAccountingLine()) {
85                      sourceLinesTotal = sourceLinesTotal.add(glpeLineAmount);
86                  }
87                  else {
88                      targetLinesTotal = targetLinesTotal.add(glpeLineAmount);
89                  }
90              }
91          }
92  
93          
94          boolean isValid = true;
95  
96          if (sourceLinesTotal.compareTo(targetLinesTotal) != 0) {
97              isValid = false;
98  
99              
100             ParameterEvaluator evaluator = SpringContext.getBean(ParameterEvaluatorService.class).getParameterEvaluator(componentClass, parameterName, "");
101             GlobalVariables.getMessageMap().putError("document.sourceAccountingLines", ERROR_DOCUMENT_FUND_GROUP_SET_DOES_NOT_BALANCE, new String[] { tranDoc.getSourceAccountingLinesSectionTitle(), tranDoc.getTargetAccountingLinesSectionTitle(), evaluator.getParameterValuesForMessage() });
102         }
103 
104         return isValid;
105     }
106 
107     
108 
109 
110 
111     public AccountingDocument getAccountingDocumentForValidation() {
112         return accountingDocumentForValidation;
113     }
114 
115     
116 
117 
118 
119     public void setAccountingDocumentForValidation(AccountingDocument accountingDocumentForValidation) {
120         this.accountingDocumentForValidation = accountingDocumentForValidation;
121     }
122 
123     
124 
125 
126 
127     public ParameterService getParameterService() {
128         return parameterService;
129     }
130 
131     
132 
133 
134 
135     public void setParameterService(ParameterService parameterService) {
136         this.parameterService = parameterService;
137     }
138 }