001 /*
002 * Copyright 2011 The Kuali Foundation.
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.kfs.module.endow.businessobject.inquiry;
017
018 import java.sql.Date;
019 import java.text.ParseException;
020 import java.util.ArrayList;
021 import java.util.HashMap;
022 import java.util.List;
023 import java.util.Map;
024 import java.util.Properties;
025
026 import org.kuali.kfs.module.endow.EndowPropertyConstants;
027 import org.kuali.kfs.module.endow.businessobject.KEMID;
028 import org.kuali.kfs.module.endow.businessobject.KEMIDCurrentAvailableBalance;
029 import org.kuali.kfs.module.endow.businessobject.KEMIDCurrentBalance;
030 import org.kuali.kfs.module.endow.businessobject.KEMIDHistoricalBalance;
031 import org.kuali.kfs.module.endow.businessobject.KemidAgreement;
032 import org.kuali.kfs.module.endow.businessobject.KemidAuthorizations;
033 import org.kuali.kfs.module.endow.businessobject.KemidBenefittingOrganization;
034 import org.kuali.kfs.module.endow.businessobject.KemidCombineDonorStatement;
035 import org.kuali.kfs.module.endow.businessobject.KemidPayoutInstruction;
036 import org.kuali.kfs.module.endow.businessobject.KemidReportGroup;
037 import org.kuali.kfs.module.endow.businessobject.KemidSourceOfFunds;
038 import org.kuali.kfs.module.endow.businessobject.KemidUseCriteria;
039 import org.kuali.kfs.module.endow.businessobject.Security;
040 import org.kuali.kfs.module.endow.businessobject.Tickler;
041 import org.kuali.kfs.module.endow.document.service.KEMService;
042 import org.kuali.kfs.sys.KFSConstants;
043 import org.kuali.kfs.sys.businessobject.inquiry.KfsInquirableImpl;
044 import org.kuali.kfs.sys.context.SpringContext;
045 import org.kuali.rice.kns.bo.BusinessObject;
046 import org.kuali.rice.kns.lookup.HtmlData;
047 import org.kuali.rice.kns.service.DateTimeService;
048 import org.kuali.rice.kns.service.KualiConfigurationService;
049 import org.kuali.rice.kns.util.KNSConstants;
050 import org.kuali.rice.kns.util.UrlFactory;
051
052 public class KemidInquirableImpl extends KfsInquirableImpl {
053
054 /**
055 * @see org.kuali.rice.kns.inquiry.KualiInquirableImpl#getBusinessObject(java.util.Map)
056 */
057 @Override
058 public BusinessObject getBusinessObject(Map fieldValues) {
059
060 KEMID kemid = (KEMID) super.getBusinessObject(fieldValues);
061 KEMService kemService = SpringContext.getBean(KEMService.class);
062 String currentProcessDateString = kemService.getCurrentSystemProcessDate();
063
064 setViewableAgreements(kemid);
065 setViewableAuthorizations(kemid);
066 setViewableSourcesOfFunds(kemid);
067 setViewableBenefittingOrgs(kemid);
068 setViewablePayoutInstructions(kemid, currentProcessDateString);
069 setViewableUseCriteria(kemid);
070 setViewableReportGroups(kemid, currentProcessDateString);
071 setViewableCombineDonorStatements(kemid, currentProcessDateString);
072
073 return kemid;
074 }
075
076
077 /**
078 * Sets the viewable agreements list - if an agreement is not active it is not viewable
079 *
080 * @param kemid
081 */
082 private void setViewableAgreements(KEMID kemid) {
083 // show only active agreements
084 List<KemidAgreement> activeKemidAgreements = new ArrayList<KemidAgreement>();
085 List<KemidAgreement> kemidAgreements = kemid.getKemidAgreements();
086
087 for (KemidAgreement kemidAgreement : kemidAgreements) {
088 if (kemidAgreement.isActive()) {
089 activeKemidAgreements.add(kemidAgreement);
090 }
091 }
092
093 kemid.setKemidAgreements(activeKemidAgreements);
094 }
095
096 /**
097 * Sets the viewable Authorizations list - if an Authorizations is not active it is not viewable
098 *
099 * @param kemid
100 */
101 private void setViewableAuthorizations(KEMID kemid) {
102 // show only active Authorizations
103 List<KemidAuthorizations> activeKemidAuthorizations = new ArrayList<KemidAuthorizations>();
104 List<KemidAuthorizations> kemidAuthorizations = kemid.getKemidAuthorizations();
105
106 for (KemidAuthorizations kemidAuthorization : kemidAuthorizations) {
107 if (kemidAuthorization.isActive()) {
108 activeKemidAuthorizations.add(kemidAuthorization);
109 }
110 }
111
112 kemid.setKemidAuthorizations(activeKemidAuthorizations);
113 }
114
115
116 /**
117 * Sets the viewable sources of funds list - if a source of funds is not active it is not viewable
118 *
119 * @param kemid
120 */
121 private void setViewableSourcesOfFunds(KEMID kemid) {
122 // show only the active source of funds
123 List<KemidSourceOfFunds> activeKemidSourcesOfFunds = new ArrayList<KemidSourceOfFunds>();
124 List<KemidSourceOfFunds> kemidSourcesOfFunds = kemid.getKemidSourcesOfFunds();
125
126 for (KemidSourceOfFunds kemidSourceOfFunds : kemidSourcesOfFunds) {
127 if (kemidSourceOfFunds.isActive()) {
128 activeKemidSourcesOfFunds.add(kemidSourceOfFunds);
129 }
130 }
131
132 kemid.setKemidSourcesOfFunds(activeKemidSourcesOfFunds);
133 }
134
135 /**
136 * Sets the viewable sources of funds list - if a source of funds is not active it is not viewable
137 *
138 * @param kemid
139 */
140 private void setViewableBenefittingOrgs(KEMID kemid) {
141 // show only the active benefitting organizations
142 List<KemidBenefittingOrganization> activeKemidBenefittingOrgs = new ArrayList<KemidBenefittingOrganization>();
143 List<KemidBenefittingOrganization> kemidBenefittingOrgs = kemid.getKemidBenefittingOrganizations();
144
145 for (KemidBenefittingOrganization kemidBenefittingOrganization : kemidBenefittingOrgs) {
146 if (kemidBenefittingOrganization.isActive()) {
147 activeKemidBenefittingOrgs.add(kemidBenefittingOrganization);
148 }
149 }
150
151 kemid.setKemidBenefittingOrganizations(activeKemidBenefittingOrgs);
152 }
153
154 /**
155 * Ste the viewable Payout Instructions - a record is no longer viewable if the payout termination date is less than the current
156 * processor system date.
157 *
158 * @param kemid
159 * @param currentProcessDateString
160 */
161 private void setViewablePayoutInstructions(KEMID kemid, String currentProcessDateString) {
162 // a record is no longer viewable if the payout termination date is less than the current processor system date
163 DateTimeService dateTimeService = SpringContext.getBean(DateTimeService.class);
164 List<KemidPayoutInstruction> activeKemidPayoutInstructions = new ArrayList<KemidPayoutInstruction>();
165 List<KemidPayoutInstruction> kemidPayoutInstructions = kemid.getKemidPayoutInstructions();
166
167 try {
168 Date currentProcessDate = dateTimeService.convertToSqlDate(currentProcessDateString);
169 for (KemidPayoutInstruction kemidPayoutInstruction : kemidPayoutInstructions) {
170 if (kemidPayoutInstruction.getEndDate() == null || kemidPayoutInstruction.getEndDate().compareTo(currentProcessDate) < 0) {
171 activeKemidPayoutInstructions.add(kemidPayoutInstruction);
172 }
173 }
174
175 kemid.setKemidPayoutInstructions(activeKemidPayoutInstructions);
176 }
177 catch (ParseException ex) {
178
179 }
180 }
181
182 /**
183 * Sets the viewable use criteria list - if a use criteria is not active it is not viewable
184 *
185 * @param kemid
186 */
187 private void setViewableUseCriteria(KEMID kemid) {
188 // show only the active use criteria
189 List<KemidUseCriteria> activeKemidUseCriteria = new ArrayList<KemidUseCriteria>();
190 List<KemidUseCriteria> kemidUseCriteria = kemid.getKemidUseCriteria();
191
192 for (KemidUseCriteria useCriteria : kemidUseCriteria) {
193 if (useCriteria.isActive()) {
194 activeKemidUseCriteria.add(useCriteria);
195 }
196 }
197
198 kemid.setKemidUseCriteria(activeKemidUseCriteria);
199 }
200
201 /**
202 * Sets the viewable report groups - a record is no longer viewable if the report Group terminated date is less than the current
203 * processor system date.
204 *
205 * @param kemid
206 * @param currentProcessDateString
207 */
208 private void setViewableReportGroups(KEMID kemid, String currentProcessDateString) {
209
210 // a record is no longer viewable if the report Group terminated date is less than the current processor system date
211 DateTimeService dateTimeService = SpringContext.getBean(DateTimeService.class);
212 List<KemidReportGroup> activeKemidReportGroups = new ArrayList<KemidReportGroup>();
213 List<KemidReportGroup> kemidReportGroups = kemid.getKemidReportGroups();
214
215 try {
216 Date currentProcessDate = dateTimeService.convertToSqlDate(currentProcessDateString);
217 for (KemidReportGroup kemidReportGroup : kemidReportGroups) {
218 if (kemidReportGroup.getDateTerminated() == null || kemidReportGroup.getDateTerminated().compareTo(currentProcessDate) < 0) {
219 activeKemidReportGroups.add(kemidReportGroup);
220 }
221 }
222
223 kemid.setKemidReportGroups(activeKemidReportGroups);
224 }
225 catch (ParseException ex) {
226
227 }
228 }
229
230
231 /**
232 * Sets the viewable combine donor statements - a record is no longer viewable if the terminate combine date is less than the
233 * current processor system date.
234 *
235 * @param kemid
236 * @param currentProcessDateString
237 */
238 private void setViewableCombineDonorStatements(KEMID kemid, String currentProcessDateString) {
239 // a record is no longer viewable if the terminate combine date is less than the current processor system date
240 DateTimeService dateTimeService = SpringContext.getBean(DateTimeService.class);
241 List<KemidCombineDonorStatement> activeKemidCombineDonorStatement = new ArrayList<KemidCombineDonorStatement>();
242 List<KemidCombineDonorStatement> kemidCombineDonorStatements = kemid.getKemidCombineDonorStatements();
243
244 try {
245 Date currentProcessDate = dateTimeService.convertToSqlDate(currentProcessDateString);
246 for (KemidCombineDonorStatement combineDonorStatement : kemidCombineDonorStatements) {
247 if (combineDonorStatement.getTerminateCombineDate() == null || combineDonorStatement.getTerminateCombineDate().compareTo(currentProcessDate) < 0) {
248 activeKemidCombineDonorStatement.add(combineDonorStatement);
249 }
250 }
251
252 kemid.setKemidCombineDonorStatements(activeKemidCombineDonorStatement);
253 }
254 catch (ParseException ex) {
255
256 }
257 }
258
259 /**
260 * @see org.kuali.kfs.sys.businessobject.inquiry.KfsInquirableImpl#getInquiryUrl(org.kuali.rice.kns.bo.BusinessObject,
261 * java.lang.String, boolean)
262 */
263 public HtmlData getInquiryUrl(BusinessObject businessObject, String attributeName, boolean forceInquiry) {
264 KEMID kemid = (KEMID) businessObject;
265
266 // if the attribute is currentAvailableFunds, currentBalances, historicalBalances, ticklers then we build the lookup links
267 // for
268 // Current Available Funds, Current Balances, Historical Balances and Ticklers
269 if (EndowPropertyConstants.KEMID_CURRENT_AVAILABLE_FUNDS.equalsIgnoreCase(attributeName) || EndowPropertyConstants.KEMID_CURRENT_BALANCES.equalsIgnoreCase(attributeName) || EndowPropertyConstants.KEMID_HISTORICAL_BALANCES.equalsIgnoreCase(attributeName) || EndowPropertyConstants.KEMID_TICKLERS.equals(attributeName)) {
270 // || EndowPropertyConstants.KEMID_RECURRING_TRANSFERS.equalsIgnoreCase(attributeName)) {
271
272 Properties params = new Properties();
273 params.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, KFSConstants.SEARCH_METHOD);
274
275 // the only difference between the two links is the BO class
276 // if currentAvailableFunds set the BO class to be KEMIDCurrentAvailableBalance
277 if (EndowPropertyConstants.KEMID_CURRENT_AVAILABLE_FUNDS.equals(attributeName)) {
278 params.put(KFSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, KEMIDCurrentAvailableBalance.class.getName());
279 }
280 // if currentBalances set the BO to be KEMIDCurrentBalance
281 if (EndowPropertyConstants.KEMID_CURRENT_BALANCES.equals(attributeName)) {
282 params.put(KFSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, KEMIDCurrentBalance.class.getName());
283 }
284 // if historicalBalances set the BO to be KEMIDHistoricalBalance
285 if (EndowPropertyConstants.KEMID_HISTORICAL_BALANCES.equals(attributeName)) {
286 params.put(KFSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, KEMIDHistoricalBalance.class.getName());
287 }
288
289 // if ticklers set the BO to be Tickler
290 if (EndowPropertyConstants.KEMID_TICKLERS.equals(attributeName)) {
291 params.put(KFSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, Tickler.class.getName());
292 }
293
294 // if ticklers set the BO to be EndowmentRecurringCashTransfer
295 // if (EndowPropertyConstants.KEMID_RECURRING_TRANSFERS.equals(attributeName)) {
296 // params.put(KFSConstants.BUSINESS_OBJECT_CLASS_ATTRIBUTE, EndowmentRecurringCashTransfer.class.getName());
297 // }
298
299 params.put(KNSConstants.DOC_FORM_KEY, "88888888");
300 params.put(KFSConstants.HIDE_LOOKUP_RETURN_LINK, "true");
301 params.put(KFSConstants.BACK_LOCATION, SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KNSConstants.APPLICATION_URL_KEY) + "/" + KFSConstants.MAPPING_PORTAL + ".do");
302
303 if (EndowPropertyConstants.KEMID_TICKLERS.equals(attributeName)) {
304 params.put(EndowPropertyConstants.TICKLER_LOOKUP_KEMID, UrlFactory.encode(kemid.getKemid()));
305 }
306 // else if (EndowPropertyConstants.KEMID_RECURRING_TRANSFERS.equalsIgnoreCase(attributeName)) {
307 // params.put(EndowPropertyConstants.ENDOWMENT_RECURRING_CASH_TRANSF_SOURCE_KEMID, UrlFactory.encode(kemid.getKemid()));
308 // }
309 else {
310 params.put(EndowPropertyConstants.KEMID, UrlFactory.encode(kemid.getKemid()));
311 }
312 params.put(KFSConstants.SUPPRESS_ACTIONS, "true");
313 String url = UrlFactory.parameterizeUrl(KNSConstants.LOOKUP_ACTION, params);
314
315 Map<String, String> fieldList = new HashMap<String, String>();
316
317 if (EndowPropertyConstants.KEMID_TICKLERS.equals(attributeName)) {
318 fieldList.put(EndowPropertyConstants.TICKLER_LOOKUP_KEMID, kemid.getKemid());
319 }
320 else {
321 fieldList.put(EndowPropertyConstants.KEMID, kemid.getKemid());
322 }
323
324 return getHyperLink(Security.class, fieldList, url);
325 }
326
327
328 return super.getInquiryUrl(businessObject, attributeName, forceInquiry);
329 }
330
331
332 }