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.businessobject.lookup; 017 018 import java.util.ArrayList; 019 import java.util.List; 020 import java.util.Map; 021 import java.util.Properties; 022 023 import org.apache.commons.lang.StringUtils; 024 import org.kuali.kfs.module.bc.BCConstants; 025 import org.kuali.kfs.module.bc.BCPropertyConstants; 026 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionIntendedIncumbent; 027 import org.kuali.kfs.module.bc.util.BudgetParameterFinder; 028 import org.kuali.kfs.sys.KFSConstants; 029 import org.kuali.kfs.sys.KFSPropertyConstants; 030 import org.kuali.rice.kns.bo.BusinessObject; 031 import org.kuali.rice.kns.lookup.HtmlData; 032 import org.kuali.rice.kns.lookup.HtmlData.AnchorHtmlData; 033 import org.kuali.rice.kns.service.KualiConfigurationService; 034 import org.kuali.rice.kns.util.KNSConstants; 035 import org.kuali.rice.kns.util.UrlFactory; 036 import org.kuali.rice.kns.web.format.BooleanFormatter; 037 038 /** 039 * Lookupable helper service implementation for the intended incumbent lookup.. 040 */ 041 public class IntendedIncumbentLookupableHelperServiceImpl extends SelectLookupableHelperServiceImpl { 042 public KualiConfigurationService kualiConfigurationService; 043 044 /** 045 * @see org.kuali.rice.kns.lookup.LookupableHelperService#getCustomActionUrls(org.kuali.rice.kns.bo.BusinessObject, java.util.List, java.util.List pkNames) 046 */ 047 @Override 048 public List<HtmlData> getCustomActionUrls(BusinessObject businessObject, List pkNames) { 049 Map requestParameters = super.getParameters(); 050 if (requestParameters.containsKey(BCConstants.SHOW_SALARY_BY_INCUMBENT_ACTION)) { 051 String[] requestParm = (String[]) requestParameters.get(BCConstants.SHOW_SALARY_BY_INCUMBENT_ACTION); 052 Boolean showSalaryByIncumbent = (Boolean) (new BooleanFormatter()).convertFromPresentationFormat(requestParm[0]); 053 if (!showSalaryByIncumbent) { 054 return getIncumbentCustomActionUrls(businessObject, pkNames); 055 } 056 } 057 else { 058 return getIncumbentCustomActionUrls(businessObject, pkNames); 059 } 060 return getSalarySettingByIncumbentUrls(businessObject); 061 } 062 063 /*** 064 * 065 * @see org.kuali.rice.kns.lookup.AbstractLookupableHelperServiceImpl#getActionUrlHref(org.kuali.rice.kns.bo.BusinessObject, java.lang.String, java.util.List) 066 */ 067 @Override 068 protected String getActionUrlHref(BusinessObject businessObject, String methodToCall, List pkNames){ 069 String href = super.getActionUrlHref(businessObject, methodToCall, pkNames); 070 return StringUtils.replace(href, KFSConstants.MAINTENANCE_ACTION, 071 KFSConstants.RICE_PATH_PREFIX + KFSConstants.MAINTENANCE_ACTION); 072 } 073 074 /** 075 * Checks system parameter to determine if the incumbent table is maintained by an external system or internally. If internally 076 * they calls super to display the edit and copy links. If external then returns the refresh button source. 077 * 078 * @param businessObject business object for result row 079 * @return String holding the action column contents 080 */ 081 private List<HtmlData> getIncumbentCustomActionUrls(BusinessObject businessObject, List pkNames) { 082 BudgetConstructionIntendedIncumbent intendedIncumbent = (BudgetConstructionIntendedIncumbent) businessObject; 083 boolean payrollIncumbentFeed = BudgetParameterFinder.getPayrollIncumbentFeedIndictor(); 084 if (!payrollIncumbentFeed) { 085 return super.getCustomActionUrls(businessObject, pkNames); 086 } 087 return super.getEmptyActionUrls(); 088 } 089 090 /** 091 * Override to check system parameter for determining if the incumbent data is feed from Payroll or maintained in the KFS. 092 * 093 * @see org.kuali.rice.kns.lookup.AbstractLookupableHelperServiceImpl#allowsMaintenanceNewOrCopyAction() 094 */ 095 @Override 096 public boolean allowsMaintenanceNewOrCopyAction() { 097 boolean payrollIncumbentFeed = BudgetParameterFinder.getPayrollIncumbentFeedIndictor(); 098 if (payrollIncumbentFeed) { 099 return false; 100 } 101 102 return true; 103 } 104 105 protected Properties getSalarySettingByIncumbentParameters(BusinessObject businessObject){ 106 BudgetConstructionIntendedIncumbent intendedIncumbent = (BudgetConstructionIntendedIncumbent) businessObject; 107 108 Properties parameters = new Properties(); 109 parameters.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, BCConstants.INCUMBENT_SALARY_SETTING_METHOD); 110 parameters.put(KFSPropertyConstants.EMPLID, intendedIncumbent.getEmplid()); 111 112 Map requestParameters = super.getParameters(); 113 boolean linkToNewWindow = true; 114 if (requestParameters.containsKey(BCPropertyConstants.ADD_LINE)) { 115 String[] requestParm = (String[]) requestParameters.get(BCPropertyConstants.ADD_LINE); 116 parameters.put(BCPropertyConstants.ADD_LINE, requestParm[0]); 117 Boolean addNewFunding = (Boolean) (new BooleanFormatter()).convertFromPresentationFormat(requestParm[0]); 118 if (addNewFunding) { 119 linkToNewWindow = false; 120 } 121 } 122 else { 123 parameters.put(BCPropertyConstants.ADD_LINE, "false"); 124 } 125 126 String[] universityFiscalYear = (String[]) super.getParameters().get(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR); 127 parameters.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, universityFiscalYear[0]); 128 129 if (requestParameters.containsKey(KNSConstants.DOC_FORM_KEY)) { 130 String[] requestParm = (String[]) requestParameters.get(KNSConstants.DOC_FORM_KEY); 131 parameters.put(BCConstants.RETURN_FORM_KEY, requestParm[0]); 132 } 133 else if (requestParameters.containsKey(KFSConstants.FORM_KEY)) { 134 String[] requestParm = (String[]) requestParameters.get(KFSConstants.FORM_KEY); 135 parameters.put(BCConstants.RETURN_FORM_KEY, requestParm[0]); 136 } 137 138 if (requestParameters.containsKey(KFSConstants.BACK_LOCATION)) { 139 String[] requestParm = (String[]) requestParameters.get(KFSConstants.BACK_LOCATION); 140 parameters.put(KFSConstants.BACK_LOCATION, requestParm[0]); 141 } 142 143 if (requestParameters.containsKey(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE)) { 144 String[] requestParm = (String[]) requestParameters.get(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE); 145 parameters.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, requestParm[0]); 146 } 147 148 if (requestParameters.containsKey(KFSPropertyConstants.ACCOUNT_NUMBER)) { 149 String[] requestParm = (String[]) requestParameters.get(KFSPropertyConstants.ACCOUNT_NUMBER); 150 parameters.put(KFSPropertyConstants.ACCOUNT_NUMBER, requestParm[0]); 151 } 152 153 if (requestParameters.containsKey(KFSPropertyConstants.SUB_ACCOUNT_NUMBER)) { 154 String[] requestParm = (String[]) requestParameters.get(KFSPropertyConstants.SUB_ACCOUNT_NUMBER); 155 parameters.put(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, requestParm[0]); 156 } 157 158 if (requestParameters.containsKey(KFSPropertyConstants.FINANCIAL_OBJECT_CODE)) { 159 String[] requestParm = (String[]) requestParameters.get(KFSPropertyConstants.FINANCIAL_OBJECT_CODE); 160 parameters.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, requestParm[0]); 161 } 162 163 if (requestParameters.containsKey(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE)) { 164 String[] requestParm = (String[]) requestParameters.get(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE); 165 parameters.put(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE, requestParm[0]); 166 } 167 168 if (requestParameters.containsKey(BCPropertyConstants.BUDGET_BY_ACCOUNT_MODE)) { 169 String[] requestParm = (String[]) requestParameters.get(BCPropertyConstants.BUDGET_BY_ACCOUNT_MODE); 170 parameters.put(BCPropertyConstants.BUDGET_BY_ACCOUNT_MODE, requestParm[0]); 171 } 172 173 if (requestParameters.containsKey(BCPropertyConstants.MAIN_WINDOW)) { 174 String[] requestParm = (String[]) requestParameters.get(BCPropertyConstants.MAIN_WINDOW); 175 parameters.put(BCPropertyConstants.MAIN_WINDOW, requestParm[0]); 176 } 177 178 if (requestParameters.containsKey(BCPropertyConstants.SINGLE_ACCOUNT_MODE)) { 179 String[] requestParm = (String[]) requestParameters.get(BCPropertyConstants.SINGLE_ACCOUNT_MODE); 180 parameters.put(BCPropertyConstants.SINGLE_ACCOUNT_MODE, requestParm[0]); 181 } 182 else { 183 parameters.put(BCPropertyConstants.SINGLE_ACCOUNT_MODE, "false"); 184 } 185 186 parameters.put(BCConstants.REFRESH_INCUMBENT_BEFORE_SALARY_SETTING, "false"); 187 return parameters; 188 } 189 190 /** 191 * Builds URL to salary setting by Incumbent setting parameters based on the caller request. 192 * 193 * @param businessObject business object for result row 194 * @return String holding the action column contents 195 */ 196 public List<HtmlData> getSalarySettingByIncumbentUrls(BusinessObject businessObject) { 197 List<HtmlData> anchorHtmlDataList = new ArrayList<HtmlData>(); 198 199 Properties parameters = getSalarySettingByIncumbentParameters(businessObject); 200 String href = UrlFactory.parameterizeUrl(BCConstants.INCUMBENT_SALARY_SETTING_ACTION, parameters); 201 AnchorHtmlData urlData1 = 202 new AnchorHtmlData(href, BCConstants.INCUMBENT_SALARY_SETTING_METHOD, "Incmbnt Salset"); 203 204 Map requestParameters = super.getParameters(); 205 206 boolean linkToNewWindow = true; 207 if (requestParameters.containsKey(BCPropertyConstants.ADD_LINE)) { 208 String[] requestParm = (String[]) requestParameters.get(BCPropertyConstants.ADD_LINE); 209 Boolean addNewFunding = (Boolean) (new BooleanFormatter()).convertFromPresentationFormat(requestParm[0]); 210 if (addNewFunding) { 211 linkToNewWindow = false; 212 } 213 } 214 if (linkToNewWindow) { 215 urlData1.setTarget(KFSConstants.NEW_WINDOW_URL_TARGET); 216 } 217 218 anchorHtmlDataList.add(urlData1); 219 220 // now add refresh url if feed from payroll is on 221 boolean payrollIncumbentFeed = BudgetParameterFinder.getPayrollIncumbentFeedIndictor(); 222 if (payrollIncumbentFeed) { 223 parameters.put(BCConstants.REFRESH_INCUMBENT_BEFORE_SALARY_SETTING, "true"); 224 href = UrlFactory.parameterizeUrl(BCConstants.INCUMBENT_SALARY_SETTING_ACTION, parameters); 225 AnchorHtmlData urlData2 = 226 new AnchorHtmlData(href, BCConstants.INCUMBENT_SALARY_SETTING_METHOD, "Incmbnt Salset w/sync"); 227 228 if (linkToNewWindow) { 229 urlData2.setTarget(KFSConstants.NEW_WINDOW_URL_TARGET); 230 } 231 anchorHtmlDataList.add(urlData2); 232 anchorHtmlDataList.get(anchorHtmlDataList.lastIndexOf(urlData2)).setPrependDisplayText("<br />"); 233 } 234 235 return anchorHtmlDataList; 236 } 237 238 /** 239 * Sets the kualiConfigurationService attribute value. 240 * 241 * @param kualiConfigurationService The kualiConfigurationService to set. 242 */ 243 public void setKualiConfigurationService(KualiConfigurationService kualiConfigurationService) { 244 this.kualiConfigurationService = kualiConfigurationService; 245 } 246 247 }