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.Arrays;
019 import java.util.Collections;
020 import java.util.HashMap;
021 import java.util.List;
022 import java.util.Map;
023
024 import javax.servlet.http.HttpServletRequest;
025 import javax.servlet.http.HttpServletResponse;
026 import javax.servlet.http.HttpSession;
027
028 import org.apache.commons.lang.StringUtils;
029 import org.apache.struts.action.ActionForm;
030 import org.apache.struts.action.ActionForward;
031 import org.apache.struts.action.ActionMapping;
032 import org.kuali.kfs.fp.service.FiscalYearFunctionControlService;
033 import org.kuali.kfs.module.bc.BCConstants;
034 import org.kuali.kfs.module.bc.BCKeyConstants;
035 import org.kuali.kfs.module.bc.BCPropertyConstants;
036 import org.kuali.kfs.module.bc.BCConstants.OrgSelOpMode;
037 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAccountOrganizationHierarchy;
038 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAccountSelect;
039 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionHeader;
040 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionLockSummary;
041 import org.kuali.kfs.module.bc.document.BudgetConstructionDocument;
042 import org.kuali.kfs.module.bc.document.service.BudgetDocumentService;
043 import org.kuali.kfs.module.bc.document.service.OrganizationBCDocumentSearchService;
044 import org.kuali.kfs.module.bc.document.validation.event.AddBudgetConstructionDocumentEvent;
045 import org.kuali.kfs.module.bc.report.ReportControlListBuildHelper;
046 import org.kuali.kfs.module.bc.util.BudgetUrlUtil;
047 import org.kuali.kfs.sys.KFSConstants;
048 import org.kuali.kfs.sys.KFSKeyConstants;
049 import org.kuali.kfs.sys.KFSPropertyConstants;
050 import org.kuali.kfs.sys.KFSConstants.BudgetConstructionConstants;
051 import org.kuali.kfs.sys.context.SpringContext;
052 import org.kuali.rice.kns.question.ConfirmationQuestion;
053 import org.kuali.rice.kns.service.DocumentService;
054 import org.kuali.rice.kns.service.KualiConfigurationService;
055 import org.kuali.rice.kns.service.KualiRuleService;
056 import org.kuali.rice.kns.service.PersistenceService;
057 import org.kuali.rice.kns.util.GlobalVariables;
058
059
060 /**
061 * This class...
062 */
063 public class BudgetConstructionSelectionAction extends BudgetExpansionAction {
064 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(BudgetConstructionSelectionAction.class);
065
066 /**
067 * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
068 * org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
069 */
070 @Override
071 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
072 ActionForward forward = super.execute(mapping, form, request, response);
073
074 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
075
076 // set force rebuild on report build helper so each time we go out of report screen and come back the list will be rebuilt
077 ReportControlListBuildHelper buildHelper = (ReportControlListBuildHelper) GlobalVariables.getUserSession().retrieveObject(BCConstants.Report.CONTROL_BUILD_HELPER_SESSION_NAME);
078 if (buildHelper == null) {
079 buildHelper = new ReportControlListBuildHelper();
080 }
081 buildHelper.setForceRebuild(true);
082 GlobalVariables.getUserSession().addObject(BCConstants.Report.CONTROL_BUILD_HELPER_SESSION_NAME, buildHelper);
083
084 return forward;
085 }
086
087 /**
088 * Performs the initial load of the selection screen. Checks for the active BC fiscal year and initializes the fiscal year to be
089 * budgeted and used for all other operations throughout the system
090 *
091 * @param mapping
092 * @param form
093 * @param request
094 * @param response
095 * @return
096 * @throws Exception
097 */
098 public ActionForward loadExpansionScreen(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
099
100 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
101 FiscalYearFunctionControlService fiscalYearFunctionControlService = SpringContext.getBean(FiscalYearFunctionControlService.class);
102 KualiConfigurationService kualiConfiguration = SpringContext.getBean(KualiConfigurationService.class);
103
104 Boolean isBCInProgress = (Boolean) GlobalVariables.getUserSession().retrieveObject(BCConstants.BC_IN_PROGRESS_SESSIONFLAG);
105 if (isBCInProgress != null && isBCInProgress) {
106
107 Object question = request.getParameter(KFSConstants.QUESTION_INST_ATTRIBUTE_NAME);
108 if (question == null) {
109 // ask question if not already asked
110 return this.performQuestionWithoutInput(mapping, form, request, response, KFSConstants.DOCUMENT_DELETE_QUESTION, kualiConfiguration.getPropertyString(BCKeyConstants.QUESTION_CONFIRM_CLEANUP), KFSConstants.CONFIRMATION_QUESTION, "loadExpansionScreen", "");
111 }
112 else {
113 Object buttonClicked = request.getParameter(KFSConstants.QUESTION_CLICKED_BUTTON);
114 if ((KFSConstants.DOCUMENT_DELETE_QUESTION.equals(question)) && ConfirmationQuestion.YES.equals(buttonClicked)) {
115 // clear out all BC related Objects(forms) stored in GlobalVariables.UserSession
116 // to help prevent memory leaks if the user fails to use application control flow
117 GlobalVariables.getUserSession().removeObjectsByPrefix(BCConstants.FORMKEY_PREFIX);
118
119 // clear out any session object form attribute
120 HttpSession sess = request.getSession(Boolean.FALSE);
121 sess.removeAttribute(BCConstants.MAPPING_ATTRIBUTE_KUALI_FORM);
122
123 }
124 else {
125 budgetConstructionSelectionForm.setSessionInProgressDetected(true);
126 GlobalVariables.getMessageList().add(BCKeyConstants.MESSAGE_BUDGET_PREVIOUS_SESSION_NOTCLEANED);
127 return mapping.findForward(KFSConstants.MAPPING_BASIC);
128 }
129 }
130 }
131
132
133 // get active BC year and complain when anything other than one year active for now
134 List<Integer> activeBCYears = fiscalYearFunctionControlService.getActiveBudgetYear();
135 if (activeBCYears.size() != 1) {
136 budgetConstructionSelectionForm.setUniversityFiscalYear(null);
137 if (activeBCYears.size() < 1) {
138 GlobalVariables.getMessageList().add(BCKeyConstants.MESSAGE_BUDGET_SYSTEM_NOT_ACTIVE);
139 }
140 else {
141 GlobalVariables.getMessageList().add(BCKeyConstants.MESSAGE_BUDGET_SYSTEM_MULTIPLE_ACTIVE);
142 }
143 }
144 else {
145 budgetConstructionSelectionForm.setUniversityFiscalYear(activeBCYears.get(0));
146 }
147
148 budgetConstructionSelectionForm.getBudgetConstructionHeader().setUniversityFiscalYear(budgetConstructionSelectionForm.getUniversityFiscalYear());
149
150 // add the heart beat flag used to test for session time out in the expansion screens
151 GlobalVariables.getUserSession().addObject(BCConstants.BC_HEARTBEAT_SESSIONFLAG, Boolean.TRUE);
152
153 return mapping.findForward(KFSConstants.MAPPING_BASIC);
154 }
155
156 /**
157 * called when a session time out happens in one of the BC expansion screens to load the selection screen with a message
158 * notifying the user about the session time out.
159 *
160 * @param mapping
161 * @param form
162 * @param request
163 * @param response
164 * @return
165 * @throws Exception
166 */
167 public ActionForward loadExpansionScreenSessionTimeOut(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
168
169 GlobalVariables.getMessageList().add(BCKeyConstants.MESSAGE_BUDGET_PREVIOUS_SESSION_TIMEOUT);
170 return loadExpansionScreen(mapping, form, request, response);
171 }
172
173 /**
174 * Opens a Budget Construction document. Creates a new (blank) BC document, if one does not exist. The new BC document is
175 * created at level zero and the associated account organization hierarchy is built.
176 *
177 * @param mapping
178 * @param form
179 * @param request
180 * @param response
181 * @return
182 * @throws Exception
183 */
184 public ActionForward performBCDocumentOpen(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
185
186 // do lookup of header and call open if found, otherwise create blank doc and account hierarchy, then open if no error
187 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
188
189 BudgetConstructionHeader bcHeader = budgetConstructionSelectionForm.getBudgetConstructionHeader();
190
191 Integer universityFiscalYear = bcHeader.getUniversityFiscalYear();
192 String chartOfAccountsCode = bcHeader.getChartOfAccountsCode();
193 String accountNumber = bcHeader.getAccountNumber();
194 String subAccountNumber;
195 if (StringUtils.isBlank(bcHeader.getSubAccountNumber())) {
196 subAccountNumber = KFSConstants.getDashSubAccountNumber();
197 }
198 else {
199 subAccountNumber = bcHeader.getSubAccountNumber();
200 }
201
202 BudgetConstructionHeader tHeader = (BudgetConstructionHeader) SpringContext.getBean(BudgetDocumentService.class).getByCandidateKey(chartOfAccountsCode, accountNumber, subAccountNumber, universityFiscalYear);
203 if (tHeader == null) {
204
205 // get a bare bones BC document to run the rule engine against
206 // if rulesPassed, use the document to instantiate to the DB
207 BudgetConstructionDocument budgetConstructionDocument = (BudgetConstructionDocument) SpringContext.getBean(DocumentService.class).getNewDocument(BCConstants.BUDGET_CONSTRUCTION_DOCUMENT_NAME);
208 budgetConstructionDocument.setUniversityFiscalYear(universityFiscalYear);
209 budgetConstructionDocument.setChartOfAccountsCode(chartOfAccountsCode);
210 budgetConstructionDocument.setAccountNumber(accountNumber);
211 budgetConstructionDocument.setSubAccountNumber(subAccountNumber);
212 List refreshFields = Collections.unmodifiableList(Arrays.asList(new String[] { KFSPropertyConstants.ACCOUNT, KFSPropertyConstants.SUB_ACCOUNT }));
213 SpringContext.getBean(PersistenceService.class).retrieveReferenceObjects(budgetConstructionDocument, refreshFields);
214
215 boolean rulePassed = SpringContext.getBean(KualiRuleService.class).applyRules(new AddBudgetConstructionDocumentEvent(BCPropertyConstants.BUDGET_CONSTRUCTION_HEADER, budgetConstructionDocument));
216 if (rulePassed) {
217 List<BudgetConstructionAccountOrganizationHierarchy> newAccountOrganizationHierarchy = (List<BudgetConstructionAccountOrganizationHierarchy>) SpringContext.getBean(BudgetDocumentService.class).retrieveOrBuildAccountOrganizationHierarchy(universityFiscalYear, chartOfAccountsCode, accountNumber);
218 if (newAccountOrganizationHierarchy == null || newAccountOrganizationHierarchy.isEmpty()) {
219 GlobalVariables.getMessageMap().putError("budgetConstructionHeader", BCKeyConstants.ERROR_BUDGET_ACCOUNT_ORGANIZATION_HIERARCHY, chartOfAccountsCode + "-" + accountNumber);
220 return mapping.findForward(KFSConstants.MAPPING_BASIC);
221 }
222
223 // hierarchy created - attempt to create BC document
224 // SpringContext.getBean(BudgetDocumentService.class).instantiateNewBudgetConstructionDocument(universityFiscalYear,
225 // chartOfAccountsCode, accountNumber, subAccountNumber);
226 SpringContext.getBean(BudgetDocumentService.class).instantiateNewBudgetConstructionDocument(budgetConstructionDocument);
227 tHeader = (BudgetConstructionHeader) SpringContext.getBean(BudgetDocumentService.class).getByCandidateKey(chartOfAccountsCode, accountNumber, subAccountNumber, universityFiscalYear);
228 if (tHeader == null) {
229
230 GlobalVariables.getMessageMap().putError("budgetConstructionHeader", KFSKeyConstants.ERROR_EXISTENCE, "BC Document");
231 return mapping.findForward(KFSConstants.MAPPING_BASIC);
232 }
233 else {
234 // drop to open the newly created document
235 }
236 }
237 else {
238 return mapping.findForward(KFSConstants.MAPPING_BASIC);
239 }
240 }
241 this.flagBCInProgress();
242
243 // open the existing or newly created BC document
244 Map<String, String> parameters = new HashMap<String, String>();
245 parameters.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, BCConstants.BC_DOCUMENT_METHOD);
246 parameters.put("universityFiscalYear", tHeader.getUniversityFiscalYear().toString());
247 parameters.put("chartOfAccountsCode", tHeader.getChartOfAccountsCode());
248 parameters.put("accountNumber", tHeader.getAccountNumber());
249 parameters.put("subAccountNumber", tHeader.getSubAccountNumber());
250 parameters.put("pickListMode", "false");
251 parameters.put(BCPropertyConstants.MAIN_WINDOW, "true");
252
253 String lookupUrl = BudgetUrlUtil.buildBudgetUrl(mapping, budgetConstructionSelectionForm, BCConstants.BC_DOCUMENT_ACTION, parameters);
254
255 return new ActionForward(lookupUrl, true);
256 }
257
258
259 /**
260 * @see org.kuali.rice.kns.web.struts.action.KualiAction#refresh(org.apache.struts.action.ActionMapping,
261 * org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
262 */
263 @Override
264 public ActionForward refresh(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
265
266 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
267 String refreshCaller = request.getParameter(KFSConstants.REFRESH_CALLER);
268
269 // returning from account lookup sets refreshCaller to accountLookupable, due to setting in account.xml
270 if (refreshCaller != null && (refreshCaller.toUpperCase().endsWith(KFSConstants.LOOKUPABLE_SUFFIX.toUpperCase()))) {
271 final List REFRESH_FIELDS = Collections.unmodifiableList(Arrays.asList(new String[] { "chartOfAccounts", "account", "subAccount", "budgetConstructionAccountReports" }));
272 SpringContext.getBean(PersistenceService.class).retrieveReferenceObjects(budgetConstructionSelectionForm.getBudgetConstructionHeader(), REFRESH_FIELDS);
273 }
274
275 // clearout any BC inprogress semaphore, regardless of where we are returning from
276 // this handles the lock monitor no refreshCaller return case
277 GlobalVariables.getUserSession().removeObject(BCConstants.BC_IN_PROGRESS_SESSIONFLAG);
278
279 // clear out any session object form attribute
280 HttpSession sess = request.getSession(Boolean.FALSE);
281 sess.removeAttribute(BCConstants.MAPPING_ATTRIBUTE_KUALI_FORM);
282
283 return mapping.findForward(KFSConstants.MAPPING_BASIC);
284 }
285
286 public ActionForward returnToCaller(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
287
288 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
289
290 return mapping.findForward(KFSConstants.MAPPING_PORTAL);
291 }
292
293 public ActionForward performOrgSalarySetting(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
294
295 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
296
297 ActionForward forward = performOrgSelectionTree(OrgSelOpMode.SALSET, mapping, form, request, response);
298
299 return forward;
300 }
301
302 /**
303 * This method sets up to forward to the BC Organization Selection screen using a specific operating mode. The various operating
304 * modes include PULLUP, PUSHDOWN, REPORTS, SALSET, ACCOUNT.
305 *
306 * @param opMode
307 * @param mapping
308 * @param form
309 * @param request
310 * @param response
311 * @return
312 * @throws Exception
313 */
314 public ActionForward performOrgSelectionTree(OrgSelOpMode opMode, ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
315 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
316
317 this.flagBCInProgress();
318
319 Map<String, String> parameters = new HashMap<String, String>();
320 parameters.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, BCConstants.ORG_SEL_TREE_METHOD);
321 parameters.put("operatingMode", opMode.toString());
322 parameters.put("universityFiscalYear", budgetConstructionSelectionForm.getUniversityFiscalYear().toString());
323
324 String lookupUrl = BudgetUrlUtil.buildBudgetUrl(mapping, budgetConstructionSelectionForm, BCConstants.ORG_SEL_TREE_ACTION, parameters);
325
326 return new ActionForward(lookupUrl, true);
327 }
328
329 /**
330 * Passes control to the Organization Selection to run the organization reports subsystem
331 *
332 * @param mapping
333 * @param form
334 * @param request
335 * @param response
336 * @return
337 * @throws Exception
338 */
339 public ActionForward performReportDump(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
340 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
341 ActionForward forward = performOrgSelectionTree(OrgSelOpMode.REPORTS, mapping, form, request, response);
342
343 return forward;
344 }
345
346 /**
347 * Passes control to the request import subsystem
348 *
349 * @param mapping
350 * @param form
351 * @param request
352 * @param response
353 * @return
354 * @throws Exception
355 */
356 public ActionForward performRequestImport(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
357 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
358 this.flagBCInProgress();
359
360 String lookupUrl = BudgetUrlUtil.buildBudgetUrl(mapping, budgetConstructionSelectionForm, BCConstants.REQUEST_IMPORT_ACTION, null);
361
362 return new ActionForward(lookupUrl, true);
363 }
364
365 /**
366 * Passes control to the Pay Rate import/export subsystem
367 *
368 * @param mapping
369 * @param form
370 * @param request
371 * @param response
372 * @return
373 * @throws Exception
374 */
375 public ActionForward performPayrateImportExport(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
376 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
377 this.flagBCInProgress();
378
379 String lookupUrl = BudgetUrlUtil.buildBudgetUrl(mapping, budgetConstructionSelectionForm, BCConstants.PAYRATE_IMPORT_EXPORT_ACTION, null);
380
381 return new ActionForward(lookupUrl, true);
382 }
383
384 /**
385 * Builds forward URL to lock monitor page, following expansion screen pattern. Also checks if the user has permission for the
386 * unlock action and sets the show action column property accordingly.
387 *
388 * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
389 * org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
390 */
391 public ActionForward performLockMonitor(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
392 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
393 this.flagBCInProgress();
394
395 Map<String, String> urlParms = new HashMap<String, String>();
396
397 // forward to temp list action for displaying results
398 String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, budgetConstructionSelectionForm, BCConstants.TempListLookupMode.LOCK_MONITOR, BudgetConstructionLockSummary.class.getName(), urlParms);
399
400 return new ActionForward(url, true);
401 }
402
403 /**
404 * Passes control to the Organization Selection to run the organization pullup subsystem
405 *
406 * @param mapping
407 * @param form
408 * @param request
409 * @param response
410 * @return
411 * @throws Exception
412 */
413 public ActionForward performOrgPullup(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
414 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
415 ActionForward forward = performOrgSelectionTree(OrgSelOpMode.PULLUP, mapping, form, request, response);
416
417 return forward;
418 }
419
420 /**
421 * Passes control to the Organization Selection to run the organization pushdown subsystem
422 *
423 * @param mapping
424 * @param form
425 * @param request
426 * @param response
427 * @return
428 * @throws Exception
429 */
430 public ActionForward performOrgPushdown(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
431 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
432 ActionForward forward = performOrgSelectionTree(OrgSelOpMode.PUSHDOWN, mapping, form, request, response);
433
434 return forward;
435 }
436
437 /**
438 * Calls service to build the account list for which the user is a manager and delegate. Then forwards to temp list action to
439 * display the results.
440 *
441 * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
442 * org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
443 */
444 public ActionForward performMyAccounts(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
445 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
446 this.flagBCInProgress();
447
448 // call service to build account list and give message if empty
449 int rowCount = SpringContext.getBean(OrganizationBCDocumentSearchService.class).buildAccountManagerDelegateList(GlobalVariables.getUserSession().getPerson().getPrincipalId(), budgetConstructionSelectionForm.getUniversityFiscalYear());
450 if (rowCount == 0) {
451 GlobalVariables.getMessageList().add(BCKeyConstants.ERROR_NO_RECORDS_MY_ACCOUNTS);
452
453 return mapping.findForward(KFSConstants.MAPPING_BASIC);
454 }
455
456 // forward to temp list action for displaying results
457 String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, budgetConstructionSelectionForm, BCConstants.TempListLookupMode.ACCOUNT_SELECT_MANAGER_DELEGATE, BudgetConstructionAccountSelect.class.getName(), null);
458
459 return new ActionForward(url, true);
460 }
461
462 /**
463 * Passes control to the Organization Selection to run the organization budgeted account list subsystem
464 *
465 * @param mapping
466 * @param form
467 * @param request
468 * @param response
469 * @return
470 * @throws Exception
471 */
472 public ActionForward performMyOrganization(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
473 BudgetConstructionSelectionForm budgetConstructionSelectionForm = (BudgetConstructionSelectionForm) form;
474 ActionForward forward = performOrgSelectionTree(OrgSelOpMode.ACCOUNT, mapping, form, request, response);
475
476 return forward;
477 }
478
479 public void flagBCInProgress() {
480
481 // Overwrite or add the BC in progress flag
482 // This is used as a semaphore to control cleanup of session BC Temp objects
483 GlobalVariables.getUserSession().addObject(BCConstants.BC_IN_PROGRESS_SESSIONFLAG, Boolean.TRUE);
484 }
485 }