1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.ole.gl.businessobject.lookup;
17
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import java.util.Collections;
21 import java.util.HashMap;
22 import java.util.Iterator;
23 import java.util.List;
24 import java.util.Map;
25
26 import org.apache.commons.lang.StringUtils;
27 import org.kuali.ole.gl.Constant;
28 import org.kuali.ole.gl.service.impl.StringHelper;
29 import org.kuali.ole.sys.OLEPropertyConstants;
30 import org.kuali.ole.sys.document.service.DebitDeterminerService;
31 import org.kuali.ole.sys.service.GeneralLedgerPendingEntryService;
32 import org.kuali.rice.kns.lookup.AbstractLookupableHelperServiceImpl;
33 import org.kuali.rice.kns.lookup.HtmlData;
34 import org.kuali.rice.kns.web.struts.form.LookupForm;
35 import org.kuali.rice.kns.web.ui.Column;
36 import org.kuali.rice.kns.web.ui.Field;
37 import org.kuali.rice.kns.web.ui.ResultRow;
38 import org.kuali.rice.kns.web.ui.Row;
39 import org.kuali.rice.krad.bo.BusinessObject;
40 import org.kuali.rice.krad.lookup.CollectionIncomplete;
41 import org.kuali.rice.krad.util.BeanPropertyComparator;
42 import org.kuali.rice.krad.util.ObjectUtils;
43
44
45
46
47
48 public abstract class AbstractGeneralLedgerLookupableHelperServiceImpl extends AbstractLookupableHelperServiceImpl {
49
50 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(AbstractGeneralLedgerLookupableHelperServiceImpl.class);
51
52 protected GeneralLedgerPendingEntryService generalLedgerPendingEntryService;
53 protected DebitDeterminerService debitDeterminerService;
54
55
56
57
58
59
60
61
62 @Override
63 public List<HtmlData> getCustomActionUrls(BusinessObject bo, List pkNames) {
64 return super.getEmptyActionUrls();
65 }
66
67
68
69
70
71
72
73 protected String getSelectedPendingEntryOption(Map fieldValues) {
74
75 String pendingEntryOption = (String) fieldValues.get(Constant.PENDING_ENTRY_OPTION);
76 fieldValues.remove(Constant.PENDING_ENTRY_OPTION);
77
78 return pendingEntryOption;
79 }
80
81
82
83
84
85
86
87 protected String getDebitCreditOption(Map fieldValues) {
88
89 String debitCreditOption = (String) fieldValues.get(Constant.DEBIT_CREDIT_OPTION);
90 fieldValues.remove(Constant.DEBIT_CREDIT_OPTION);
91
92 return debitCreditOption;
93 }
94
95
96
97
98
99
100
101 protected String getSelectedAmountViewOption(Map fieldValues) {
102
103 String amountViewOption = Constant.EMPTY_STRING;
104 if (fieldValues.containsKey(Constant.AMOUNT_VIEW_OPTION)) {
105 amountViewOption = (String) fieldValues.get(Constant.AMOUNT_VIEW_OPTION);
106
107
108 fieldValues.remove(Constant.AMOUNT_VIEW_OPTION);
109 }
110 return amountViewOption;
111 }
112
113
114
115
116
117
118
119
120
121
122
123 protected boolean isConsolidationSelected(Map fieldValues) {
124
125 String consolidationOption = (String) fieldValues.get(Constant.CONSOLIDATION_OPTION);
126 fieldValues.remove(Constant.CONSOLIDATION_OPTION);
127
128
129 if (Constant.DETAIL.equals(consolidationOption)) {
130 return false;
131 }
132
133
134 String subAccountNumber = (String) fieldValues.get(OLEPropertyConstants.SUB_ACCOUNT_NUMBER);
135 if (!StringUtils.isBlank(subAccountNumber)) {
136 this.changeFieldValue(Constant.CONSOLIDATION_OPTION, Constant.DETAIL);
137 return false;
138 }
139
140
141 String subObjectCode = (String) fieldValues.get(OLEPropertyConstants.SUB_OBJECT_CODE);
142 if (!StringUtils.isBlank(subObjectCode)) {
143 this.changeFieldValue(Constant.CONSOLIDATION_OPTION, Constant.DETAIL);
144 return false;
145 }
146
147
148 String objectTypeCode = (String) fieldValues.get(OLEPropertyConstants.OBJECT_TYPE_CODE);
149 if (!StringUtils.isBlank(objectTypeCode)) {
150 this.changeFieldValue(Constant.CONSOLIDATION_OPTION, Constant.DETAIL);
151 return false;
152 }
153 return true;
154 }
155
156
157
158
159
160
161
162 protected boolean isCostShareInclusive(Map fieldValues) {
163
164
165 String costShareOption = (String) fieldValues.get(Constant.COST_SHARE_OPTION);
166 fieldValues.remove(Constant.COST_SHARE_OPTION);
167
168 if (costShareOption.equals(Constant.COST_SHARE_INCLUDE)) {
169 return true;
170 }
171 return false;
172 }
173
174
175
176
177
178
179
180
181
182 protected List buildSearchResultList(Collection searchResultsCollection, Long actualSize) {
183 CollectionIncomplete results = new CollectionIncomplete(searchResultsCollection, actualSize);
184
185
186 List searchResults = results;
187 List defaultSortColumns = getDefaultSortColumns();
188 if (defaultSortColumns.size() > 0) {
189 Collections.sort(results, new BeanPropertyComparator(defaultSortColumns, true));
190 }
191 return searchResults;
192 }
193
194 @Override
195 public Collection performLookup(LookupForm lookupForm, Collection resultTable, boolean bounded) {
196 Map fieldsForLookup = new HashMap(lookupForm.getFieldsForLookup());
197 String debitCreditOption = getDebitCreditOption(fieldsForLookup);
198
199 Collection displayList = super.performLookup(lookupForm, resultTable, bounded);
200 updateByDebitCreditOption(resultTable, debitCreditOption);
201 return displayList;
202
203 }
204
205
206
207 protected void updateByDebitCreditOption(Collection resultTable , String debitCreditOption) {
208
209 if (Constant.DEBIT_CREDIT_EXCLUDE.equals(debitCreditOption)){
210 for(Object table : resultTable) {
211 ResultRow row = (ResultRow)table;
212 List<Column> columns = row.getColumns();
213 ArrayList<Column> newColumnList = new ArrayList<Column>();
214 String debitCreditCode = null;
215 String objectType = null;
216 Column amountCol = null;
217 boolean setAmount = false ;
218 for(Column col: columns) {
219
220 String propertyName = col.getPropertyName();
221 if (propertyName.equals(OLEPropertyConstants.TRANSACTION_DEBIT_CREDIT_CODE)) {
222 debitCreditCode = col.getPropertyValue();
223 }
224 else if (!propertyName.equals(OLEPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT)){
225 newColumnList.add(col);
226 }
227
228 if(propertyName.equals(OLEPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE)) {
229 objectType = col.getPropertyValue();
230 }
231
232 if (propertyName.equals(OLEPropertyConstants.TRANSACTION_LEDGER_ENTRY_AMOUNT)) {
233 amountCol = col;
234 }
235
236
237 if (!newColumnList.contains(amountCol)) {
238 if ((!StringHelper.isNullOrEmpty(objectType)) && (!StringHelper.isNullOrEmpty(debitCreditCode))
239 && ObjectUtils.isNotNull(amountCol)) {
240 String amount = debitDeterminerService.getConvertedAmount(objectType, debitCreditCode, amountCol.getPropertyValue());
241 amountCol.setPropertyValue(amount);
242 newColumnList.add(amountCol);
243
244 }
245 }
246
247 }
248
249 row.setColumns(newColumnList);
250 }
251 }
252
253 }
254
255
256
257
258
259
260
261
262
263
264
265 protected void updateByPendingLedgerEntry(Collection entryCollection, Map fieldValues, String pendingEntryOption, boolean isConsolidated, boolean isCostShareInclusive) {
266
267
268 if (Constant.ALL_PENDING_ENTRY.equals(pendingEntryOption)) {
269 updateEntryCollection(entryCollection, fieldValues, false, isConsolidated, isCostShareInclusive);
270 }
271 else if (Constant.APPROVED_PENDING_ENTRY.equals(pendingEntryOption)) {
272 updateEntryCollection(entryCollection, fieldValues, true, isConsolidated, isCostShareInclusive);
273 }
274 }
275
276
277
278
279
280
281
282
283
284
285
286 protected abstract void updateEntryCollection(Collection entryCollection, Map fieldValues, boolean isApproved, boolean isConsolidated, boolean isCostShareInclusive);
287
288
289 private void changeFieldValue(String fieldName, String fieldValue) {
290 for (Iterator rowIterator = getRows().iterator(); rowIterator.hasNext();) {
291 Row row = (Row) rowIterator.next();
292
293 for (Iterator fieldIterator = row.getFields().iterator(); fieldIterator.hasNext();) {
294 Field field = (Field) fieldIterator.next();
295
296 if (field.getPropertyName().equals(fieldName)) {
297 field.setPropertyValue(fieldValue);
298 }
299 }
300 }
301 }
302
303 protected GeneralLedgerPendingEntryService getGeneralLedgerPendingEntryService() {
304 return generalLedgerPendingEntryService;
305 }
306
307 public void setGeneralLedgerPendingEntryService(GeneralLedgerPendingEntryService generalLedgerPendingEntryService) {
308 this.generalLedgerPendingEntryService = generalLedgerPendingEntryService;
309 }
310
311 protected DebitDeterminerService getDebitDeterminerService() {
312 return debitDeterminerService;
313 }
314
315 public void setDebitDeterminerService(DebitDeterminerService debitDeterminerService) {
316 this.debitDeterminerService = debitDeterminerService;
317 }
318
319
320
321 }