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 org.apache.commons.lang.StringUtils;
22 import org.kuali.kfs.coa.businessobject.Account;
23 import org.kuali.kfs.coa.service.AccountService;
24 import org.kuali.kfs.sys.KFSKeyConstants;
25 import org.kuali.kfs.sys.context.SpringContext;
26 import org.kuali.rice.core.api.config.property.ConfigurationService;
27 import org.kuali.rice.kns.document.MaintenanceDocument;
28 import org.kuali.rice.kns.rules.PromptBeforeValidationBase;
29 import org.kuali.rice.krad.document.Document;
30 import org.kuali.rice.krad.util.ObjectUtils;
31
32
33
34
35 public class MaintenancePreRulesBase extends PromptBeforeValidationBase {
36
37 protected ConfigurationService configService;
38 protected AccountService accountService;
39
40
41
42
43
44
45 public MaintenancePreRulesBase() {
46
47
48
49
50
51
52 setAccountService(SpringContext.getBean(AccountService.class));
53 setConfigService(SpringContext.getBean(ConfigurationService.class));
54 }
55
56 public void setAccountService(AccountService accountService) {
57 this.accountService = accountService;
58 }
59
60 public void setConfigService(ConfigurationService configService) {
61 this.configService = configService;
62 }
63
64
65
66
67
68
69
70 @Override
71 public boolean doPrompts(Document document) {
72 MaintenanceDocument maintenanceDocument = (MaintenanceDocument) document;
73 return doCustomPreRules(maintenanceDocument);
74 }
75
76
77
78
79
80
81
82 protected boolean doCustomPreRules(MaintenanceDocument maintenanceDocument) {
83 return true;
84 }
85
86
87
88
89
90
91
92
93
94
95
96 protected Account checkForContinuationAccount(String accName, String chart, String accountNumber, String accountName, boolean allowExpiredAccount) {
97 Account result = checkForContinuationAccount(accName, chart, accountNumber, accountName);
98 if (!allowExpiredAccount) {
99 if (result.isExpired()) {
100 return null;
101 }
102 }
103 return result;
104 }
105
106
107
108
109
110
111
112
113
114
115 protected Account checkForContinuationAccount(String accName, String chart, String accountNumber, String accountName) {
116 if (LOG.isDebugEnabled()) {
117 LOG.debug("entering checkForContinuationAccounts(" + accountNumber + ")");
118 }
119 if (StringUtils.isBlank(accountNumber) || StringUtils.isBlank(chart))
120 return null;
121
122 Account account = accountService.getByPrimaryId(chart, accountNumber);
123
124 if (ObjectUtils.isNotNull(account) && !account.isExpired()) {
125 return null;
126 }
127
128 boolean useContinuationAccount = true;
129
130 while (ObjectUtils.isNotNull(account) && account.isExpired() && useContinuationAccount) {
131 if (LOG.isDebugEnabled()) {
132 LOG.debug("Expired account: " + accountNumber);
133 }
134 String continuationAccountNumber = account.getContinuationAccountNumber();
135
136 useContinuationAccount = askOrAnalyzeYesNoQuestion("ContinuationAccount" + accName + accountNumber, buildContinuationConfirmationQuestion(accName, accountNumber, continuationAccountNumber));
137 if (useContinuationAccount) {
138 String continuationChart = account.getContinuationFinChrtOfAcctCd();
139 account = accountService.getByPrimaryId(continuationChart, continuationAccountNumber);
140
141 if (ObjectUtils.isNotNull(account)) {
142 accountNumber = account.getAccountNumber();
143 }
144
145 if (LOG.isDebugEnabled()) {
146 LOG.debug("Selected continuation account: " + account);
147 }
148 }
149 }
150 return account;
151
152 }
153
154
155
156
157
158
159
160
161
162
163 protected String buildContinuationConfirmationQuestion(String accName, String expiredAccount, String continuationAccount) {
164 String result = configService.getPropertyValueAsString(KFSKeyConstants.QUESTION_CONTINUATION_ACCOUNT_SELECTION);
165 result = StringUtils.replace(result, "{0}", accName);
166 result = StringUtils.replace(result, "{1}", expiredAccount);
167 result = StringUtils.replace(result, "{2}", continuationAccount);
168 return result;
169 }
170
171 public AccountService getAccountService() {
172 return accountService;
173 }
174
175 public ConfigurationService getConfigService() {
176 return configService;
177 }
178
179 }