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.bc.document.web.struts; 017 018 import java.util.HashMap; 019 import java.util.Map; 020 021 import javax.servlet.http.HttpServletRequest; 022 import javax.servlet.http.HttpServletResponse; 023 024 import org.apache.commons.lang.StringUtils; 025 import org.apache.struts.action.ActionForm; 026 import org.apache.struts.action.ActionForward; 027 import org.apache.struts.action.ActionMapping; 028 import org.kuali.kfs.module.bc.BCConstants; 029 import org.kuali.kfs.module.bc.BCKeyConstants; 030 import org.kuali.kfs.module.bc.BCPropertyConstants; 031 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAuthorizationStatus; 032 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionMonthly; 033 import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionGeneralLedger; 034 import org.kuali.kfs.module.bc.document.BudgetConstructionDocument; 035 import org.kuali.kfs.module.bc.document.service.BudgetDocumentService; 036 import org.kuali.kfs.module.bc.document.validation.event.SaveMonthlyBudgetEvent; 037 import org.kuali.kfs.sys.KFSConstants; 038 import org.kuali.kfs.sys.KFSKeyConstants; 039 import org.kuali.kfs.sys.context.SpringContext; 040 import org.kuali.rice.kns.question.ConfirmationQuestion; 041 import org.kuali.rice.kns.service.BusinessObjectService; 042 import org.kuali.rice.kns.service.KualiConfigurationService; 043 import org.kuali.rice.kns.service.KualiRuleService; 044 import org.kuali.rice.kns.util.GlobalVariables; 045 import org.kuali.rice.kns.util.KualiInteger; 046 047 048 public class MonthlyBudgetAction extends BudgetExpansionAction { 049 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(MonthlyBudgetAction.class); 050 051 /** 052 * added for testing - remove if not needed 053 * 054 * @see org.kuali.kfs.module.bc.document.web.struts.BudgetConstructionAction#execute(org.apache.struts.action.ActionMapping, 055 * org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) 056 */ 057 @Override 058 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 059 ActionForward forward = super.execute(mapping, form, request, response); 060 061 MonthlyBudgetForm monthlyBudgetForm = (MonthlyBudgetForm) form; 062 if (!monthlyBudgetForm.isLostSession()) { 063 populateAuthorizationFields(monthlyBudgetForm); 064 065 // set the readOnly status on initial load of the form 066 if (monthlyBudgetForm.getMethodToCall().equals(BCConstants.MONTHLY_BUDGET_METHOD)) { 067 BudgetConstructionMonthly bcMonthly = monthlyBudgetForm.getBudgetConstructionMonthly(); 068 PendingBudgetConstructionGeneralLedger pbgl = bcMonthly.getPendingBudgetConstructionGeneralLedger(); 069 070 boolean tmpReadOnly = monthlyBudgetForm.isSystemViewOnly() || !monthlyBudgetForm.isEditAllowed(); 071 tmpReadOnly |= bcMonthly.getFinancialObjectCode().equalsIgnoreCase(KFSConstants.BudgetConstructionConstants.OBJECT_CODE_2PLG); 072 tmpReadOnly |= (!monthlyBudgetForm.isBenefitsCalculationDisabled() && ((pbgl.getLaborObject() != null) && pbgl.getLaborObject().getFinancialObjectFringeOrSalaryCode().equalsIgnoreCase(BCConstants.LABOR_OBJECT_FRINGE_CODE))); 073 074 monthlyBudgetForm.setBudgetableDocument(SpringContext.getBean(BudgetDocumentService.class).isBudgetableDocumentNoWagesCheck(pbgl.getBudgetConstructionHeader())); 075 monthlyBudgetForm.setMonthlyReadOnly(tmpReadOnly); 076 077 } 078 } 079 080 return forward; 081 } 082 083 protected void populateAuthorizationFields(MonthlyBudgetForm monthlyBudgetForm) { 084 BudgetConstructionAuthorizationStatus authorizationStatus = (BudgetConstructionAuthorizationStatus) GlobalVariables.getUserSession().retrieveObject(BCConstants.BC_DOC_AUTHORIZATION_STATUS_SESSIONKEY); 085 086 if (authorizationStatus == null) { 087 // just return, BudgetExpansionAction.execute() will see the session time out 088 // and redirect back to BudgetConstructionSelection 089 return; 090 } 091 092 monthlyBudgetForm.setDocumentActions(authorizationStatus.getDocumentActions()); 093 monthlyBudgetForm.setEditingMode(authorizationStatus.getEditingMode()); 094 } 095 096 public ActionForward loadExpansionScreen(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 097 098 MonthlyBudgetForm monthlyBudgetForm = (MonthlyBudgetForm) form; 099 100 // use the passed url parms to get the record from DB 101 Map fieldValues = new HashMap(); 102 fieldValues.put("documentNumber", monthlyBudgetForm.getDocumentNumber()); 103 fieldValues.put("universityFiscalYear", monthlyBudgetForm.getUniversityFiscalYear()); 104 fieldValues.put("chartOfAccountsCode", monthlyBudgetForm.getChartOfAccountsCode()); 105 fieldValues.put("accountNumber", monthlyBudgetForm.getAccountNumber()); 106 fieldValues.put("subAccountNumber", monthlyBudgetForm.getSubAccountNumber()); 107 fieldValues.put("financialObjectCode", monthlyBudgetForm.getFinancialObjectCode()); 108 fieldValues.put("financialSubObjectCode", monthlyBudgetForm.getFinancialSubObjectCode()); 109 fieldValues.put("financialBalanceTypeCode", monthlyBudgetForm.getFinancialBalanceTypeCode()); 110 fieldValues.put("financialObjectTypeCode", monthlyBudgetForm.getFinancialObjectTypeCode()); 111 BudgetConstructionMonthly budgetConstructionMonthly = (BudgetConstructionMonthly) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(BudgetConstructionMonthly.class, fieldValues); 112 if (budgetConstructionMonthly == null) { 113 budgetConstructionMonthly = new BudgetConstructionMonthly(); 114 budgetConstructionMonthly.setDocumentNumber(monthlyBudgetForm.getDocumentNumber()); 115 budgetConstructionMonthly.setUniversityFiscalYear(monthlyBudgetForm.getUniversityFiscalYear()); 116 budgetConstructionMonthly.setChartOfAccountsCode(monthlyBudgetForm.getChartOfAccountsCode()); 117 budgetConstructionMonthly.setAccountNumber(monthlyBudgetForm.getAccountNumber()); 118 budgetConstructionMonthly.setSubAccountNumber(monthlyBudgetForm.getSubAccountNumber()); 119 budgetConstructionMonthly.setFinancialObjectCode(monthlyBudgetForm.getFinancialObjectCode()); 120 budgetConstructionMonthly.setFinancialSubObjectCode(monthlyBudgetForm.getFinancialSubObjectCode()); 121 budgetConstructionMonthly.setFinancialBalanceTypeCode(monthlyBudgetForm.getFinancialBalanceTypeCode()); 122 budgetConstructionMonthly.setFinancialObjectTypeCode(monthlyBudgetForm.getFinancialObjectTypeCode()); 123 budgetConstructionMonthly.refreshReferenceObject("pendingBudgetConstructionGeneralLedger"); 124 monthlyBudgetForm.setMonthlyPersisted(false); 125 } 126 else { 127 monthlyBudgetForm.setMonthlyPersisted(true); 128 } 129 monthlyBudgetForm.setBudgetConstructionMonthly(budgetConstructionMonthly); 130 131 132 return mapping.findForward(KFSConstants.MAPPING_BASIC); 133 } 134 135 /** 136 * This saves the data and redisplays 137 * 138 * @param mapping 139 * @param form 140 * @param request 141 * @param response 142 * @return 143 * @throws Exception 144 */ 145 public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 146 147 MonthlyBudgetForm monthlyBudgetForm = (MonthlyBudgetForm) form; 148 BudgetConstructionMonthly budgetConstructionMonthly = monthlyBudgetForm.getBudgetConstructionMonthly(); 149 150 this.replaceMonthlyNullWithZero(budgetConstructionMonthly); 151 152 BudgetConstructionForm budgetConstructionForm = (BudgetConstructionForm) GlobalVariables.getUserSession().retrieveObject(monthlyBudgetForm.getReturnFormKey()); 153 BudgetConstructionDocument bcDoc = budgetConstructionForm.getBudgetConstructionDocument(); 154 boolean rulePassed = SpringContext.getBean(KualiRuleService.class).applyRules(new SaveMonthlyBudgetEvent(BCPropertyConstants.BUDGET_CONSTRUCTION_MONTHLY, bcDoc, budgetConstructionMonthly)); 155 156 if (rulePassed) { 157 158 // getting here means salary detail line monthly totals equal annual 159 // or this is a non-salary detail line and overriding any difference needs to be confirmed 160 KualiInteger monthTotalAmount = budgetConstructionMonthly.getFinancialDocumentMonthTotalLineAmount(); 161 KualiInteger pbglRequestAmount = budgetConstructionMonthly.getPendingBudgetConstructionGeneralLedger().getAccountLineAnnualBalanceAmount(); 162 if (!monthTotalAmount.equals(pbglRequestAmount)){ 163 164 // total is different than annual 165 Object question = request.getParameter(KFSConstants.QUESTION_INST_ATTRIBUTE_NAME); 166 KualiConfigurationService kualiConfiguration = SpringContext.getBean(KualiConfigurationService.class); 167 if (question == null || !(KFSConstants.CONFIRMATION_QUESTION.equals(question))){ 168 // ask question if not already asked 169 String questionText = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(BCKeyConstants.QUESTION_CONFIRM_MONTHLY_OVERRIDE); 170 questionText = StringUtils.replace(questionText, "{0}", pbglRequestAmount.toString()); 171 questionText = StringUtils.replace(questionText, "{1}", monthTotalAmount.toString()); 172 173 return this.performQuestionWithoutInput(mapping, form, request, response, KFSConstants.CONFIRMATION_QUESTION, questionText, KFSConstants.CONFIRMATION_QUESTION, BCConstants.MAPPING_SAVE, ""); 174 } 175 else { 176 Object buttonClicked = request.getParameter(KFSConstants.QUESTION_CLICKED_BUTTON); 177 if ((KFSConstants.CONFIRMATION_QUESTION.equals(question)) && ConfirmationQuestion.YES.equals(buttonClicked)) { 178 179 // yes do the override for non-salary line and save 180 SpringContext.getBean(BudgetDocumentService.class).saveMonthlyBudget(monthlyBudgetForm, budgetConstructionMonthly); 181 GlobalVariables.getMessageList().add(BCKeyConstants.MESSAGE_MONTHLY_ANNUAL_OVERRIDE_SAVED); 182 monthlyBudgetForm.setMonthlyPersisted(true); 183 } 184 } 185 } 186 else { 187 // total is same as annual do the save with no confirmation 188 SpringContext.getBean(BudgetDocumentService.class).saveMonthlyBudget(monthlyBudgetForm, budgetConstructionMonthly); 189 GlobalVariables.getMessageList().add(KFSKeyConstants.MESSAGE_SAVED); 190 monthlyBudgetForm.setMonthlyPersisted(true); 191 } 192 } 193 194 return mapping.findForward(KFSConstants.MAPPING_BASIC); 195 } 196 197 public ActionForward close(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 198 199 MonthlyBudgetForm monthlyBudgetForm = (MonthlyBudgetForm) form; 200 BudgetConstructionMonthly budgetConstructionMonthly = monthlyBudgetForm.getBudgetConstructionMonthly(); 201 202 if (!monthlyBudgetForm.isMonthlyReadOnly()) { 203 Object question = request.getParameter(KFSConstants.QUESTION_INST_ATTRIBUTE_NAME); 204 KualiConfigurationService kualiConfiguration = SpringContext.getBean(KualiConfigurationService.class); 205 206 // logic for close question 207 if (question == null) { 208 // ask question if not already asked 209 return this.performQuestionWithoutInput(mapping, form, request, response, KFSConstants.DOCUMENT_SAVE_BEFORE_CLOSE_QUESTION, kualiConfiguration.getPropertyString(KFSKeyConstants.QUESTION_SAVE_BEFORE_CLOSE), KFSConstants.CONFIRMATION_QUESTION, KFSConstants.MAPPING_CLOSE, ""); 210 } 211 else { 212 Object buttonClicked = request.getParameter(KFSConstants.QUESTION_CLICKED_BUTTON); 213 if ((KFSConstants.CONFIRMATION_QUESTION.equals(question)) || ((KFSConstants.DOCUMENT_SAVE_BEFORE_CLOSE_QUESTION.equals(question)) && ConfirmationQuestion.YES.equals(buttonClicked))) { 214 215 // yes button clicked - validate and save the row 216 return this.save(mapping, form, request, response); 217 } 218 // else go to close logic below 219 } 220 } 221 222 return returnToCaller(mapping, form, request, response); 223 } 224 225 public ActionForward performMonthlySpread(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 226 227 MonthlyBudgetForm tForm = (MonthlyBudgetForm) form; 228 BudgetConstructionMonthly bcMth = tForm.getBudgetConstructionMonthly(); 229 KualiInteger requestAmt = bcMth.getPendingBudgetConstructionGeneralLedger().getAccountLineAnnualBalanceAmount(); 230 if (requestAmt != null) { 231 bcMth.setFinancialDocumentMonth2LineAmount(new KualiInteger(requestAmt.divide(new KualiInteger(12)))); 232 bcMth.setFinancialDocumentMonth3LineAmount(new KualiInteger(requestAmt.divide(new KualiInteger(12)))); 233 bcMth.setFinancialDocumentMonth4LineAmount(new KualiInteger(requestAmt.divide(new KualiInteger(12)))); 234 bcMth.setFinancialDocumentMonth5LineAmount(new KualiInteger(requestAmt.divide(new KualiInteger(12)))); 235 bcMth.setFinancialDocumentMonth6LineAmount(new KualiInteger(requestAmt.divide(new KualiInteger(12)))); 236 bcMth.setFinancialDocumentMonth7LineAmount(new KualiInteger(requestAmt.divide(new KualiInteger(12)))); 237 bcMth.setFinancialDocumentMonth8LineAmount(new KualiInteger(requestAmt.divide(new KualiInteger(12)))); 238 bcMth.setFinancialDocumentMonth9LineAmount(new KualiInteger(requestAmt.divide(new KualiInteger(12)))); 239 bcMth.setFinancialDocumentMonth10LineAmount(new KualiInteger(requestAmt.divide(new KualiInteger(12)))); 240 bcMth.setFinancialDocumentMonth11LineAmount(new KualiInteger(requestAmt.divide(new KualiInteger(12)))); 241 bcMth.setFinancialDocumentMonth12LineAmount(new KualiInteger(requestAmt.divide(new KualiInteger(12)))); 242 243 KualiInteger totSoFar = bcMth.getFinancialDocumentMonth2LineAmount(); 244 totSoFar = totSoFar.add(bcMth.getFinancialDocumentMonth3LineAmount().add(bcMth.getFinancialDocumentMonth4LineAmount())); 245 totSoFar = totSoFar.add(bcMth.getFinancialDocumentMonth5LineAmount().add(bcMth.getFinancialDocumentMonth6LineAmount())); 246 totSoFar = totSoFar.add(bcMth.getFinancialDocumentMonth7LineAmount().add(bcMth.getFinancialDocumentMonth8LineAmount())); 247 totSoFar = totSoFar.add(bcMth.getFinancialDocumentMonth9LineAmount().add(bcMth.getFinancialDocumentMonth10LineAmount())); 248 totSoFar = totSoFar.add(bcMth.getFinancialDocumentMonth11LineAmount().add(bcMth.getFinancialDocumentMonth12LineAmount())); 249 250 bcMth.setFinancialDocumentMonth1LineAmount(requestAmt.subtract(totSoFar)); 251 } 252 253 return mapping.findForward(KFSConstants.MAPPING_BASIC); 254 } 255 256 public ActionForward performMonthlyZero(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 257 258 MonthlyBudgetForm tForm = (MonthlyBudgetForm) form; 259 BudgetConstructionMonthly bcMth = tForm.getBudgetConstructionMonthly(); 260 261 bcMth.setFinancialDocumentMonth1LineAmount(new KualiInteger(0)); 262 bcMth.setFinancialDocumentMonth2LineAmount(new KualiInteger(0)); 263 bcMth.setFinancialDocumentMonth3LineAmount(new KualiInteger(0)); 264 bcMth.setFinancialDocumentMonth4LineAmount(new KualiInteger(0)); 265 bcMth.setFinancialDocumentMonth5LineAmount(new KualiInteger(0)); 266 bcMth.setFinancialDocumentMonth6LineAmount(new KualiInteger(0)); 267 bcMth.setFinancialDocumentMonth7LineAmount(new KualiInteger(0)); 268 bcMth.setFinancialDocumentMonth8LineAmount(new KualiInteger(0)); 269 bcMth.setFinancialDocumentMonth9LineAmount(new KualiInteger(0)); 270 bcMth.setFinancialDocumentMonth10LineAmount(new KualiInteger(0)); 271 bcMth.setFinancialDocumentMonth11LineAmount(new KualiInteger(0)); 272 bcMth.setFinancialDocumentMonth12LineAmount(new KualiInteger(0)); 273 274 return mapping.findForward(KFSConstants.MAPPING_BASIC); 275 } 276 277 public ActionForward performMonthlyDelete(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 278 279 MonthlyBudgetForm monthlyBudgetForm = (MonthlyBudgetForm) form; 280 BudgetConstructionMonthly budgetConstructionMonthly = monthlyBudgetForm.getBudgetConstructionMonthly(); 281 282 // don't really need this test since the delete button isn't displayed in readOnly mode 283 if (!monthlyBudgetForm.isSystemViewOnly() && monthlyBudgetForm.isEditAllowed()) { 284 Object question = request.getParameter(KFSConstants.QUESTION_INST_ATTRIBUTE_NAME); 285 KualiConfigurationService kualiConfiguration = SpringContext.getBean(KualiConfigurationService.class); 286 287 // logic for delete question 288 if (question == null) { 289 // ask question if not already asked 290 return this.performQuestionWithoutInput(mapping, form, request, response, KFSConstants.DOCUMENT_DELETE_QUESTION, kualiConfiguration.getPropertyString(BCKeyConstants.QUESTION_DELETE), KFSConstants.CONFIRMATION_QUESTION, KFSConstants.MAPPING_CLOSE, ""); 291 } 292 else { 293 Object buttonClicked = request.getParameter(KFSConstants.QUESTION_CLICKED_BUTTON); 294 if ((KFSConstants.DOCUMENT_DELETE_QUESTION.equals(question)) && ConfirmationQuestion.YES.equals(buttonClicked)) { 295 296 // if yes button clicked - delete and close 297 SpringContext.getBean(BusinessObjectService.class).delete(budgetConstructionMonthly); 298 299 // if benefits calculation is turned on, check if the line is benefits related and call for calculation after 300 // save 301 BudgetConstructionForm budgetConstructionForm = (BudgetConstructionForm) GlobalVariables.getUserSession().retrieveObject(monthlyBudgetForm.getReturnFormKey()); 302 BudgetConstructionDocument bcDoc = budgetConstructionForm.getBudgetConstructionDocument(); 303 SpringContext.getBean(BudgetDocumentService.class).callForBenefitsCalcIfNeeded(bcDoc, budgetConstructionMonthly, KualiInteger.ZERO); 304 305 return returnToCaller(mapping, form, request, response); 306 } 307 // else go to close logic below 308 } 309 } 310 311 return mapping.findForward(KFSConstants.MAPPING_BASIC); 312 } 313 314 /** 315 * checks monthly object for nulls in the amounts and replaces with zeros 316 * 317 * @param bcMth 318 */ 319 public void replaceMonthlyNullWithZero(BudgetConstructionMonthly bcMth) { 320 321 if (bcMth.getFinancialDocumentMonth1LineAmount() == null) { 322 bcMth.setFinancialDocumentMonth1LineAmount(new KualiInteger(0)); 323 } 324 if (bcMth.getFinancialDocumentMonth2LineAmount() == null) { 325 bcMth.setFinancialDocumentMonth2LineAmount(new KualiInteger(0)); 326 } 327 if (bcMth.getFinancialDocumentMonth3LineAmount() == null) { 328 bcMth.setFinancialDocumentMonth3LineAmount(new KualiInteger(0)); 329 } 330 if (bcMth.getFinancialDocumentMonth4LineAmount() == null) { 331 bcMth.setFinancialDocumentMonth4LineAmount(new KualiInteger(0)); 332 } 333 if (bcMth.getFinancialDocumentMonth5LineAmount() == null) { 334 bcMth.setFinancialDocumentMonth5LineAmount(new KualiInteger(0)); 335 } 336 if (bcMth.getFinancialDocumentMonth6LineAmount() == null) { 337 bcMth.setFinancialDocumentMonth6LineAmount(new KualiInteger(0)); 338 } 339 if (bcMth.getFinancialDocumentMonth7LineAmount() == null) { 340 bcMth.setFinancialDocumentMonth7LineAmount(new KualiInteger(0)); 341 } 342 if (bcMth.getFinancialDocumentMonth8LineAmount() == null) { 343 bcMth.setFinancialDocumentMonth8LineAmount(new KualiInteger(0)); 344 } 345 if (bcMth.getFinancialDocumentMonth9LineAmount() == null) { 346 bcMth.setFinancialDocumentMonth9LineAmount(new KualiInteger(0)); 347 } 348 if (bcMth.getFinancialDocumentMonth10LineAmount() == null) { 349 bcMth.setFinancialDocumentMonth10LineAmount(new KualiInteger(0)); 350 } 351 if (bcMth.getFinancialDocumentMonth11LineAmount() == null) { 352 bcMth.setFinancialDocumentMonth11LineAmount(new KualiInteger(0)); 353 } 354 if (bcMth.getFinancialDocumentMonth12LineAmount() == null) { 355 bcMth.setFinancialDocumentMonth12LineAmount(new KualiInteger(0)); 356 } 357 } 358 359 /** 360 * This action changes the value of the hide field in the user interface so that when the page is rendered, the UI knows to show 361 * all of the descriptions and labels for each of the pbgl line values. 362 * 363 * @param mapping 364 * @param form 365 * @param request 366 * @param response 367 * @return ActionForward 368 * @throws Exception 369 */ 370 public ActionForward showDetails(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 371 MonthlyBudgetForm tForm = (MonthlyBudgetForm) form; 372 tForm.setHideDetails(false); 373 return mapping.findForward(KFSConstants.MAPPING_BASIC); 374 } 375 376 /** 377 * This action toggles the value of the hide field in the user interface to "hide" so that when the page is rendered, the UI 378 * displays values without all of the descriptions and labels for each of the pbgl lines. 379 * 380 * @param mapping 381 * @param form 382 * @param request 383 * @param response 384 * @return ActionForward 385 * @throws Exception 386 */ 387 public ActionForward hideDetails(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 388 MonthlyBudgetForm tForm = (MonthlyBudgetForm) form; 389 tForm.setHideDetails(true); 390 return mapping.findForward(KFSConstants.MAPPING_BASIC); 391 } 392 }