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.text.MessageFormat;
019    import java.util.ArrayList;
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.coa.businessobject.Organization;
033    import org.kuali.kfs.module.bc.BCConstants;
034    import org.kuali.kfs.module.bc.BCKeyConstants;
035    import org.kuali.kfs.module.bc.BudgetConstructionReportMode;
036    import org.kuali.kfs.module.bc.BCConstants.OrgSelControlOption;
037    import org.kuali.kfs.module.bc.BCConstants.OrgSelOpMode;
038    import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAccountSelect;
039    import org.kuali.kfs.module.bc.businessobject.BudgetConstructionIntendedIncumbentSelect;
040    import org.kuali.kfs.module.bc.businessobject.BudgetConstructionOrganizationReports;
041    import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPositionSelect;
042    import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPullup;
043    import org.kuali.kfs.module.bc.document.service.BudgetConstructionProcessorService;
044    import org.kuali.kfs.module.bc.document.service.BudgetOrganizationTreeService;
045    import org.kuali.kfs.module.bc.document.service.BudgetPushPullService;
046    import org.kuali.kfs.module.bc.document.service.OrganizationBCDocumentSearchService;
047    import org.kuali.kfs.module.bc.report.ReportControlListBuildHelper;
048    import org.kuali.kfs.module.bc.util.BudgetUrlUtil;
049    import org.kuali.kfs.sys.KFSConstants;
050    import org.kuali.kfs.sys.context.SpringContext;
051    import org.kuali.rice.kim.bo.Person;
052    import org.kuali.rice.kns.service.BusinessObjectService;
053    import org.kuali.rice.kns.service.KualiConfigurationService;
054    import org.kuali.rice.kns.util.GlobalVariables;
055    import org.kuali.rice.kns.util.KNSConstants;
056    import org.kuali.rice.kns.util.TypedArrayList;
057    import org.kuali.rice.core.util.KeyLabelPair;
058    
059    /**
060     * Handles organization budget action requests from menu.
061     */
062    public class OrganizationSelectionTreeAction extends BudgetExpansionAction {
063        private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OrganizationSelectionTreeAction.class);
064    
065        /**
066         * @see org.kuali.kfs.module.bc.document.web.struts.BudgetExpansionAction#execute(org.apache.struts.action.ActionMapping,
067         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
068         */
069        @Override
070        public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
071    
072            ActionForward actionForward = super.execute(mapping, form, request, response);
073    
074            OrganizationSelectionTreeForm orgSelTreeForm = (OrganizationSelectionTreeForm) form;
075            
076            if (!orgSelTreeForm.isLostSession()){
077    
078                // re-init the session form if session scoped
079                if (orgSelTreeForm.getMethodToCall().equals("refresh")) {
080                    if (BCConstants.MAPPING_SCOPE_SESSION.equals(mapping.getScope())) {
081                        HttpSession sess = request.getSession(Boolean.FALSE);
082                        String formName = mapping.getAttribute();
083                        sess.setAttribute(formName, orgSelTreeForm);
084                    }
085                }
086    
087                if (orgSelTreeForm.getPullFlagKeyLabels().isEmpty() && orgSelTreeForm.getOperatingMode() != null) {
088                    OrgSelOpMode opMode = OrgSelOpMode.valueOf(orgSelTreeForm.getOperatingMode());
089                    switch (opMode) {
090                        case SALSET:
091                            orgSelTreeForm.setOperatingModeTitle("Budget Salary Setting Organization Selection");
092                            orgSelTreeForm.setOperatingModePullFlagLabel("Selected");
093                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.NO.getKey(), OrgSelControlOption.NO.getLabel()));
094                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.YES.getKey(), OrgSelControlOption.YES.getLabel()));
095                            break;
096                        case REPORTS:
097                            orgSelTreeForm.setOperatingModeTitle("BC Reports Organization Selection");
098                            orgSelTreeForm.setOperatingModePullFlagLabel("Selected");
099                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.NO.getKey(), OrgSelControlOption.NO.getLabel()));
100                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.YES.getKey(), OrgSelControlOption.YES.getLabel()));
101                            break;
102                        case PULLUP:
103                            orgSelTreeForm.setOperatingModeTitle("BC Pull Up Organization Selection");
104                            orgSelTreeForm.setOperatingModePullFlagLabel("Pull Up Type");
105                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.NOTSEL.getKey(), OrgSelControlOption.NOTSEL.getLabel()));
106                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.BOTH.getKey(), OrgSelControlOption.BOTH.getLabel()));
107                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.ORG.getKey(), OrgSelControlOption.ORG.getLabel()));
108                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.SUBORG.getKey(), OrgSelControlOption.SUBORG.getLabel()));
109                            break;
110                        case PUSHDOWN:
111                            orgSelTreeForm.setOperatingModeTitle("BC Push Down Organization Selection");
112                            orgSelTreeForm.setOperatingModePullFlagLabel("Push Down Type");
113                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.NOTSEL.getKey(), OrgSelControlOption.NOTSEL.getLabel()));
114                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.ORGLEV.getKey(), OrgSelControlOption.ORGLEV.getLabel()));
115                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.MGRLEV.getKey(), OrgSelControlOption.MGRLEV.getLabel()));
116                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.ORGMGRLEV.getKey(), OrgSelControlOption.ORGMGRLEV.getLabel()));
117                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.LEVONE.getKey(), OrgSelControlOption.LEVONE.getLabel()));
118                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.LEVZERO.getKey(), OrgSelControlOption.LEVZERO.getLabel()));
119                            break;
120                        default:
121                            // default to ACCOUNT operating mode
122                            orgSelTreeForm.setOperatingModeTitle("Budgeted Account List Search Organization Selection");
123                            orgSelTreeForm.setOperatingModePullFlagLabel("Selected");
124                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.NO.getKey(), OrgSelControlOption.NO.getLabel()));
125                            orgSelTreeForm.getPullFlagKeyLabels().add(new KeyLabelPair(OrgSelControlOption.YES.getKey(), OrgSelControlOption.YES.getLabel()));
126                            break;
127                    }
128                }
129            }
130    
131            return actionForward;
132        }
133    
134        /**
135         * Sets up the initial mode of the drill down screen based on a passed in calling mode attribute This can be one of five modes -
136         * pullup, pushdown, reports, salset, account. Each mode causes a slightly different rendition of the controls presented to the
137         * user, but the basic point of view selection and organization drill down functionality is the same in all five modes.
138         * 
139         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
140         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
141         */
142        public ActionForward loadExpansionScreen(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
143            OrganizationSelectionTreeForm orgSelTreeForm = (OrganizationSelectionTreeForm) form;
144            Person person = GlobalVariables.getUserSession().getPerson();
145    
146            // check if user has only one available point of view. if so, select that point of view and build selection
147            List<Organization> pointOfViewOrgs = SpringContext.getBean(BudgetConstructionProcessorService.class).getProcessorOrgs(person);
148            if (pointOfViewOrgs != null && pointOfViewOrgs.size() == 1) {
149                orgSelTreeForm.setCurrentPointOfViewKeyCode(pointOfViewOrgs.get(0).getChartOfAccountsCode() + "-" + pointOfViewOrgs.get(0).getOrganizationCode());
150    
151                return performBuildPointOfView(mapping, form, request, response);
152            }
153            if (pointOfViewOrgs.isEmpty()) {
154                GlobalVariables.getMessageMap().putError("pointOfViewOrg", BCKeyConstants.ERROR_BUDGET_USER_NOT_ORG_APPROVER);
155            }
156    
157            return mapping.findForward(KFSConstants.MAPPING_BASIC);
158        }
159    
160        /**
161         * Called by the close button. It removes the user's BudgetConstructionPullup table rows and returns the user to the seleection
162         * screen action.
163         * 
164         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
165         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
166         */
167        public ActionForward returnToCaller(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
168            // depopulate any selection subtrees for the user
169            String principalName = GlobalVariables.getUserSession().getPerson().getPrincipalId();
170            SpringContext.getBean(BudgetOrganizationTreeService.class).cleanPullup(principalName);
171    
172            return super.returnToCaller(mapping, form, request, response);
173        }
174    
175        /**
176         * Implements functionality behind the refresh button on the Organization Selection Tree screen. This is also called when the
177         * value of the point of view select control changed and javascript is enabled on the user's browser
178         * 
179         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
180         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
181         */
182        public ActionForward performBuildPointOfView(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
183            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
184    
185            // check for point of view change
186            if (organizationSelectionTreeForm.getCurrentPointOfViewKeyCode() != null) {
187                if ((organizationSelectionTreeForm.getPreviousPointOfViewKeyCode() == null) || (!organizationSelectionTreeForm.getPreviousPointOfViewKeyCode().equalsIgnoreCase(organizationSelectionTreeForm.getCurrentPointOfViewKeyCode()) == true)) {
188                    String[] flds = organizationSelectionTreeForm.getCurrentPointOfViewKeyCode().split("[-]");
189                    organizationSelectionTreeForm.setPreviousPointOfViewKeyCode(organizationSelectionTreeForm.getCurrentPointOfViewKeyCode());
190    
191                    HashMap<String, Object> map = new HashMap<String, Object>();
192                    map.put("chartOfAccountsCode", flds[0]);
193                    map.put("organizationCode", flds[1]);
194                    organizationSelectionTreeForm.setPointOfViewOrg((BudgetConstructionOrganizationReports) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(BudgetConstructionOrganizationReports.class, map));
195    
196                    // build a new selection subtree
197                    String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
198                    SpringContext.getBean(BudgetOrganizationTreeService.class).buildPullupSql(principalId, flds[0], flds[1]);
199    
200                    // initialize the selection tool to the root
201                    map.put("principalId", principalId);
202                    organizationSelectionTreeForm.setSelectionSubTreeOrgs((List<BudgetConstructionPullup>) SpringContext.getBean(BusinessObjectService.class).findMatching(BudgetConstructionPullup.class, map));
203                    organizationSelectionTreeForm.populateSelectionSubTreeOrgs();
204                    organizationSelectionTreeForm.setPreviousBranchOrgs(new TypedArrayList(BudgetConstructionPullup.class));
205                }
206            }
207            else {
208                organizationSelectionTreeForm.setPreviousPointOfViewKeyCode(organizationSelectionTreeForm.getCurrentPointOfViewKeyCode());
209                organizationSelectionTreeForm.setPointOfViewOrg(new BudgetConstructionOrganizationReports());
210                organizationSelectionTreeForm.setSelectionSubTreeOrgs(new TypedArrayList(BudgetConstructionPullup.class));
211                organizationSelectionTreeForm.setPreviousBranchOrgs(new TypedArrayList(BudgetConstructionPullup.class));
212            }
213    
214            return mapping.findForward(KFSConstants.MAPPING_BASIC);
215        }
216    
217        /**
218         * Handles saving the BudgetConstructionPullup current row to the previous branches stack and displaying the associated
219         * children.
220         * 
221         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
222         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
223         */
224        public ActionForward navigateDown(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
225            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
226            String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
227    
228            // reset any set pullflags in the database before navigation
229            SpringContext.getBean(BudgetOrganizationTreeService.class).resetPullFlag(principalId);
230    
231    
232            // push parent org onto the branch stack
233            organizationSelectionTreeForm.getPreviousBranchOrgs().add(organizationSelectionTreeForm.getSelectionSubTreeOrgs().get(this.getSelectedLine(request)));
234    
235            // get the children
236            String chartOfAccountsCode = organizationSelectionTreeForm.getSelectionSubTreeOrgs().get(this.getSelectedLine(request)).getChartOfAccountsCode();
237            String organizationCode = organizationSelectionTreeForm.getSelectionSubTreeOrgs().get(this.getSelectedLine(request)).getOrganizationCode();
238            organizationSelectionTreeForm.setSelectionSubTreeOrgs((List<BudgetConstructionPullup>) SpringContext.getBean(BudgetOrganizationTreeService.class).getPullupChildOrgs(principalId, chartOfAccountsCode, organizationCode));
239            organizationSelectionTreeForm.populateSelectionSubTreeOrgs();
240    
241            return mapping.findForward(KFSConstants.MAPPING_BASIC);
242        }
243    
244        /**
245         * Handles navigation back to a previous branch BudgetConstructionPullup row displaying the associated parent and it's siblings
246         * 
247         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
248         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
249         */
250        public ActionForward navigateUp(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
251            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
252            String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
253    
254            // reset any set pullflags in the database before navigation
255            SpringContext.getBean(BudgetOrganizationTreeService.class).resetPullFlag(principalId);
256    
257            // pop the parent org off the branch stack
258            int popIdx = this.getSelectedLine(request);
259            BudgetConstructionPullup previousBranchOrg = organizationSelectionTreeForm.getPreviousBranchOrgs().remove(popIdx);
260            if (popIdx == 0) {
261                organizationSelectionTreeForm.setPreviousBranchOrgs(new TypedArrayList(BudgetConstructionPullup.class));
262    
263                // reinitialize the selection tool to the root
264                HashMap<String, Object> map = new HashMap<String, Object>();
265                map.put("chartOfAccountsCode", previousBranchOrg.getChartOfAccountsCode());
266                map.put("organizationCode", previousBranchOrg.getOrganizationCode());
267                map.put("principalId", principalId);
268                organizationSelectionTreeForm.setSelectionSubTreeOrgs((List<BudgetConstructionPullup>) SpringContext.getBean(BusinessObjectService.class).findMatching(BudgetConstructionPullup.class, map));
269                organizationSelectionTreeForm.populateSelectionSubTreeOrgs();
270    
271            }
272            else {
273                organizationSelectionTreeForm.setPreviousBranchOrgs(organizationSelectionTreeForm.getPreviousBranchOrgs().subList(0, popIdx));
274    
275                // get the parent and parent siblings
276                String chartOfAccountsCode = previousBranchOrg.getReportsToChartOfAccountsCode();
277                String organizationCode = previousBranchOrg.getReportsToOrganizationCode();
278                organizationSelectionTreeForm.setSelectionSubTreeOrgs((List<BudgetConstructionPullup>) SpringContext.getBean(BudgetOrganizationTreeService.class).getPullupChildOrgs(principalId, chartOfAccountsCode, organizationCode));
279                organizationSelectionTreeForm.populateSelectionSubTreeOrgs();
280            }
281    
282            return mapping.findForward(KFSConstants.MAPPING_BASIC);
283        }
284    
285        /**
286         * Sets the pullFlag for all displayed subtree organizations
287         * 
288         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
289         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
290         */
291        public ActionForward selectAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
292            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
293            setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.YES.getKey());
294    
295            return mapping.findForward(KFSConstants.MAPPING_BASIC);
296        }
297    
298        /**
299         * Clears the pullFlag for all displayed subtree organizations
300         * 
301         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
302         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
303         */
304        public ActionForward clearAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
305            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
306            setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.NO.getKey());
307    
308            return mapping.findForward(KFSConstants.MAPPING_BASIC);
309        }
310    
311        /**
312         * Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
313         * 
314         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
315         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
316         */
317        public ActionForward selectPullOrgAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
318            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
319            setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.ORG.getKey());
320    
321            return mapping.findForward(KFSConstants.MAPPING_BASIC);
322        }
323    
324        /**
325         * Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
326         * 
327         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
328         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
329         */
330        public ActionForward selectPullSubOrgAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
331            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
332            setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.SUBORG.getKey());
333    
334            return mapping.findForward(KFSConstants.MAPPING_BASIC);
335        }
336    
337        /**
338         * Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
339         * 
340         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
341         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
342         */
343        public ActionForward selectPullBothAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
344            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
345            setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.BOTH.getKey());
346    
347            return mapping.findForward(KFSConstants.MAPPING_BASIC);
348        }
349    
350        /**
351         * Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
352         * 
353         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
354         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
355         */
356        public ActionForward selectPushOrgLevAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
357            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
358            setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.ORGLEV.getKey());
359    
360            return mapping.findForward(KFSConstants.MAPPING_BASIC);
361        }
362    
363        /**
364         * Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
365         * 
366         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
367         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
368         */
369        public ActionForward selectPushMgrLevAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
370            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
371            setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.MGRLEV.getKey());
372    
373            return mapping.findForward(KFSConstants.MAPPING_BASIC);
374        }
375    
376        /**
377         * Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
378         * 
379         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
380         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
381         */
382        public ActionForward selectPushOrgMgrLevAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
383            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
384            setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.ORGMGRLEV.getKey());
385    
386            return mapping.findForward(KFSConstants.MAPPING_BASIC);
387        }
388    
389        /**
390         * Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
391         * 
392         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
393         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
394         */
395        public ActionForward selectPushLevOneAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
396            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
397            setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.LEVONE.getKey());
398    
399            return mapping.findForward(KFSConstants.MAPPING_BASIC);
400        }
401    
402        /**
403         * Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
404         * 
405         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
406         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
407         */
408        public ActionForward selectPushLevZeroAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
409            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
410            setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.LEVZERO.getKey());
411    
412            return mapping.findForward(KFSConstants.MAPPING_BASIC);
413        }
414    
415        /**
416         * Sets the pullFlags for each of the objects in the list to the pullFlagValue.
417         * 
418         * @param selOrgs
419         * @param pullFlagValue
420         */
421        protected void setPullFlag(List<BudgetConstructionPullup> selOrgs, Integer pullFlagValue) {
422            for (int i = 0; i < selOrgs.size(); i++) {
423                selOrgs.get(i).setPullFlag(pullFlagValue);
424            }
425        }
426    
427        /**
428         * Checks that at least one organization is selected and stores the selection settings. If no organization is selected, an error
429         * message is displayed to the user.
430         * 
431         * @param selectionSubTreeOrgs
432         * @return boolean - true if there was a selection and the list was saved, otherwise false
433         */
434        protected boolean storedSelectedOrgs(List<BudgetConstructionPullup> selectionSubTreeOrgs) {
435            boolean foundSelected = false;
436    
437            // check to see if at least one pullflag is set and store the pullflag settings for currently displayed set of orgs
438            for (BudgetConstructionPullup budgetConstructionPullup : selectionSubTreeOrgs) {
439                if (budgetConstructionPullup.getPullFlag() > 0) {
440                    foundSelected = true;
441                    break;
442                }
443            }
444    
445            // if selection was found, save the org tree seletions, otherwise build error message
446            if (foundSelected) {
447                SpringContext.getBean(BusinessObjectService.class).save(selectionSubTreeOrgs);
448            }
449            else {
450                GlobalVariables.getMessageMap().putError(BCConstants.SELECTION_SUB_TREE_ORGS, BCKeyConstants.ERROR_BUDGET_ORG_NOT_SELECTED);
451            }
452    
453    
454            return foundSelected;
455        }
456    
457        /**
458         * Checks the selection and calls the Position Pick list screen action.
459         * 
460         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
461         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
462         */
463        public ActionForward performPositionPick(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
464            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
465    
466            if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
467                return mapping.findForward(KFSConstants.MAPPING_BASIC);
468            }
469            organizationSelectionTreeForm.setNoResetOnReturn(true);
470    
471            // forward to temp list action for displaying results
472            String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.POSITION_SELECT, BudgetConstructionPositionSelect.class.getName(), null);
473    
474            return new ActionForward(url, true);
475        }
476    
477        /**
478         * Checks the selection and calls the Budgeted Incumbents Pick list screen action.
479         * 
480         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
481         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
482         */
483        public ActionForward performIncumbentPick(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
484            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
485    
486            if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
487                return mapping.findForward(KFSConstants.MAPPING_BASIC);
488            }
489            organizationSelectionTreeForm.setNoResetOnReturn(true);
490    
491            // forward to temp list action for displaying results
492            String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.INTENDED_INCUMBENT_SELECT, BudgetConstructionIntendedIncumbentSelect.class.getName(), null);
493    
494            return new ActionForward(url, true);
495        }
496    
497        /**
498         * Checks the selection and calls the Budget Documents pick list screen action.
499         * 
500         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
501         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
502         */
503        public ActionForward performShowBudgetDocs(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
504            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
505    
506            if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
507                return mapping.findForward(KFSConstants.MAPPING_BASIC);
508            }
509    
510            // build table but give a message if empty
511            int rowCount = SpringContext.getBean(OrganizationBCDocumentSearchService.class).buildAccountSelectPullList(GlobalVariables.getUserSession().getPerson().getPrincipalId(), organizationSelectionTreeForm.getUniversityFiscalYear());
512            if (rowCount == 0) {
513                GlobalVariables.getMessageList().add("error.inquiry");
514                return mapping.findForward(KFSConstants.MAPPING_BASIC);
515            }
516            organizationSelectionTreeForm.setNoResetOnReturn(true);
517    
518            // forward to temp list action for displaying results
519            String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.ACCOUNT_SELECT_BUDGETED_DOCUMENTS, BudgetConstructionAccountSelect.class.getName(), null);
520    
521            return new ActionForward(url, true);
522        }
523    
524        /**
525         * Checks the selection and performs the Pull up screen action.
526         * 
527         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
528         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
529         */
530        public ActionForward performPullUp(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
531            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
532    
533            if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
534                return mapping.findForward(KFSConstants.MAPPING_BASIC);
535            }
536    
537            // get the needed params from the form and environment
538            String pointOfViewCharOfAccountsCode = organizationSelectionTreeForm.getPointOfViewOrg().getChartOfAccountsCode();
539            String pointOfViewOrganizationCode = organizationSelectionTreeForm.getPointOfViewOrg().getOrganizationCode();
540            Integer bcFiscalYear = organizationSelectionTreeForm.getUniversityFiscalYear();
541            String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
542    
543            SpringContext.getBean(BudgetPushPullService.class).pullupSelectedOrganizationDocuments(principalId, bcFiscalYear, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
544    
545            // build Budgeted Account list of Documents set at level that is less than the user's point of view
546            // build process should return number of accounts in list, if non-zero call display otherwise add successful pullup message
547            // if no accounts are on the list
548            int rowCount = SpringContext.getBean(BudgetPushPullService.class).buildPullUpBudgetedDocuments(principalId, bcFiscalYear, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
549            if (rowCount != 0) {
550                organizationSelectionTreeForm.setNoResetOnReturn(true);
551                String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.ACCOUNT_SELECT_PULLUP_DOCUMENTS, BudgetConstructionAccountSelect.class.getName(), null);
552    
553                return new ActionForward(url, true);
554            }
555    
556            GlobalVariables.getMessageList().add(BCKeyConstants.MSG_ORG_PULL_UP_SUCCESSFUL);
557    
558            return mapping.findForward(KFSConstants.MAPPING_BASIC);
559        }
560    
561        /**
562         * Checks at least one org was selected then calls organization push/pull service to built the account list for budgeted
563         * documents below the user's point of view and forwards to the temp list action to display the results.
564         * 
565         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
566         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
567         */
568        public ActionForward performShowPullUpBudgetDocs(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
569            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
570    
571            if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
572                return mapping.findForward(KFSConstants.MAPPING_BASIC);
573            }
574    
575            String pointOfViewCharOfAccountsCode = organizationSelectionTreeForm.getPointOfViewOrg().getChartOfAccountsCode();
576            String pointOfViewOrganizationCode = organizationSelectionTreeForm.getPointOfViewOrg().getOrganizationCode();
577            Integer bcFiscalYear = organizationSelectionTreeForm.getUniversityFiscalYear();
578            String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
579    
580            // call service to build account list data
581            int rowCount = SpringContext.getBean(BudgetPushPullService.class).buildPullUpBudgetedDocuments(principalId, bcFiscalYear, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
582            if (rowCount == 0) {
583                String message = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(BCKeyConstants.ERROR_NO_ACCOUNTS_PULL_UP);
584                message = MessageFormat.format(message, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
585                organizationSelectionTreeForm.addMessage(message);
586    
587                return mapping.findForward(KFSConstants.MAPPING_BASIC);
588            }
589            organizationSelectionTreeForm.setNoResetOnReturn(true);
590    
591            // forward to temp list action for displaying results
592            String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.ACCOUNT_SELECT_PULLUP_DOCUMENTS, BudgetConstructionAccountSelect.class.getName(), null);
593    
594            return new ActionForward(url, true);
595        }
596    
597        /**
598         * Checks the selection and performs the Push down screen action.
599         * 
600         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
601         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
602         */
603        public ActionForward performPushDown(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
604            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
605    
606            if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
607                return mapping.findForward(KFSConstants.MAPPING_BASIC);
608            }
609    
610            // get the needed params from the form and environment
611            String pointOfViewCharOfAccountsCode = organizationSelectionTreeForm.getPointOfViewOrg().getChartOfAccountsCode();
612            String pointOfViewOrganizationCode = organizationSelectionTreeForm.getPointOfViewOrg().getOrganizationCode();
613            Integer bcFiscalYear = organizationSelectionTreeForm.getUniversityFiscalYear();
614            String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
615    
616            SpringContext.getBean(BudgetPushPullService.class).pushdownSelectedOrganizationDocuments(principalId, bcFiscalYear, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
617    
618            // build Budgeted Account list of Documents set at level that is less than the user's point of view
619            // build process should return number of accounts in list, if non-zero call display
620            // otherwise add successful pullup message if no accounts are on the list
621            int rowCount = SpringContext.getBean(BudgetPushPullService.class).buildPushDownBudgetedDocuments(principalId, bcFiscalYear, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
622            if (rowCount != 0) {
623                organizationSelectionTreeForm.setNoResetOnReturn(true);
624                String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.ACCOUNT_SELECT_PUSHDOWN_DOCUMENTS, BudgetConstructionAccountSelect.class.getName(), null);
625    
626                return new ActionForward(url, true);
627            }
628    
629            GlobalVariables.getMessageList().add(BCKeyConstants.MSG_ORG_PUSH_DOWN_SUCCESSFUL);
630    
631            return mapping.findForward(KFSConstants.MAPPING_BASIC);
632        }
633    
634        /**
635         * Checks at least one org was selected then calls organization push/pull service to built the account list for budgeted
636         * documents at the user's point of view and forwards to the temp list action to display the results.
637         * 
638         * @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
639         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
640         */
641        public ActionForward performShowPushDownBudgetDocs(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
642            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
643    
644            if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
645                return mapping.findForward(KFSConstants.MAPPING_BASIC);
646            }
647    
648            String pointOfViewCharOfAccountsCode = organizationSelectionTreeForm.getPointOfViewOrg().getChartOfAccountsCode();
649            String pointOfViewOrganizationCode = organizationSelectionTreeForm.getPointOfViewOrg().getOrganizationCode();
650            Integer bcFiscalYear = organizationSelectionTreeForm.getUniversityFiscalYear();
651            String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
652    
653            // call service to build account list data
654            int rowCount = SpringContext.getBean(BudgetPushPullService.class).buildPushDownBudgetedDocuments(principalId, bcFiscalYear, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
655            if (rowCount == 0) {
656                String message = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(BCKeyConstants.ERROR_NO_ACCOUNTS_PUSH_DOWN);
657                message = MessageFormat.format(message, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
658                organizationSelectionTreeForm.addMessage(message);
659    
660                return mapping.findForward(KFSConstants.MAPPING_BASIC);
661            }
662            organizationSelectionTreeForm.setNoResetOnReturn(true);
663    
664            // forward to temp list action for displaying results
665            String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.ACCOUNT_SELECT_PUSHDOWN_DOCUMENTS, BudgetConstructionAccountSelect.class.getName(), null);
666    
667            return new ActionForward(url, true);
668        }
669    
670        /**
671         * Handles forwarding to account list or report selection screen.
672         */
673        public ActionForward performReport(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
674            OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
675    
676            List<BudgetConstructionPullup> selectionSubTreeOrgs = organizationSelectionTreeForm.getSelectionSubTreeOrgs();
677            if (!storedSelectedOrgs(selectionSubTreeOrgs)) {
678                return mapping.findForward(KFSConstants.MAPPING_BASIC);
679            }
680    
681            // set up buildhelper to be used by called action
682            ReportControlListBuildHelper buildHelper = (ReportControlListBuildHelper) GlobalVariables.getUserSession().retrieveObject(BCConstants.Report.CONTROL_BUILD_HELPER_SESSION_NAME);
683            if (buildHelper == null) {
684                buildHelper = new ReportControlListBuildHelper();
685            }
686    
687            BudgetConstructionReportMode reportMode = setupReportMode(request, organizationSelectionTreeForm);
688            buildHelper.addBuildRequest(organizationSelectionTreeForm.getCurrentPointOfViewKeyCode(), removeUnselectedSubTreeOrgs(selectionSubTreeOrgs), reportMode.reportBuildMode);
689            GlobalVariables.getUserSession().addObject(BCConstants.Report.CONTROL_BUILD_HELPER_SESSION_NAME, buildHelper);
690    
691            // check if there are any accounts above user's point of view, if so forward to account listing page. if not, forward to
692            // report select(subfund or object code) screen
693            String[] pointOfViewFields = organizationSelectionTreeForm.getCurrentPointOfViewKeyCode().split("[-]");
694            int rowCount = SpringContext.getBean(OrganizationBCDocumentSearchService.class).buildBudgetedAccountsAbovePointsOfView(GlobalVariables.getUserSession().getPerson().getPrincipalId(), organizationSelectionTreeForm.getUniversityFiscalYear(), pointOfViewFields[0], pointOfViewFields[1]);
695    
696            // in case of 2PLG or Sync report should move to account list page.
697            boolean forceToAccountListScreen = false;
698            String reportModeName = organizationSelectionTreeForm.getReportMode();
699            if (reportModeName.equals(BudgetConstructionReportMode.TWOPLG_LIST_REPORT.reportModeName) || reportModeName.equals(BudgetConstructionReportMode.SYNCHRONIZATION_PROBLEMS_REPORT.reportModeName)) {
700                forceToAccountListScreen = true;
701            }
702            organizationSelectionTreeForm.setNoResetOnReturn(true);
703    
704            String forwardURL = "";
705            if (rowCount != 0 || forceToAccountListScreen) {
706                forwardURL = buildAccountListForwardURL(organizationSelectionTreeForm, mapping, forceToAccountListScreen);
707            }
708            else {
709                forwardURL = buildReportSelectForwardURL(organizationSelectionTreeForm, mapping);
710            }
711    
712            return new ActionForward(forwardURL, true);
713        }
714    
715        /**
716         * Removes unselected SubTreeOrgs since selectionSubTreeOrgs contains all SubTreeOrgs.
717         * 
718         * @param selectionSubTreeOrgs
719         * @return
720         */
721        public List<BudgetConstructionPullup> removeUnselectedSubTreeOrgs(List<BudgetConstructionPullup> selectionSubTreeOrgs) {
722            List<BudgetConstructionPullup> returnList = new ArrayList<BudgetConstructionPullup>();
723            for (BudgetConstructionPullup pullUp : selectionSubTreeOrgs) {
724                if (pullUp.getPullFlag() > 0) {
725                    returnList.add(pullUp);
726                }
727            }
728    
729            return returnList;
730        }
731    
732        /**
733         * Parses the report name from the methodToCall request parameter and retrieves the associated ReportMode.
734         * 
735         * @param request - HttpServletRequest containing the methodToCall parameter
736         * @param organizationSelectionTreeForm - OrganizationSelectionTreeForm to set report mode on
737         * @return BudgetConstructionReportMode - mode associated with parsed report name
738         */
739        private BudgetConstructionReportMode setupReportMode(HttpServletRequest request, OrganizationSelectionTreeForm organizationSelectionTreeForm) {
740            String fullParameter = (String) request.getAttribute(KNSConstants.METHOD_TO_CALL_ATTRIBUTE);
741            String reportName = StringUtils.substringBetween(fullParameter, KNSConstants.METHOD_TO_CALL_PARM1_LEFT_DEL, KNSConstants.METHOD_TO_CALL_PARM1_RIGHT_DEL);
742            organizationSelectionTreeForm.setReportMode(reportName);
743    
744            return BudgetConstructionReportMode.getBudgetConstructionReportModeByName(organizationSelectionTreeForm.getReportMode());
745        }
746    
747        /**
748         * Builds URL for the action listing action.
749         */
750        private String buildAccountListForwardURL(OrganizationSelectionTreeForm organizationSelectionTreeForm, ActionMapping mapping, boolean forceToAccountListScreen) {
751            Map<String, String> urlParms = new HashMap<String, String>();
752            urlParms.put(BCConstants.Report.REPORT_MODE, organizationSelectionTreeForm.getReportMode());
753            urlParms.put(BCConstants.CURRENT_POINT_OF_VIEW_KEYCODE, organizationSelectionTreeForm.getCurrentPointOfViewKeyCode());
754    
755            if (forceToAccountListScreen) {
756                urlParms.put(BCConstants.FORCE_TO_ACCOUNT_LIST_SCREEN, "true");
757            }
758            else {
759                urlParms.put(BCConstants.FORCE_TO_ACCOUNT_LIST_SCREEN, "false");
760            }
761    
762            if ((organizationSelectionTreeForm.getReportMode().equals(BudgetConstructionReportMode.ACCOUNT_SUMMARY_REPORT.reportModeName) && organizationSelectionTreeForm.isAccountSummaryConsolidation()) || (organizationSelectionTreeForm.getReportMode().equals(BudgetConstructionReportMode.ACCOUNT_OBJECT_DETAIL_REPORT.reportModeName) && organizationSelectionTreeForm.isAccountObjectDetailConsolidation()) || (organizationSelectionTreeForm.getReportMode().equals(BudgetConstructionReportMode.MONTH_SUMMARY_REPORT.reportModeName) && organizationSelectionTreeForm.isMonthObjectSummaryConsolidation())) {
763                urlParms.put(BCConstants.Report.REPORT_CONSOLIDATION, "true");
764            }
765    
766            return BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.ACCOUNT_SELECT_ABOVE_POV, BudgetConstructionAccountSelect.class.getName(), urlParms);
767        }
768    
769        /**
770         * Builds URL for the organization selection action.
771         */
772        private String buildReportSelectForwardURL(OrganizationSelectionTreeForm organizationSelectionTreeForm, ActionMapping mapping) {
773            Map<String, String> parameters = new HashMap<String, String>();
774            parameters.put(BCConstants.Report.REPORT_MODE, organizationSelectionTreeForm.getReportMode());
775            parameters.put(BCConstants.CURRENT_POINT_OF_VIEW_KEYCODE, organizationSelectionTreeForm.getCurrentPointOfViewKeyCode());
776    
777            if ((organizationSelectionTreeForm.getReportMode().equals(BudgetConstructionReportMode.ACCOUNT_SUMMARY_REPORT.reportModeName) && organizationSelectionTreeForm.isAccountSummaryConsolidation()) || (organizationSelectionTreeForm.getReportMode().equals(BudgetConstructionReportMode.ACCOUNT_OBJECT_DETAIL_REPORT.reportModeName) && organizationSelectionTreeForm.isAccountObjectDetailConsolidation()) || (organizationSelectionTreeForm.getReportMode().equals(BudgetConstructionReportMode.MONTH_SUMMARY_REPORT.reportModeName) && organizationSelectionTreeForm.isMonthObjectSummaryConsolidation())) {
778                parameters.put(BCConstants.Report.REPORT_CONSOLIDATION, "true");
779            }
780    
781            return BudgetUrlUtil.buildBudgetUrl(mapping, organizationSelectionTreeForm, BCConstants.ORG_REPORT_SELECTION_ACTION, parameters);
782        }
783    
784    }