1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.ole.gl.web.struts;
17
18 import java.io.IOException;
19 import java.util.ArrayList;
20 import java.util.Collection;
21 import java.util.HashMap;
22 import java.util.Iterator;
23 import java.util.List;
24 import java.util.Map;
25
26 import javax.servlet.ServletException;
27 import javax.servlet.http.HttpServletRequest;
28 import javax.servlet.http.HttpServletResponse;
29
30 import org.apache.commons.lang.StringUtils;
31 import org.apache.struts.action.ActionForm;
32 import org.apache.struts.action.ActionForward;
33 import org.apache.struts.action.ActionMapping;
34 import org.kuali.ole.coa.businessobject.Account;
35 import org.kuali.ole.coa.businessobject.Chart;
36 import org.kuali.ole.coa.businessobject.ObjectCode;
37 import org.kuali.ole.gl.Constant;
38 import org.kuali.ole.gl.ObjectHelper;
39 import org.kuali.ole.gl.businessobject.AccountBalance;
40 import org.kuali.ole.gl.businessobject.lookup.AccountBalanceByConsolidationLookupableHelperServiceImpl;
41 import org.kuali.ole.sys.OLEConstants;
42 import org.kuali.ole.sys.OLEKeyConstants;
43 import org.kuali.ole.sys.OLEPropertyConstants;
44 import org.kuali.ole.sys.context.SpringContext;
45 import org.kuali.rice.core.api.config.property.ConfigurationService;
46 import org.kuali.rice.kns.lookup.Lookupable;
47 import org.kuali.rice.kns.service.DataDictionaryService;
48 import org.kuali.rice.kns.web.struts.action.KualiAction;
49 import org.kuali.rice.kns.web.struts.form.LookupForm;
50 import org.kuali.rice.kns.web.ui.Field;
51 import org.kuali.rice.kns.web.ui.ResultRow;
52 import org.kuali.rice.kns.web.ui.Row;
53 import org.kuali.rice.krad.lookup.CollectionIncomplete;
54 import org.kuali.rice.krad.service.BusinessObjectService;
55 import org.kuali.rice.krad.util.GlobalVariables;
56 import org.kuali.rice.krad.util.KRADConstants;
57
58
59
60
61
62 public class BalanceInquiryAction extends KualiAction {
63 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(BalanceInquiryAction.class);
64
65 private static final String TOTALS_TABLE_KEY = "totalsTable";
66
67 private ConfigurationService kualiConfigurationService;
68 protected DataDictionaryService dataDictionaryService;
69 private String[] totalTitles;
70
71 public BalanceInquiryAction() {
72 super();
73 kualiConfigurationService = SpringContext.getBean(ConfigurationService.class);
74 dataDictionaryService = SpringContext.getBean(DataDictionaryService.class);
75 }
76
77
78
79
80 private void setTotalTitles() {
81 totalTitles = new String[7];
82
83 totalTitles[0] = kualiConfigurationService.getPropertyValueAsString(OLEKeyConstants.AccountBalanceService.INCOME);
84 totalTitles[1] = kualiConfigurationService.getPropertyValueAsString(OLEKeyConstants.AccountBalanceService.INCOME_FROM_TRANSFERS);
85 totalTitles[2] = kualiConfigurationService.getPropertyValueAsString(OLEKeyConstants.AccountBalanceService.INCOME_TOTAL);
86 totalTitles[3] = kualiConfigurationService.getPropertyValueAsString(OLEKeyConstants.AccountBalanceService.EXPENSE);
87 totalTitles[4] = kualiConfigurationService.getPropertyValueAsString(OLEKeyConstants.AccountBalanceService.EXPENSE_FROM_TRANSFERS);
88 totalTitles[5] = kualiConfigurationService.getPropertyValueAsString(OLEKeyConstants.AccountBalanceService.EXPENSE_TOTAL);
89 totalTitles[6] = kualiConfigurationService.getPropertyValueAsString(OLEKeyConstants.AccountBalanceService.TOTAL);
90
91 }
92
93
94
95
96
97
98 private String[] getTotalTitles() {
99 if (null == totalTitles) {
100 setTotalTitles();
101 }
102
103 return totalTitles;
104 }
105
106 public ActionForward start(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
107 return mapping.findForward(OLEConstants.MAPPING_BASIC);
108 }
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126 public boolean validateChartCode(String chartCode) {
127 Map searchMap = new HashMap();
128 searchMap.put(OLEConstants.CHART_CODE, chartCode);
129 Chart chart = SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(Chart.class, searchMap);
130 if (chart != null) {
131 return true;
132 }
133 return false;
134 }
135
136 public boolean validateAccountNumber(String accountNumber) {
137 Map searchMap = new HashMap();
138 searchMap.put(OLEConstants.ACCOUNT_NUMBER, accountNumber);
139 Account account = SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(Account.class, searchMap);
140 if (account != null) {
141 return true;
142 }
143 return false;
144 }
145
146 public boolean validateObjectCode(String objectCode) {
147 Map searchMap = new HashMap();
148 searchMap.put(OLEConstants.FINANCIAL_OBJECT_CODE_PROPERTY_NAME, objectCode);
149 ObjectCode code = SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(ObjectCode.class, searchMap);
150 if (code != null) {
151 return true;
152 }
153 return false;
154 }
155
156 public ActionForward search(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
157 BalanceInquiryForm lookupForm = (BalanceInquiryForm) form;
158
159
160 Map fieldValues = lookupForm.getFields();
161 String accountNumber = null;
162 String chartCode = null;
163 String objectCode = null;
164 if (fieldValues.get(OLEConstants.ACCOUNT_NUMBER) != null) {
165 accountNumber = fieldValues.get(OLEConstants.ACCOUNT_NUMBER).toString();
166 }
167 if (fieldValues.get(OLEConstants.CHART_CODE) != null) {
168 chartCode = fieldValues.get(OLEConstants.CHART_CODE).toString();
169 }
170 if (fieldValues.get(OLEConstants.OBJECT_CODE) != null) {
171 objectCode = fieldValues.get(OLEConstants.OBJECT_CODE).toString();
172 }
173 if (chartCode != null && !StringUtils.isEmpty(chartCode) && !validateChartCode(chartCode)) {
174 GlobalVariables.getMessageMap().putError(OLEConstants.DOCUMENT_ERRORS, OLEKeyConstants.ERROR_CUSTOM, new String[]{OLEConstants.CHART_CODE_NOT_FOUND});
175 }
176 if (accountNumber != null && !StringUtils.isEmpty(accountNumber) && !validateAccountNumber(accountNumber)) {
177 GlobalVariables.getMessageMap().putError(OLEConstants.DOCUMENT_ERRORS, OLEKeyConstants.ERROR_CUSTOM, new String[]{OLEConstants.ACC_NO_NOT_FOUND});
178 }
179 if (objectCode != null && !StringUtils.isEmpty(objectCode) && !validateObjectCode(objectCode)) {
180 GlobalVariables.getMessageMap().putError(OLEConstants.DOCUMENT_ERRORS, OLEKeyConstants.ERROR_CUSTOM, new String[]{OLEConstants.OBJ_CODE_NOT_FOUND});
181 }
182 String consolidationOption = (String) fieldValues.get(Constant.CONSOLIDATION_OPTION);
183 String subAccountNumber = (String) fieldValues.get(Constant.SUB_ACCOUNT_OPTION);
184 if (Constant.EXCLUDE_SUBACCOUNTS.equals(consolidationOption) && !subAccountNumber.equals("")){
185 GlobalVariables.getMessageMap().putError(OLEPropertyConstants.SUB_ACCOUNT_NUMBER, OLEKeyConstants.ERROR_BALANCE_CONSOLIDATION_EXCLUDE_SUBACCOUNT);
186 }
187
188 Lookupable lookupable = lookupForm.getLookupable();
189
190 if (lookupable == null) {
191 LOG.error("Lookupable is null.");
192 throw new RuntimeException("Lookupable is null.");
193 }
194
195 Collection displayList = new ArrayList();
196 List<ResultRow> resultTable = new ArrayList<ResultRow>();
197
198 lookupable.validateSearchParameters(lookupForm.getFields());
199
200 try {
201 displayList = lookupable.performLookup(lookupForm, resultTable, true);
202
203 Object[] resultTableAsArray = resultTable.toArray();
204
205 CollectionIncomplete incompleteDisplayList = (CollectionIncomplete) displayList;
206 Long totalSize = ((CollectionIncomplete) displayList).getActualSizeIfTruncated();
207
208 request.setAttribute(OLEConstants.REQUEST_SEARCH_RESULTS_SIZE, totalSize);
209
210
211 if (lookupable.getLookupableHelperService() instanceof AccountBalanceByConsolidationLookupableHelperServiceImpl) {
212
213 Collection totalsTable = new ArrayList();
214
215 int listIndex = 0;
216 int arrayIndex = 0;
217 int listSize = incompleteDisplayList.size();
218
219 for (; listIndex < listSize;) {
220
221 AccountBalance balance = (AccountBalance) incompleteDisplayList.get(listIndex);
222
223 boolean ok = ObjectHelper.isOneOf(balance.getTitle(), getTotalTitles());
224 if (ok) {
225
226 if (totalSize > 7) {
227 totalsTable.add(resultTableAsArray[arrayIndex]);
228 }
229 resultTable.remove(resultTableAsArray[arrayIndex]);
230
231 incompleteDisplayList.remove(balance);
232
233 listIndex--;
234 listSize--;
235
236 }
237
238 listIndex++;
239 arrayIndex++;
240
241 }
242
243 request.setAttribute(OLEConstants.REQUEST_SEARCH_RESULTS, resultTable);
244
245 request.setAttribute(TOTALS_TABLE_KEY, totalsTable);
246 GlobalVariables.getUserSession().addObject(TOTALS_TABLE_KEY, totalsTable);
247
248 }
249 else {
250
251 request.setAttribute(OLEConstants.REQUEST_SEARCH_RESULTS, resultTable);
252
253 }
254
255 if (request.getParameter(OLEConstants.SEARCH_LIST_REQUEST_KEY) != null) {
256 GlobalVariables.getUserSession().removeObject(request.getParameter(OLEConstants.SEARCH_LIST_REQUEST_KEY));
257 }
258
259 request.setAttribute(OLEConstants.SEARCH_LIST_REQUEST_KEY, GlobalVariables.getUserSession().addObjectWithGeneratedKey(resultTable));
260
261 }
262 catch (NumberFormatException e) {
263 GlobalVariables.getMessageMap().putError(OLEPropertyConstants.UNIVERSITY_FISCAL_YEAR, OLEKeyConstants.ERROR_CUSTOM, new String[] { "Fiscal Year must be a four-digit number" });
264 }
265 catch (Exception e) {
266 GlobalVariables.getMessageMap().putError(OLEConstants.DOCUMENT_ERRORS, OLEKeyConstants.ERROR_CUSTOM, new String[] { "Please report the server error." });
267 LOG.error("Application Errors", e);
268 }
269 return mapping.findForward(OLEConstants.MAPPING_BASIC);
270 }
271
272
273
274
275
276
277
278
279
280
281
282 @Override
283 public ActionForward refresh(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
284 LookupForm lookupForm = (LookupForm) form;
285 Lookupable lookupable = lookupForm.getLookupable();
286 if (lookupable == null) {
287 LOG.error("Lookupable is null.");
288 throw new RuntimeException("Lookupable is null.");
289 }
290
291 Map fieldValues = new HashMap();
292 Map values = lookupForm.getFields();
293
294 for (Iterator iter = lookupable.getRows().iterator(); iter.hasNext();) {
295 Row row = (Row) iter.next();
296
297 for (Iterator iterator = row.getFields().iterator(); iterator.hasNext();) {
298 Field field = (Field) iterator.next();
299
300 if (field.getPropertyName() != null && !field.getPropertyName().equals("")) {
301 if (request.getParameter(field.getPropertyName()) != null) {
302 field.setPropertyValue(request.getParameter(field.getPropertyName()));
303 }
304 else if (values.get(field.getPropertyName()) != null) {
305 field.setPropertyValue(values.get(field.getPropertyName()));
306 }
307 }
308 fieldValues.put(field.getPropertyName(), field.getPropertyValue());
309 }
310 }
311 fieldValues.put(OLEConstants.DOC_FORM_KEY, lookupForm.getFormKey());
312 fieldValues.put(OLEConstants.BACK_LOCATION, lookupForm.getBackLocation());
313
314 if (lookupable.checkForAdditionalFields(fieldValues)) {
315 for (Iterator iter = lookupable.getRows().iterator(); iter.hasNext();) {
316 Row row = (Row) iter.next();
317 for (Iterator iterator = row.getFields().iterator(); iterator.hasNext();) {
318 Field field = (Field) iterator.next();
319 if (field.getPropertyName() != null && !field.getPropertyName().equals("")) {
320 if (request.getParameter(field.getPropertyName()) != null) {
321 field.setPropertyValue(request.getParameter(field.getPropertyName()));
322 fieldValues.put(field.getPropertyName(), request.getParameter(field.getPropertyName()));
323 }
324 else if (values.get(field.getPropertyName()) != null) {
325 field.setPropertyValue(values.get(field.getPropertyName()));
326 }
327 }
328 }
329 }
330 }
331
332 return mapping.findForward(OLEConstants.MAPPING_BASIC);
333 }
334
335
336
337
338
339
340
341
342
343
344
345 public ActionForward cancel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
346 LookupForm lookupForm = (LookupForm) form;
347
348 String backUrl = lookupForm.getBackLocation() + "?methodToCall=refresh&docFormKey=" + lookupForm.getFormKey();
349 return new ActionForward(backUrl, true);
350 }
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368 public ActionForward clearValues(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
369 LookupForm lookupForm = (LookupForm) form;
370 Lookupable lookupable = lookupForm.getLookupable();
371 if (lookupable == null) {
372 LOG.error("Lookupable is null.");
373 throw new RuntimeException("Lookupable is null.");
374 }
375
376 for (Iterator iter = lookupable.getRows().iterator(); iter.hasNext();) {
377 Row row = (Row) iter.next();
378 for (Iterator iterator = row.getFields().iterator(); iterator.hasNext();) {
379 Field field = (Field) iterator.next();
380 if (!field.getFieldType().equals(Field.RADIO)) {
381 field.setPropertyValue(field.getDefaultValue());
382 }
383 }
384 }
385
386 return mapping.findForward(OLEConstants.MAPPING_BASIC);
387 }
388
389
390
391
392
393
394
395
396
397
398
399 public ActionForward viewResults(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
400 request.setAttribute(OLEConstants.SEARCH_LIST_REQUEST_KEY, request.getParameter(OLEConstants.SEARCH_LIST_REQUEST_KEY));
401 request.setAttribute(OLEConstants.REQUEST_SEARCH_RESULTS, GlobalVariables.getUserSession().retrieveObject(request.getParameter(OLEConstants.SEARCH_LIST_REQUEST_KEY)));
402 request.setAttribute(OLEConstants.REQUEST_SEARCH_RESULTS_SIZE, request.getParameter(OLEConstants.REQUEST_SEARCH_RESULTS_SIZE));
403
404
405 if (((BalanceInquiryForm) form).getLookupable().getLookupableHelperService() instanceof AccountBalanceByConsolidationLookupableHelperServiceImpl) {
406 Object totalsTable = GlobalVariables.getUserSession().retrieveObject(TOTALS_TABLE_KEY);
407 request.setAttribute(TOTALS_TABLE_KEY, totalsTable);
408 }
409
410 return mapping.findForward(OLEConstants.MAPPING_BASIC);
411 }
412
413 public void setConfigurationService(ConfigurationService kcs) {
414 kualiConfigurationService = kcs;
415 }
416
417 @Override
418 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
419 request.setAttribute(KRADConstants.PARAM_MAINTENANCE_VIEW_MODE, KRADConstants.PARAM_MAINTENANCE_VIEW_MODE_LOOKUP);
420 org.kuali.rice.kns.datadictionary.BusinessObjectEntry boe = (org.kuali.rice.kns.datadictionary.BusinessObjectEntry) dataDictionaryService.getDataDictionary().getBusinessObjectEntry(((LookupForm) form).getBusinessObjectClassName());
421 int numCols = boe.getLookupDefinition().getNumOfColumns();
422 if (numCols <= 0) {
423 numCols = KRADConstants.DEFAULT_NUM_OF_COLUMNS;
424 }
425 ((LookupForm) form).setNumColumns(numCols);
426 return super.execute(mapping, form, request, response);
427 }
428 }