1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.kuali.kfs.fp.document.validation.impl;
20
21 import java.util.ArrayList;
22 import java.util.Arrays;
23 import java.util.List;
24
25 import org.apache.commons.lang.StringUtils;
26 import org.kuali.kfs.fp.businessobject.CapitalAccountingLines;
27 import org.kuali.kfs.fp.document.CapitalAccountingLinesDocumentBase;
28 import org.kuali.kfs.integration.cam.businessobject.Asset;
29 import org.kuali.kfs.sys.KFSConstants;
30 import org.kuali.kfs.sys.KFSKeyConstants;
31 import org.kuali.kfs.sys.KFSParameterKeyConstants;
32 import org.kuali.kfs.sys.businessobject.AccountingLine;
33 import org.kuali.kfs.sys.businessobject.SourceAccountingLine;
34 import org.kuali.kfs.sys.context.SpringContext;
35 import org.kuali.kfs.sys.document.AccountingDocument;
36 import org.kuali.rice.core.api.config.property.ConfigurationService;
37 import org.kuali.rice.coreservice.framework.parameter.ParameterService;
38 import org.kuali.rice.kns.rules.PromptBeforeValidationBase;
39 import org.kuali.rice.krad.document.Document;
40 import org.kuali.rice.krad.service.KRADServiceLocatorWeb;
41 import org.kuali.rice.krad.util.ObjectUtils;
42
43
44
45
46 public class CapitalAccountingLinesPreRules extends PromptBeforeValidationBase {
47
48
49
50
51 public CapitalAccountingLinesPreRules() {
52 super();
53 }
54
55
56
57
58
59
60 @Override
61 public boolean doPrompts(Document document) {
62 AccountingDocument accountingDocument = (AccountingDocument) document;
63 List<AccountingLine> accountingLines = accountingDocument.getSourceAccountingLines();
64 accountingLines.addAll(accountingDocument.getTargetAccountingLines());
65
66 CapitalAccountingLinesDocumentBase caldb = (CapitalAccountingLinesDocumentBase) document;
67 List<CapitalAccountingLines> capitalAccountingLines = caldb.getCapitalAccountingLines();
68
69 if (hasDifferentObjectSubTypes(capitalAccountingLines, accountingLines)) {
70 if (!isOkHavingDifferentObjectSubTypes()) {
71 event.setActionForwardName(KFSConstants.MAPPING_BASIC);
72 return false;
73 }
74 }
75
76 return true;
77 }
78
79
80
81
82
83
84 public boolean hasDifferentObjectSubTypes(List<CapitalAccountingLines> capitalAccountingLines, List<AccountingLine> accountingLines) {
85 List<String> subTypes = new ArrayList<String>();
86 List<String> objectSubTypeList = new ArrayList<String>();
87 List<String> validObjectSubTypes = new ArrayList<String>();
88
89 subTypes = new ArrayList<String>( SpringContext.getBean(ParameterService.class).getParameterValuesAsString(Asset.class, KFSParameterKeyConstants.CamParameterConstants.OBJECT_SUB_TYPE_GROUPS) );
90
91 for (String subType : subTypes) {
92 validObjectSubTypes = Arrays.asList(StringUtils.split(subType, ","));
93 }
94
95 for (CapitalAccountingLines capitalAccountLine : capitalAccountingLines) {
96 if (capitalAccountLine.isSelectLine() && capitalAccountLine.isAmountDistributed()) {
97 AccountingLine matchAccountingLine = findAccountingLine(accountingLines, capitalAccountLine);
98 if (ObjectUtils.isNotNull(matchAccountingLine)) {
99 matchAccountingLine.refreshReferenceObject("objectCode");
100 }
101 if (validObjectSubTypes.contains(matchAccountingLine.getObjectCode().getFinancialObjectSubTypeCode())) {
102 if (!objectSubTypeList.contains(matchAccountingLine.getObjectCode().getFinancialObjectSubTypeCode())) {
103
104 return true;
105 }
106 objectSubTypeList.add(matchAccountingLine.getObjectCode().getFinancialObjectSubTypeCode());
107 }
108 }
109 }
110
111 if (objectSubTypeList.isEmpty()) {
112 return false;
113 }
114
115 return false;
116
117 }
118
119
120
121
122
123
124 protected AccountingLine findAccountingLine(List<AccountingLine> accountingLines, CapitalAccountingLines capitalAccountingLine) {
125 AccountingLine accountingLine = null;
126
127 for (AccountingLine line : accountingLines) {
128 if (capitalAccountingLine.getChartOfAccountsCode().equals(line.getChartOfAccountsCode()) &&
129 capitalAccountingLine.getAccountNumber().equals(line.getAccountNumber()) &&
130 capitalAccountingLine.getFinancialObjectCode().equals(line.getFinancialObjectCode()) &&
131 capitalAccountingLine.getLineType().equalsIgnoreCase(line instanceof SourceAccountingLine ? KFSConstants.SOURCE : KFSConstants.TARGET)) {
132 return line;
133 }
134 }
135
136 return accountingLine;
137 }
138
139 protected boolean isOkHavingDifferentObjectSubTypes() {
140 String parameterDetail = "(module:" + KRADServiceLocatorWeb.getKualiModuleService().getNamespaceCode(Asset.class) + "/component:" + Asset.class.getSimpleName() + ")";
141 ConfigurationService kualiConfiguration = SpringContext.getBean(ConfigurationService.class);
142
143 String continueQuestion = kualiConfiguration.getPropertyValueAsString(KFSKeyConstants.CONTINUE_QUESTION);
144 String warningMessage = kualiConfiguration.getPropertyValueAsString(KFSKeyConstants.WARNING_NOT_SAME_OBJECT_SUB_TYPES) + " " + KFSParameterKeyConstants.CamParameterConstants.OBJECT_SUB_TYPE_GROUPS + " " + parameterDetail + ". " + continueQuestion;
145 return super.askOrAnalyzeYesNoQuestion(KFSConstants.FinancialDocumentTypeCodes.ASSET_DIFFERENT_OBJECT_SUB_TYPE_CONFIRMATION_QUESTION, warningMessage);
146 }
147
148 protected ParameterService getParameterService() {
149 return SpringContext.getBean(ParameterService.class);
150 }
151 }