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.ar.web.struts; 017 018 import java.io.FileInputStream; 019 import java.io.IOException; 020 import java.io.ObjectInputStream; 021 import java.util.ArrayList; 022 import java.util.Collection; 023 import java.util.HashMap; 024 import java.util.Iterator; 025 import java.util.List; 026 import java.util.Map; 027 028 import javax.servlet.ServletException; 029 import javax.servlet.http.HttpServletRequest; 030 import javax.servlet.http.HttpServletResponse; 031 032 import org.apache.struts.action.ActionForm; 033 import org.apache.struts.action.ActionForward; 034 import org.apache.struts.action.ActionMapping; 035 import org.kuali.kfs.module.ar.businessobject.lookup.CustomerAgingReportLookupableHelperServiceImpl; 036 import org.kuali.kfs.sys.KFSConstants; 037 import org.kuali.kfs.sys.KFSKeyConstants; 038 import org.kuali.kfs.sys.KFSPropertyConstants; 039 import org.kuali.rice.kns.lookup.CollectionIncomplete; 040 import org.kuali.rice.kns.lookup.Lookupable; 041 import org.kuali.rice.kns.lookup.LookupableHelperService; 042 import org.kuali.rice.kns.util.GlobalVariables; 043 import org.kuali.rice.kns.web.struts.action.KualiAction; 044 import org.kuali.rice.kns.web.struts.form.LookupForm; 045 import org.kuali.rice.kns.web.ui.Field; 046 import org.kuali.rice.kns.web.ui.ResultRow; 047 import org.kuali.rice.kns.web.ui.Row; 048 049 050 /** 051 * This class handles Actions for lookup flow 052 */ 053 054 public class CustomerAgingReportAction extends KualiAction { 055 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(CustomerAgingReportAction.class); 056 057 private static final String TOTALS_TABLE_KEY = "totalsTable"; 058 059 060 public CustomerAgingReportAction() { 061 super(); 062 } 063 064 065 066 public ActionForward start(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 067 return mapping.findForward(KFSConstants.MAPPING_BASIC); 068 } 069 070 /** 071 * Search - sets the values of the data entered on the form on the jsp into a map and then searches for the results. 072 * 073 * @param mapping 074 * @param form 075 * @param request 076 * @param response 077 * @return 078 * @throws Exception 079 */ 080 public ActionForward search(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 081 CustomerAgingReportForm lookupForm = (CustomerAgingReportForm) form; 082 083 Lookupable lookupable = lookupForm.getLookupable(); 084 085 if (lookupable == null) { 086 LOG.error("Lookupable is null."); 087 throw new RuntimeException("Lookupable is null."); 088 } 089 090 LookupableHelperService lookupablehelper = lookupable.getLookupableHelperService(); 091 Collection displayList = new ArrayList(); 092 List<ResultRow> resultTable = new ArrayList<ResultRow>(); 093 094 try { 095 displayList = lookupable.performLookup(lookupForm, resultTable, true); 096 097 Object[] resultTableAsArray = resultTable.toArray(); 098 099 100 CollectionIncomplete incompleteDisplayList = (CollectionIncomplete) displayList; 101 Long totalSize = ((CollectionIncomplete) displayList).getActualSizeIfTruncated(); 102 103 request.setAttribute(KFSConstants.REQUEST_SEARCH_RESULTS_SIZE, totalSize); 104 105 request.setAttribute(KFSConstants.REQUEST_SEARCH_RESULTS, resultTable); 106 107 if (request.getParameter(KFSConstants.SEARCH_LIST_REQUEST_KEY) != null) { 108 GlobalVariables.getUserSession().removeObject(request.getParameter(KFSConstants.SEARCH_LIST_REQUEST_KEY)); 109 } 110 111 request.setAttribute(KFSConstants.SEARCH_LIST_REQUEST_KEY, GlobalVariables.getUserSession().addObject(resultTable)); 112 113 } 114 catch (NumberFormatException e) { 115 GlobalVariables.getMessageMap().putError(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, KFSKeyConstants.ERROR_CUSTOM, new String[] { "Fiscal Year must be a four-digit number" }); 116 } 117 catch (Exception e) { 118 GlobalVariables.getMessageMap().putError(KFSConstants.DOCUMENT_ERRORS, KFSKeyConstants.ERROR_CUSTOM, new String[] { "Please report the server error." }); 119 LOG.error("Application Errors", e); 120 } 121 return mapping.findForward(KFSConstants.MAPPING_BASIC); 122 } 123 124 /** 125 * Refresh - is called when one quickFinder returns to the previous one. Sets all the values and performs the new search. 126 * 127 * @see org.kuali.rice.kns.web.struts.action.KualiAction#refresh(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) 128 */ 129 @Override 130 public ActionForward refresh(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 131 LookupForm lookupForm = (LookupForm) form; 132 Lookupable lookupable = lookupForm.getLookupable(); 133 if (lookupable == null) { 134 LOG.error("Lookupable is null."); 135 throw new RuntimeException("Lookupable is null."); 136 } 137 138 Map fieldValues = new HashMap(); 139 Map values = lookupForm.getFields(); 140 141 for (Iterator iter = lookupable.getRows().iterator(); iter.hasNext();) { 142 Row row = (Row) iter.next(); 143 144 for (Iterator iterator = row.getFields().iterator(); iterator.hasNext();) { 145 Field field = (Field) iterator.next(); 146 147 if (field.getPropertyName() != null && !field.getPropertyName().equals("")) { 148 if (request.getParameter(field.getPropertyName()) != null) { 149 field.setPropertyValue(request.getParameter(field.getPropertyName())); 150 } 151 else if (values.get(field.getPropertyName()) != null) { 152 field.setPropertyValue(values.get(field.getPropertyName())); 153 } 154 } 155 fieldValues.put(field.getPropertyName(), field.getPropertyValue()); 156 } 157 } 158 fieldValues.put(KFSConstants.DOC_FORM_KEY, lookupForm.getFormKey()); 159 fieldValues.put(KFSConstants.BACK_LOCATION, lookupForm.getBackLocation()); 160 161 if (lookupable.checkForAdditionalFields(fieldValues)) { 162 for (Iterator iter = lookupable.getRows().iterator(); iter.hasNext();) { 163 Row row = (Row) iter.next(); 164 for (Iterator iterator = row.getFields().iterator(); iterator.hasNext();) { 165 Field field = (Field) iterator.next(); 166 if (field.getPropertyName() != null && !field.getPropertyName().equals("")) { 167 if (request.getParameter(field.getPropertyName()) != null) { 168 field.setPropertyValue(request.getParameter(field.getPropertyName())); 169 fieldValues.put(field.getPropertyName(), request.getParameter(field.getPropertyName())); 170 } 171 else if (values.get(field.getPropertyName()) != null) { 172 field.setPropertyValue(values.get(field.getPropertyName())); 173 } 174 } 175 } 176 } 177 } 178 179 return mapping.findForward(KFSConstants.MAPPING_BASIC); 180 } 181 182 /** 183 * Returns as if return with no value was selected. 184 * 185 * @param mapping 186 * @param form 187 * @param request 188 * @param response 189 * @return 190 * @throws Exception 191 */ 192 public ActionForward cancel(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 193 CustomerAgingReportForm lookupForm = (CustomerAgingReportForm) form; 194 195 //String backUrl = lookupForm.getBackLocation() + "?methodToCall=refresh&docFormKey=" + lookupForm.getFormKey(); 196 String backUrl = getBasePath(request)+"/portal.do?selectedTab=maintenance"; 197 return new ActionForward(backUrl, true); 198 } 199 200 201 /** 202 * Clears the values of all the fields on the jsp. 203 * 204 * @param mapping 205 * @param form 206 * @param request 207 * @param response 208 * @return 209 * @throws IOException 210 * @throws ServletException 211 */ 212 public ActionForward clearValues(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { 213 LookupForm lookupForm = (LookupForm) form; 214 Lookupable lookupable = lookupForm.getLookupable(); 215 if (lookupable == null) { 216 LOG.error("Lookupable is null."); 217 throw new RuntimeException("Lookupable is null."); 218 } 219 220 for (Iterator iter = lookupable.getRows().iterator(); iter.hasNext();) { 221 Row row = (Row) iter.next(); 222 for (Iterator iterator = row.getFields().iterator(); iterator.hasNext();) { 223 Field field = (Field) iterator.next(); 224 if (!field.getFieldType().equals(Field.RADIO)) { 225 field.setPropertyValue(field.getDefaultValue()); 226 } 227 } 228 } 229 230 return mapping.findForward(KFSConstants.MAPPING_BASIC); 231 } 232 233 /** 234 * View results from balance inquiry action 235 * 236 * @param mapping 237 * @param form 238 * @param request 239 * @param response 240 * @return 241 * @throws Exception 242 */ 243 public ActionForward viewResults(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 244 request.setAttribute(KFSConstants.SEARCH_LIST_REQUEST_KEY, request.getParameter(KFSConstants.SEARCH_LIST_REQUEST_KEY)); 245 request.setAttribute(KFSConstants.REQUEST_SEARCH_RESULTS, GlobalVariables.getUserSession().retrieveObject(request.getParameter(KFSConstants.SEARCH_LIST_REQUEST_KEY))); 246 request.setAttribute(KFSConstants.REQUEST_SEARCH_RESULTS_SIZE, request.getParameter(KFSConstants.REQUEST_SEARCH_RESULTS_SIZE)); 247 248 // TODO: use inheritance instead of this if statement 249 if (((CustomerAgingReportForm) form).getLookupable().getLookupableHelperService() instanceof CustomerAgingReportLookupableHelperServiceImpl) { 250 Object totalsTable = GlobalVariables.getUserSession().retrieveObject(TOTALS_TABLE_KEY); 251 request.setAttribute(TOTALS_TABLE_KEY, totalsTable); 252 } 253 254 return mapping.findForward(KFSConstants.MAPPING_BASIC); 255 } 256 257 258 }