/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.module.bc.document.web.struts;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.kuali.kfs.coa.businessobject.Organization;
import org.kuali.kfs.module.bc.BCConstants;
import org.kuali.kfs.module.bc.BCKeyConstants;
import org.kuali.kfs.module.bc.BudgetConstructionReportMode;
import org.kuali.kfs.module.bc.BCConstants.OrgSelControlOption;
import org.kuali.kfs.module.bc.BCConstants.OrgSelOpMode;
import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAccountSelect;
import org.kuali.kfs.module.bc.businessobject.BudgetConstructionIntendedIncumbentSelect;
import org.kuali.kfs.module.bc.businessobject.BudgetConstructionOrganizationReports;
import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPositionSelect;
import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPullup;
import org.kuali.kfs.module.bc.document.service.BudgetConstructionProcessorService;
import org.kuali.kfs.module.bc.document.service.BudgetOrganizationTreeService;
import org.kuali.kfs.module.bc.document.service.BudgetPushPullService;
import org.kuali.kfs.module.bc.document.service.OrganizationBCDocumentSearchService;
import org.kuali.kfs.module.bc.report.ReportControlListBuildHelper;
import org.kuali.kfs.module.bc.util.BudgetUrlUtil;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.rice.core.api.config.property.ConfigurationService;
import org.kuali.rice.core.api.util.ConcreteKeyValue;
import org.kuali.rice.kim.api.identity.Person;
import org.kuali.rice.kns.util.KNSGlobalVariables;
import org.kuali.rice.krad.service.BusinessObjectService;
import org.kuali.rice.krad.util.GlobalVariables;
import org.kuali.rice.krad.util.KRADConstants;
/**
* Handles organization budget action requests from menu.
*/
public class OrganizationSelectionTreeAction extends BudgetExpansionAction {
private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(OrganizationSelectionTreeAction.class);
/**
* @see org.kuali.kfs.module.bc.document.web.struts.BudgetExpansionAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
ActionForward actionForward = super.execute(mapping, form, request, response);
OrganizationSelectionTreeForm orgSelTreeForm = (OrganizationSelectionTreeForm) form;
// re-init the session form if session scoped
if (orgSelTreeForm.getMethodToCall().equals("refresh")) {
if (BCConstants.MAPPING_SCOPE_SESSION.equals(mapping.getScope())) {
HttpSession sess = request.getSession(Boolean.FALSE);
String formName = mapping.getAttribute();
sess.setAttribute(formName, orgSelTreeForm);
}
}
if (orgSelTreeForm.getPullFlagKeyLabels().isEmpty() && orgSelTreeForm.getOperatingMode() != null) {
OrgSelOpMode opMode = OrgSelOpMode.valueOf(orgSelTreeForm.getOperatingMode());
switch (opMode) {
case SALSET:
orgSelTreeForm.setOperatingModeTitle("Budget Salary Setting Organization Selection");
orgSelTreeForm.setOperatingModePullFlagLabel("Selected");
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.NO.getKey().toString(), OrgSelControlOption.NO.getLabel()));
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.YES.getKey().toString(), OrgSelControlOption.YES.getLabel()));
break;
case REPORTS:
orgSelTreeForm.setOperatingModeTitle("BC Reports Organization Selection");
orgSelTreeForm.setOperatingModePullFlagLabel("Selected");
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.NO.getKey().toString(), OrgSelControlOption.NO.getLabel()));
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.YES.getKey().toString(), OrgSelControlOption.YES.getLabel()));
break;
case PULLUP:
orgSelTreeForm.setOperatingModeTitle("BC Pull Up Organization Selection");
orgSelTreeForm.setOperatingModePullFlagLabel("Pull Up Type");
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.NOTSEL.getKey().toString(), OrgSelControlOption.NOTSEL.getLabel()));
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.BOTH.getKey().toString(), OrgSelControlOption.BOTH.getLabel()));
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.ORG.getKey().toString(), OrgSelControlOption.ORG.getLabel()));
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.SUBORG.getKey().toString(), OrgSelControlOption.SUBORG.getLabel()));
break;
case PUSHDOWN:
orgSelTreeForm.setOperatingModeTitle("BC Push Down Organization Selection");
orgSelTreeForm.setOperatingModePullFlagLabel("Push Down Type");
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.NOTSEL.getKey().toString(), OrgSelControlOption.NOTSEL.getLabel()));
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.ORGLEV.getKey().toString(), OrgSelControlOption.ORGLEV.getLabel()));
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.MGRLEV.getKey().toString(), OrgSelControlOption.MGRLEV.getLabel()));
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.ORGMGRLEV.getKey().toString(), OrgSelControlOption.ORGMGRLEV.getLabel()));
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.LEVONE.getKey().toString(), OrgSelControlOption.LEVONE.getLabel()));
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.LEVZERO.getKey().toString(), OrgSelControlOption.LEVZERO.getLabel()));
break;
default:
// default to ACCOUNT operating mode
orgSelTreeForm.setOperatingModeTitle("Budgeted Account List Search Organization Selection");
orgSelTreeForm.setOperatingModePullFlagLabel("Selected");
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.NO.getKey().toString(), OrgSelControlOption.NO.getLabel()));
orgSelTreeForm.getPullFlagKeyLabels().add(new ConcreteKeyValue(OrgSelControlOption.YES.getKey().toString(), OrgSelControlOption.YES.getLabel()));
break;
}
}
return actionForward;
}
/**
* 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 -
* pullup, pushdown, reports, salset, account. Each mode causes a slightly different rendition of the controls presented to the
* user, but the basic point of view selection and organization drill down functionality is the same in all five modes.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward loadExpansionScreen(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm orgSelTreeForm = (OrganizationSelectionTreeForm) form;
Person person = GlobalVariables.getUserSession().getPerson();
// check if user has only one available point of view. if so, select that point of view and build selection
List<Organization> pointOfViewOrgs = SpringContext.getBean(BudgetConstructionProcessorService.class).getProcessorOrgs(person);
if (pointOfViewOrgs != null && pointOfViewOrgs.size() == 1) {
orgSelTreeForm.setCurrentPointOfViewKeyCode(pointOfViewOrgs.get(0).getChartOfAccountsCode() + "-" + pointOfViewOrgs.get(0).getOrganizationCode());
return performBuildPointOfView(mapping, form, request, response);
}
if (pointOfViewOrgs.isEmpty()) {
GlobalVariables.getMessageMap().putError("pointOfViewOrg", BCKeyConstants.ERROR_BUDGET_USER_NOT_ORG_APPROVER);
}
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Called by the close button. It removes the user's BudgetConstructionPullup table rows and returns the user to the seleection
* screen action.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
@Override
public ActionForward returnToCaller(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
// depopulate any selection subtrees for the user
String principalName = GlobalVariables.getUserSession().getPerson().getPrincipalId();
SpringContext.getBean(BudgetOrganizationTreeService.class).cleanPullup(principalName);
return super.returnToCaller(mapping, form, request, response);
}
/**
* Implements functionality behind the refresh button on the Organization Selection Tree screen. This is also called when the
* value of the point of view select control changed and javascript is enabled on the user's browser
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward performBuildPointOfView(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
// check for point of view change
if (organizationSelectionTreeForm.getCurrentPointOfViewKeyCode() != null) {
if ((organizationSelectionTreeForm.getPreviousPointOfViewKeyCode() == null) || (!organizationSelectionTreeForm.getPreviousPointOfViewKeyCode().equalsIgnoreCase(organizationSelectionTreeForm.getCurrentPointOfViewKeyCode()) == true)) {
String[] flds = organizationSelectionTreeForm.getCurrentPointOfViewKeyCode().split("[-]");
organizationSelectionTreeForm.setPreviousPointOfViewKeyCode(organizationSelectionTreeForm.getCurrentPointOfViewKeyCode());
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("chartOfAccountsCode", flds[0]);
map.put("organizationCode", flds[1]);
organizationSelectionTreeForm.setPointOfViewOrg(SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(BudgetConstructionOrganizationReports.class, map));
// build a new selection subtree
String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
SpringContext.getBean(BudgetOrganizationTreeService.class).buildPullupSql(principalId, flds[0], flds[1]);
// initialize the selection tool to the root
map.put("principalId", principalId);
organizationSelectionTreeForm.setSelectionSubTreeOrgs((List<BudgetConstructionPullup>) SpringContext.getBean(BusinessObjectService.class).findMatching(BudgetConstructionPullup.class, map));
organizationSelectionTreeForm.populateSelectionSubTreeOrgs();
organizationSelectionTreeForm.setPreviousBranchOrgs(new ArrayList<BudgetConstructionPullup>());
}
}
else {
organizationSelectionTreeForm.setPreviousPointOfViewKeyCode(organizationSelectionTreeForm.getCurrentPointOfViewKeyCode());
organizationSelectionTreeForm.setPointOfViewOrg(new BudgetConstructionOrganizationReports());
organizationSelectionTreeForm.setSelectionSubTreeOrgs(new ArrayList<BudgetConstructionPullup>());
organizationSelectionTreeForm.setPreviousBranchOrgs(new ArrayList<BudgetConstructionPullup>());
}
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Handles saving the BudgetConstructionPullup current row to the previous branches stack and displaying the associated
* children.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward navigateDown(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
// reset any set pullflags in the database before navigation
SpringContext.getBean(BudgetOrganizationTreeService.class).resetPullFlag(principalId);
// push parent org onto the branch stack
organizationSelectionTreeForm.getPreviousBranchOrgs().add(organizationSelectionTreeForm.getSelectionSubTreeOrgs().get(this.getSelectedLine(request)));
// get the children
String chartOfAccountsCode = organizationSelectionTreeForm.getSelectionSubTreeOrgs().get(this.getSelectedLine(request)).getChartOfAccountsCode();
String organizationCode = organizationSelectionTreeForm.getSelectionSubTreeOrgs().get(this.getSelectedLine(request)).getOrganizationCode();
organizationSelectionTreeForm.setSelectionSubTreeOrgs(SpringContext.getBean(BudgetOrganizationTreeService.class).getPullupChildOrgs(principalId, chartOfAccountsCode, organizationCode));
organizationSelectionTreeForm.populateSelectionSubTreeOrgs();
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Handles navigation back to a previous branch BudgetConstructionPullup row displaying the associated parent and it's siblings
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward navigateUp(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
// reset any set pullflags in the database before navigation
SpringContext.getBean(BudgetOrganizationTreeService.class).resetPullFlag(principalId);
// pop the parent org off the branch stack
int popIdx = this.getSelectedLine(request);
BudgetConstructionPullup previousBranchOrg = organizationSelectionTreeForm.getPreviousBranchOrgs().remove(popIdx);
if (popIdx == 0) {
organizationSelectionTreeForm.setPreviousBranchOrgs(new ArrayList<BudgetConstructionPullup>());
// reinitialize the selection tool to the root
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("chartOfAccountsCode", previousBranchOrg.getChartOfAccountsCode());
map.put("organizationCode", previousBranchOrg.getOrganizationCode());
map.put("principalId", principalId);
organizationSelectionTreeForm.setSelectionSubTreeOrgs((List<BudgetConstructionPullup>) SpringContext.getBean(BusinessObjectService.class).findMatching(BudgetConstructionPullup.class, map));
organizationSelectionTreeForm.populateSelectionSubTreeOrgs();
}
else {
organizationSelectionTreeForm.setPreviousBranchOrgs(organizationSelectionTreeForm.getPreviousBranchOrgs().subList(0, popIdx));
// get the parent and parent siblings
String chartOfAccountsCode = previousBranchOrg.getReportsToChartOfAccountsCode();
String organizationCode = previousBranchOrg.getReportsToOrganizationCode();
organizationSelectionTreeForm.setSelectionSubTreeOrgs(SpringContext.getBean(BudgetOrganizationTreeService.class).getPullupChildOrgs(principalId, chartOfAccountsCode, organizationCode));
organizationSelectionTreeForm.populateSelectionSubTreeOrgs();
}
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Sets the pullFlag for all displayed subtree organizations
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward selectAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.YES.getKey());
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Clears the pullFlag for all displayed subtree organizations
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward clearAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.NO.getKey());
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward selectPullOrgAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.ORG.getKey());
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward selectPullSubOrgAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.SUBORG.getKey());
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward selectPullBothAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.BOTH.getKey());
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward selectPushOrgLevAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.ORGLEV.getKey());
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward selectPushMgrLevAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.MGRLEV.getKey());
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward selectPushOrgMgrLevAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.ORGMGRLEV.getKey());
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward selectPushLevOneAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.LEVONE.getKey());
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Sets the pullFlag for all displayed subtree organizations to the setting implied by the method name.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward selectPushLevZeroAll(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
setPullFlag(organizationSelectionTreeForm.getSelectionSubTreeOrgs(), OrgSelControlOption.LEVZERO.getKey());
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Sets the pullFlags for each of the objects in the list to the pullFlagValue.
*
* @param selOrgs
* @param pullFlagValue
*/
protected void setPullFlag(List<BudgetConstructionPullup> selOrgs, Integer pullFlagValue) {
for (int i = 0; i < selOrgs.size(); i++) {
selOrgs.get(i).setPullFlag(pullFlagValue);
}
}
/**
* Checks that at least one organization is selected and stores the selection settings. If no organization is selected, an error
* message is displayed to the user.
*
* @param selectionSubTreeOrgs
* @return boolean - true if there was a selection and the list was saved, otherwise false
*/
protected boolean storedSelectedOrgs(List<BudgetConstructionPullup> selectionSubTreeOrgs) {
boolean foundSelected = false;
// check to see if at least one pullflag is set and store the pullflag settings for currently displayed set of orgs
for (BudgetConstructionPullup budgetConstructionPullup : selectionSubTreeOrgs) {
if (budgetConstructionPullup.getPullFlag() > 0) {
foundSelected = true;
break;
}
}
// if selection was found, save the org tree seletions, otherwise build error message
if (foundSelected) {
SpringContext.getBean(BusinessObjectService.class).save(selectionSubTreeOrgs);
}
else {
GlobalVariables.getMessageMap().putError(BCConstants.SELECTION_SUB_TREE_ORGS, BCKeyConstants.ERROR_BUDGET_ORG_NOT_SELECTED);
}
return foundSelected;
}
/**
* Checks the selection and calls the Position Pick list screen action.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward performPositionPick(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
organizationSelectionTreeForm.setNoResetOnReturn(true);
// forward to temp list action for displaying results
String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.POSITION_SELECT, BudgetConstructionPositionSelect.class.getName(), null);
return new ActionForward(url, true);
}
/**
* Checks the selection and calls the Budgeted Incumbents Pick list screen action.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward performIncumbentPick(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
organizationSelectionTreeForm.setNoResetOnReturn(true);
// forward to temp list action for displaying results
String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.INTENDED_INCUMBENT_SELECT, BudgetConstructionIntendedIncumbentSelect.class.getName(), null);
return new ActionForward(url, true);
}
/**
* Checks the selection and calls the Budget Documents pick list screen action.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward performShowBudgetDocs(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
// build table but give a message if empty
int rowCount = SpringContext.getBean(OrganizationBCDocumentSearchService.class).buildAccountSelectPullList(GlobalVariables.getUserSession().getPerson().getPrincipalId(), organizationSelectionTreeForm.getUniversityFiscalYear());
if (rowCount == 0) {
KNSGlobalVariables.getMessageList().add("error.inquiry");
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
organizationSelectionTreeForm.setNoResetOnReturn(true);
// forward to temp list action for displaying results
String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.ACCOUNT_SELECT_BUDGETED_DOCUMENTS, BudgetConstructionAccountSelect.class.getName(), null);
return new ActionForward(url, true);
}
/**
* Checks the selection and performs the Pull up screen action.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward performPullUp(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
// get the needed params from the form and environment
String pointOfViewCharOfAccountsCode = organizationSelectionTreeForm.getPointOfViewOrg().getChartOfAccountsCode();
String pointOfViewOrganizationCode = organizationSelectionTreeForm.getPointOfViewOrg().getOrganizationCode();
Integer bcFiscalYear = organizationSelectionTreeForm.getUniversityFiscalYear();
String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
SpringContext.getBean(BudgetPushPullService.class).pullupSelectedOrganizationDocuments(principalId, bcFiscalYear, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
// build Budgeted Account list of Documents set at level that is less than the user's point of view
// build process should return number of accounts in list, if non-zero call display otherwise add successful pullup message
// if no accounts are on the list
int rowCount = SpringContext.getBean(BudgetPushPullService.class).buildPullUpBudgetedDocuments(principalId, bcFiscalYear, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
if (rowCount != 0) {
organizationSelectionTreeForm.setNoResetOnReturn(true);
String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.ACCOUNT_SELECT_PULLUP_DOCUMENTS, BudgetConstructionAccountSelect.class.getName(), null);
return new ActionForward(url, true);
}
KNSGlobalVariables.getMessageList().add(BCKeyConstants.MSG_ORG_PULL_UP_SUCCESSFUL);
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Checks at least one org was selected then calls organization push/pull service to built the account list for budgeted
* documents below the user's point of view and forwards to the temp list action to display the results.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward performShowPullUpBudgetDocs(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
String pointOfViewCharOfAccountsCode = organizationSelectionTreeForm.getPointOfViewOrg().getChartOfAccountsCode();
String pointOfViewOrganizationCode = organizationSelectionTreeForm.getPointOfViewOrg().getOrganizationCode();
Integer bcFiscalYear = organizationSelectionTreeForm.getUniversityFiscalYear();
String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
// call service to build account list data
int rowCount = SpringContext.getBean(BudgetPushPullService.class).buildPullUpBudgetedDocuments(principalId, bcFiscalYear, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
if (rowCount == 0) {
String message = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(BCKeyConstants.ERROR_NO_ACCOUNTS_PULL_UP);
message = MessageFormat.format(message, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
organizationSelectionTreeForm.addMessage(message);
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
organizationSelectionTreeForm.setNoResetOnReturn(true);
// forward to temp list action for displaying results
String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.ACCOUNT_SELECT_PULLUP_DOCUMENTS, BudgetConstructionAccountSelect.class.getName(), null);
return new ActionForward(url, true);
}
/**
* Checks the selection and performs the Push down screen action.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward performPushDown(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
// get the needed params from the form and environment
String pointOfViewCharOfAccountsCode = organizationSelectionTreeForm.getPointOfViewOrg().getChartOfAccountsCode();
String pointOfViewOrganizationCode = organizationSelectionTreeForm.getPointOfViewOrg().getOrganizationCode();
Integer bcFiscalYear = organizationSelectionTreeForm.getUniversityFiscalYear();
String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
SpringContext.getBean(BudgetPushPullService.class).pushdownSelectedOrganizationDocuments(principalId, bcFiscalYear, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
// build Budgeted Account list of Documents set at level that is less than the user's point of view
// build process should return number of accounts in list, if non-zero call display
// otherwise add successful pullup message if no accounts are on the list
int rowCount = SpringContext.getBean(BudgetPushPullService.class).buildPushDownBudgetedDocuments(principalId, bcFiscalYear, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
if (rowCount != 0) {
organizationSelectionTreeForm.setNoResetOnReturn(true);
String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.ACCOUNT_SELECT_PUSHDOWN_DOCUMENTS, BudgetConstructionAccountSelect.class.getName(), null);
return new ActionForward(url, true);
}
KNSGlobalVariables.getMessageList().add(BCKeyConstants.MSG_ORG_PUSH_DOWN_SUCCESSFUL);
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
/**
* Checks at least one org was selected then calls organization push/pull service to built the account list for budgeted
* documents at the user's point of view and forwards to the temp list action to display the results.
*
* @see org.kuali.rice.kns.web.struts.action.KualiAction#execute(org.apache.struts.action.ActionMapping,
* org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
public ActionForward performShowPushDownBudgetDocs(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
if (!storedSelectedOrgs(organizationSelectionTreeForm.getSelectionSubTreeOrgs())) {
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
String pointOfViewCharOfAccountsCode = organizationSelectionTreeForm.getPointOfViewOrg().getChartOfAccountsCode();
String pointOfViewOrganizationCode = organizationSelectionTreeForm.getPointOfViewOrg().getOrganizationCode();
Integer bcFiscalYear = organizationSelectionTreeForm.getUniversityFiscalYear();
String principalId = GlobalVariables.getUserSession().getPerson().getPrincipalId();
// call service to build account list data
int rowCount = SpringContext.getBean(BudgetPushPullService.class).buildPushDownBudgetedDocuments(principalId, bcFiscalYear, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
if (rowCount == 0) {
String message = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(BCKeyConstants.ERROR_NO_ACCOUNTS_PUSH_DOWN);
message = MessageFormat.format(message, pointOfViewCharOfAccountsCode, pointOfViewOrganizationCode);
organizationSelectionTreeForm.addMessage(message);
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
organizationSelectionTreeForm.setNoResetOnReturn(true);
// forward to temp list action for displaying results
String url = BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.ACCOUNT_SELECT_PUSHDOWN_DOCUMENTS, BudgetConstructionAccountSelect.class.getName(), null);
return new ActionForward(url, true);
}
/**
* Handles forwarding to account list or report selection screen.
*/
public ActionForward performReport(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrganizationSelectionTreeForm organizationSelectionTreeForm = (OrganizationSelectionTreeForm) form;
List<BudgetConstructionPullup> selectionSubTreeOrgs = organizationSelectionTreeForm.getSelectionSubTreeOrgs();
if (!storedSelectedOrgs(selectionSubTreeOrgs)) {
return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
// set up buildhelper to be used by called action
ReportControlListBuildHelper buildHelper = (ReportControlListBuildHelper) GlobalVariables.getUserSession().retrieveObject(BCConstants.Report.CONTROL_BUILD_HELPER_SESSION_NAME);
if (buildHelper == null) {
buildHelper = new ReportControlListBuildHelper();
}
BudgetConstructionReportMode reportMode = setupReportMode(request, organizationSelectionTreeForm);
buildHelper.addBuildRequest(organizationSelectionTreeForm.getCurrentPointOfViewKeyCode(), removeUnselectedSubTreeOrgs(selectionSubTreeOrgs), reportMode.reportBuildMode);
GlobalVariables.getUserSession().addObject(BCConstants.Report.CONTROL_BUILD_HELPER_SESSION_NAME, buildHelper);
// check if there are any accounts above user's point of view, if so forward to account listing page. if not, forward to
// report select(subfund or object code) screen
String[] pointOfViewFields = organizationSelectionTreeForm.getCurrentPointOfViewKeyCode().split("[-]");
int rowCount = SpringContext.getBean(OrganizationBCDocumentSearchService.class).buildBudgetedAccountsAbovePointsOfView(GlobalVariables.getUserSession().getPerson().getPrincipalId(), organizationSelectionTreeForm.getUniversityFiscalYear(), pointOfViewFields[0], pointOfViewFields[1]);
// in case of 2PLG or Sync report should move to account list page.
boolean forceToAccountListScreen = false;
String reportModeName = organizationSelectionTreeForm.getReportMode();
if (reportModeName.equals(BudgetConstructionReportMode.TWOPLG_LIST_REPORT.reportModeName) || reportModeName.equals(BudgetConstructionReportMode.SYNCHRONIZATION_PROBLEMS_REPORT.reportModeName)) {
forceToAccountListScreen = true;
}
organizationSelectionTreeForm.setNoResetOnReturn(true);
String forwardURL = "";
if (rowCount != 0 || forceToAccountListScreen) {
forwardURL = buildAccountListForwardURL(organizationSelectionTreeForm, mapping, forceToAccountListScreen);
}
else {
forwardURL = buildReportSelectForwardURL(organizationSelectionTreeForm, mapping);
}
return new ActionForward(forwardURL, true);
}
/**
* Removes unselected SubTreeOrgs since selectionSubTreeOrgs contains all SubTreeOrgs.
*
* @param selectionSubTreeOrgs
* @return
*/
public List<BudgetConstructionPullup> removeUnselectedSubTreeOrgs(List<BudgetConstructionPullup> selectionSubTreeOrgs) {
List<BudgetConstructionPullup> returnList = new ArrayList<BudgetConstructionPullup>();
for (BudgetConstructionPullup pullUp : selectionSubTreeOrgs) {
if (pullUp.getPullFlag() > 0) {
returnList.add(pullUp);
}
}
return returnList;
}
/**
* Parses the report name from the methodToCall request parameter and retrieves the associated ReportMode.
*
* @param request - HttpServletRequest containing the methodToCall parameter
* @param organizationSelectionTreeForm - OrganizationSelectionTreeForm to set report mode on
* @return BudgetConstructionReportMode - mode associated with parsed report name
*/
private BudgetConstructionReportMode setupReportMode(HttpServletRequest request, OrganizationSelectionTreeForm organizationSelectionTreeForm) {
String fullParameter = (String) request.getAttribute(KRADConstants.METHOD_TO_CALL_ATTRIBUTE);
String reportName = StringUtils.substringBetween(fullParameter, KRADConstants.METHOD_TO_CALL_PARM1_LEFT_DEL, KRADConstants.METHOD_TO_CALL_PARM1_RIGHT_DEL);
organizationSelectionTreeForm.setReportMode(reportName);
return BudgetConstructionReportMode.getBudgetConstructionReportModeByName(organizationSelectionTreeForm.getReportMode());
}
/**
* Builds URL for the action listing action.
*/
private String buildAccountListForwardURL(OrganizationSelectionTreeForm organizationSelectionTreeForm, ActionMapping mapping, boolean forceToAccountListScreen) {
Map<String, String> urlParms = new HashMap<String, String>();
urlParms.put(BCConstants.Report.REPORT_MODE, organizationSelectionTreeForm.getReportMode());
urlParms.put(BCConstants.CURRENT_POINT_OF_VIEW_KEYCODE, organizationSelectionTreeForm.getCurrentPointOfViewKeyCode());
if (forceToAccountListScreen) {
urlParms.put(BCConstants.FORCE_TO_ACCOUNT_LIST_SCREEN, "true");
}
else {
urlParms.put(BCConstants.FORCE_TO_ACCOUNT_LIST_SCREEN, "false");
}
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())) {
urlParms.put(BCConstants.Report.REPORT_CONSOLIDATION, "true");
}
return BudgetUrlUtil.buildTempListLookupUrl(mapping, organizationSelectionTreeForm, BCConstants.TempListLookupMode.ACCOUNT_SELECT_ABOVE_POV, BudgetConstructionAccountSelect.class.getName(), urlParms);
}
/**
* Builds URL for the organization selection action.
*/
private String buildReportSelectForwardURL(OrganizationSelectionTreeForm organizationSelectionTreeForm, ActionMapping mapping) {
Map<String, String> parameters = new HashMap<String, String>();
parameters.put(BCConstants.Report.REPORT_MODE, organizationSelectionTreeForm.getReportMode());
parameters.put(BCConstants.CURRENT_POINT_OF_VIEW_KEYCODE, organizationSelectionTreeForm.getCurrentPointOfViewKeyCode());
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())) {
parameters.put(BCConstants.Report.REPORT_CONSOLIDATION, "true");
}
return BudgetUrlUtil.buildBudgetUrl(mapping, organizationSelectionTreeForm, BCConstants.ORG_REPORT_SELECTION_ACTION, parameters);
}
}