001    /*
002     * Copyright 2011 The Kuali Foundation.
003     * 
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     * http://www.opensource.org/licenses/ecl2.php
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.kfs.module.bc.document.web.struts;
017    
018    import java.util.HashMap;
019    import java.util.List;
020    import java.util.Map;
021    import java.util.Properties;
022    
023    import javax.servlet.http.HttpServletRequest;
024    import javax.servlet.http.HttpServletResponse;
025    
026    import org.apache.commons.lang.StringUtils;
027    import org.apache.struts.action.ActionForm;
028    import org.apache.struts.action.ActionForward;
029    import org.apache.struts.action.ActionMapping;
030    import org.kuali.kfs.module.bc.BCConstants;
031    import org.kuali.kfs.module.bc.BCKeyConstants;
032    import org.kuali.kfs.module.bc.BCPropertyConstants;
033    import org.kuali.kfs.module.bc.businessobject.BudgetConstructionIntendedIncumbent;
034    import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPosition;
035    import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding;
036    import org.kuali.kfs.module.bc.businessobject.SalarySettingExpansion;
037    import org.kuali.kfs.module.bc.document.BudgetConstructionDocument;
038    import org.kuali.kfs.module.bc.document.service.BudgetDocumentService;
039    import org.kuali.kfs.module.bc.document.service.SalarySettingService;
040    import org.kuali.kfs.module.bc.document.validation.event.QuickSaveSalarySettingEvent;
041    import org.kuali.kfs.module.bc.util.BudgetUrlUtil;
042    import org.kuali.kfs.sys.DynamicCollectionComparator;
043    import org.kuali.kfs.sys.KFSConstants;
044    import org.kuali.kfs.sys.KFSPropertyConstants;
045    import org.kuali.kfs.sys.context.SpringContext;
046    import org.kuali.rice.kns.service.BusinessObjectService;
047    import org.kuali.rice.kns.service.KualiConfigurationService;
048    import org.kuali.rice.kns.util.GlobalVariables;
049    import org.kuali.rice.kns.util.KualiDecimal;
050    import org.kuali.rice.kns.util.ObjectUtils;
051    import org.kuali.rice.kns.util.UrlFactory;
052    import org.kuali.rice.kns.web.struts.form.KualiForm;
053    
054    /**
055     * the struts action for the quick salary setting
056     */
057    public class QuickSalarySettingAction extends SalarySettingBaseAction {
058        private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(QuickSalarySettingAction.class);
059    
060        private BusinessObjectService businessObjectService = SpringContext.getBean(BusinessObjectService.class);
061        private SalarySettingService salarySettingService = SpringContext.getBean(SalarySettingService.class);
062        private BudgetDocumentService budgetDocumentService = SpringContext.getBean(BudgetDocumentService.class);
063    
064        /**
065         * @see org.kuali.rice.kns.web.struts.action.KualiAction#refresh(org.apache.struts.action.ActionMapping,
066         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
067         */
068        @Override
069        public ActionForward refresh(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
070            LOG.info("refresh() started");
071    
072            super.refresh(mapping, form, request, response);
073    
074            QuickSalarySettingForm salarySettingForm = (QuickSalarySettingForm) form;
075            salarySettingForm.setRefreshIncumbentBeforeSalarySetting(false);
076            salarySettingForm.setRefreshPositionBeforeSalarySetting(false);
077    
078            return this.loadExpansionScreen(mapping, form, request, response);
079        }
080    
081        /**
082         * Forwards to budget incumbent lookup passing parameters for new funding line.
083         */
084        public ActionForward addIncumbent(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
085            QuickSalarySettingForm salarySettingForm = (QuickSalarySettingForm) form;
086    
087            if (!salarySettingForm.isViewOnlyEntry()) {
088                boolean isSaved = this.save(form);
089                if (!isSaved) {
090                    return mapping.findForward(KFSConstants.MAPPING_BASIC);
091                }
092            }
093    
094            Map<String, String> parameters = new HashMap<String, String>();
095            parameters.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, salarySettingForm.getChartOfAccountsCode());
096            parameters.put(KFSPropertyConstants.ACCOUNT_NUMBER, salarySettingForm.getAccountNumber());
097            parameters.put(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, salarySettingForm.getSubAccountNumber());
098            parameters.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, salarySettingForm.getFinancialObjectCode());
099            parameters.put(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE, salarySettingForm.getFinancialSubObjectCode());
100    
101            parameters.put(BCConstants.SHOW_SALARY_BY_INCUMBENT_ACTION, Boolean.TRUE.toString());
102            parameters.put(BCPropertyConstants.BUDGET_BY_ACCOUNT_MODE, Boolean.TRUE.toString());
103            parameters.put(BCPropertyConstants.ADD_LINE, Boolean.TRUE.toString());
104            parameters.put(BCPropertyConstants.MAIN_WINDOW, (salarySettingForm.isMainWindow() ? "true" : "false"));
105    
106            // anchor, if it exists
107            if (form instanceof KualiForm && StringUtils.isNotEmpty(salarySettingForm.getAnchor())) {
108                parameters.put(BCConstants.RETURN_ANCHOR, salarySettingForm.getAnchor());
109            }
110    
111            // the form object is retrieved and removed upon return by KualiRequestProcessor.processActionForm()
112            parameters.put(BCConstants.RETURN_FORM_KEY, GlobalVariables.getUserSession().addObject(form, BCConstants.FORMKEY_PREFIX));
113    
114            String lookupUrl = BudgetUrlUtil.buildTempListLookupUrl(mapping, salarySettingForm, BCConstants.TempListLookupMode.INTENDED_INCUMBENT, BudgetConstructionIntendedIncumbent.class.getName(), parameters);
115    
116            this.cleanupAnySessionForm(mapping, request);
117            return new ActionForward(lookupUrl, true);
118        }
119    
120        /**
121         * Forwards to budget position lookup passing parameters for new funding line.
122         */
123        public ActionForward addPosition(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
124            QuickSalarySettingForm salarySettingForm = (QuickSalarySettingForm) form;
125    
126            if (!salarySettingForm.isViewOnlyEntry()) {
127                boolean isSaved = this.save(form);
128                if (!isSaved) {
129                    return mapping.findForward(KFSConstants.MAPPING_BASIC);
130                }
131            }
132    
133            Map<String, String> parameters = new HashMap<String, String>();
134            parameters.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, salarySettingForm.getChartOfAccountsCode());
135            parameters.put(KFSPropertyConstants.ACCOUNT_NUMBER, salarySettingForm.getAccountNumber());
136            parameters.put(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, salarySettingForm.getSubAccountNumber());
137            parameters.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, salarySettingForm.getFinancialObjectCode());
138            parameters.put(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE, salarySettingForm.getFinancialSubObjectCode());
139    
140            parameters.put(BCConstants.SHOW_SALARY_BY_POSITION_ACTION, Boolean.toString(salarySettingForm.isBudgetByAccountMode()));
141            parameters.put(BCPropertyConstants.BUDGET_BY_ACCOUNT_MODE, Boolean.TRUE.toString());
142            parameters.put(BCPropertyConstants.ADD_LINE, Boolean.TRUE.toString());
143            parameters.put(BCPropertyConstants.MAIN_WINDOW, (salarySettingForm.isMainWindow() ? "true" : "false"));
144    
145            // anchor, if it exists
146            if (form instanceof KualiForm && StringUtils.isNotEmpty(salarySettingForm.getAnchor())) {
147                parameters.put(BCConstants.RETURN_ANCHOR, salarySettingForm.getAnchor());
148            }
149    
150            // the form object is retrieved and removed upon return by KualiRequestProcessor.processActionForm()
151            parameters.put(BCConstants.RETURN_FORM_KEY, GlobalVariables.getUserSession().addObject(form, BCConstants.FORMKEY_PREFIX));
152    
153            String lookupUrl = BudgetUrlUtil.buildTempListLookupUrl(mapping, salarySettingForm, BCConstants.TempListLookupMode.BUDGET_POSITION_LOOKUP, BudgetConstructionPosition.class.getName(), parameters);
154    
155            this.cleanupAnySessionForm(mapping, request);
156            return new ActionForward(lookupUrl, true);
157        }
158    
159        /**
160         * @see org.kuali.kfs.module.bc.document.web.struts.SalarySettingBaseAction#loadExpansionScreen(org.apache.struts.action.ActionMapping,
161         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
162         */
163        @Override
164        public ActionForward loadExpansionScreen(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
165            QuickSalarySettingForm salarySettingForm = (QuickSalarySettingForm) form;
166    
167            Map<String, Object> keyMap = salarySettingForm.getKeyMapOfSalarySettingItem();
168            SalarySettingExpansion salarySettingExpansion = (SalarySettingExpansion) businessObjectService.findByPrimaryKey(SalarySettingExpansion.class, keyMap);
169    
170            if (salarySettingExpansion == null) {
171                GlobalVariables.getMessageMap().putError(KFSConstants.GLOBAL_MESSAGES, BCKeyConstants.ERROR_SALARY_SETTING_EXPANSION_NOT_FOUND);
172                return this.returnToCaller(mapping, form, request, response);
173            }
174    
175            salarySettingForm.setSalarySettingExpansion(salarySettingExpansion);
176    
177            return mapping.findForward(KFSConstants.MAPPING_BASIC);
178        }
179    
180        /**
181         * perform salary setting by incumbent with the specified funding line
182         */
183        public ActionForward performIncumbentSalarySetting(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
184            QuickSalarySettingForm salarySettingForm = (QuickSalarySettingForm) form;
185    
186            if (!salarySettingForm.isViewOnlyEntry()) {
187                boolean isSaved = this.save(form);
188                if (!isSaved) {
189                    return mapping.findForward(KFSConstants.MAPPING_BASIC);
190                }
191            }
192    
193            String salarySettingURL = this.buildDetailSalarySettingURL(mapping, form, request, BCConstants.INCUMBENT_SALARY_SETTING_ACTION);
194            this.cleanupAnySessionForm(mapping, request);
195            return new ActionForward(salarySettingURL, true);
196        }
197    
198        /**
199         * perform salary setting by position with the specified funding line
200         */
201        public ActionForward performPositionSalarySetting(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
202            QuickSalarySettingForm salarySettingForm = (QuickSalarySettingForm) form;
203    
204            if (!salarySettingForm.isViewOnlyEntry()) {
205                boolean isSaved = this.save(form);
206                if (!isSaved) {
207                    return mapping.findForward(KFSConstants.MAPPING_BASIC);
208                }
209            }
210    
211            String salarySettingURL = this.buildDetailSalarySettingURL(mapping, form, request, BCConstants.POSITION_SALARY_SETTING_ACTION);
212            this.cleanupAnySessionForm(mapping, request);
213            return new ActionForward(salarySettingURL, true);
214        }
215    
216        /**
217         * adjust the salary amounts of all funding lines
218         */
219        public ActionForward adjustAllSalarySettingLinesPercent(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
220            QuickSalarySettingForm salarySettingForm = (QuickSalarySettingForm) form;
221            SalarySettingExpansion salarySettingExpansion = salarySettingForm.getSalarySettingExpansion();
222    
223            List<PendingBudgetConstructionAppointmentFunding> appointmentFundings = salarySettingForm.getAppointmentFundings();
224    
225            KualiDecimal adjustmentAmount = salarySettingForm.getAdjustmentAmount();
226            String adjustmentMeasurement = salarySettingForm.getAdjustmentMeasurement();
227    
228            // the adjustment measurement and amount must be provided
229            if (StringUtils.isBlank(adjustmentMeasurement)) {
230                GlobalVariables.getMessageMap().putError(BCPropertyConstants.ADJUSTMENT_MEASUREMENT, BCKeyConstants.ERROR_ADJUSTMENT_PERCENT_REQUIRED);
231                return mapping.findForward(KFSConstants.MAPPING_BASIC);
232            }
233            if (ObjectUtils.isNull(adjustmentAmount)) {
234                GlobalVariables.getMessageMap().putError(BCPropertyConstants.ADJUSTMENT_AMOUNT, BCKeyConstants.ERROR_ADJUSTMENT_AMOUNT_REQUIRED);
235                return mapping.findForward(KFSConstants.MAPPING_BASIC);
236            }
237    
238            // retrieve corresponding document in advance in order to use the rule framework
239            BudgetConstructionDocument document = budgetDocumentService.getBudgetConstructionDocument(salarySettingExpansion);
240            if (document == null) {
241                GlobalVariables.getMessageMap().putError(KFSConstants.GLOBAL_ERRORS, BCKeyConstants.ERROR_BUDGET_DOCUMENT_NOT_FOUND, salarySettingExpansion.getSalarySettingExpansionString());
242                return mapping.findForward(KFSConstants.MAPPING_BASIC);
243            }
244    
245            for (PendingBudgetConstructionAppointmentFunding appointmentFunding : appointmentFundings) {
246                appointmentFunding.setAdjustmentAmount(adjustmentAmount);
247                appointmentFunding.setAdjustmentMeasurement(adjustmentMeasurement);
248    
249                String errorKeyPrefix = this.getErrorKeyPrefixOfAppointmentFundingLine(appointmentFundings, appointmentFunding);
250    
251                ActionForward adjustAction = this.adjustSalarySettingLinePercent(mapping, salarySettingForm, appointmentFunding, document, errorKeyPrefix);
252            }
253    
254            return mapping.findForward(KFSConstants.MAPPING_BASIC);
255        }
256    
257    
258        /**
259         * perform salary setting by position with the specified funding line
260         */
261        public ActionForward toggleAdjustmentMeasurement(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
262            QuickSalarySettingForm salarySettingForm = (QuickSalarySettingForm) form;
263    
264            boolean currentStatus = salarySettingForm.isHideAdjustmentMeasurement();
265            salarySettingForm.setHideAdjustmentMeasurement(!currentStatus);
266    
267            return mapping.findForward(KFSConstants.MAPPING_BASIC);
268        }
269    
270        /**
271         * @see org.kuali.kfs.module.bc.document.web.struts.SalarySettingBaseAction#close(org.apache.struts.action.ActionMapping,
272         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
273         */
274        @Override
275        public ActionForward close(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
276            QuickSalarySettingForm salarySettingForm = (QuickSalarySettingForm) form;
277    
278            ActionForward closeActionForward;
279            if (salarySettingForm.isViewOnlyEntry() || salarySettingForm.isSalarySettingClosed()) {
280                closeActionForward = this.returnAfterClose(salarySettingForm, mapping, request, response);
281            }
282            else {
283                closeActionForward = super.close(mapping, salarySettingForm, request, response);
284            }
285            return closeActionForward;
286        }
287    
288        /**
289         * @see org.kuali.kfs.module.bc.document.web.struts.SalarySettingBaseAction#save(org.apache.struts.action.ActionMapping,
290         *      org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
291         */
292        @Override
293        public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
294            boolean isSaved = this.save(form);
295            if (isSaved) {
296                GlobalVariables.getMessageList().add(BCKeyConstants.MESSAGE_SALARY_SETTING_SAVED);
297            }
298    
299            return mapping.findForward(KFSConstants.MAPPING_BASIC);
300        }
301    
302        // save the savable appointment funding lines
303        private boolean save(ActionForm form) {
304            QuickSalarySettingForm salarySettingForm = (QuickSalarySettingForm) form;
305            SalarySettingExpansion salarySettingExpansion = salarySettingForm.getSalarySettingExpansion();
306    
307            BudgetConstructionDocument document = budgetDocumentService.getBudgetConstructionDocument(salarySettingExpansion);
308            if (document == null) {
309                GlobalVariables.getMessageMap().putError(KFSConstants.GLOBAL_ERRORS, BCKeyConstants.ERROR_BUDGET_DOCUMENT_NOT_FOUND, salarySettingExpansion.getSalarySettingExpansionString());
310                return false;
311            }
312    
313            // get budget allowed flag which is used to deny any updates other than delete
314            boolean isBudgetAllowed = budgetDocumentService.isBudgetableDocument(document);
315    
316            List<PendingBudgetConstructionAppointmentFunding> savableAppointmentFundings = salarySettingForm.getAppointmentFundings();
317            List<PendingBudgetConstructionAppointmentFunding> appointmentFundings = salarySettingForm.getAppointmentFundings();
318    
319            for (PendingBudgetConstructionAppointmentFunding savableFunding : savableAppointmentFundings) {
320                String errorKeyPrefix = this.getErrorKeyPrefixOfAppointmentFundingLine(appointmentFundings, savableFunding);
321    
322                // added 12/3/2008 - gwp
323                // no rules check for marked delete line
324                if (savableFunding.isAppointmentFundingDeleteIndicator()) {
325                    continue;
326                }
327    
328                salarySettingService.recalculateDerivedInformation(savableFunding);
329    
330                // any other update must be against a budget allowed document
331                if (!isBudgetAllowed) {
332                    GlobalVariables.getMessageMap().addToErrorPath(errorKeyPrefix);
333                    GlobalVariables.getMessageMap().putError(BCPropertyConstants.APPOINTMENT_REQUESTED_AMOUNT, BCKeyConstants.ERROR_BUDGET_DOCUMENT_NOT_BUDGETABLE, salarySettingExpansion.getSalarySettingExpansionString());
334                    return false;
335                }
336    
337                // validate the savable appointment funding lines
338                boolean isValid = this.invokeRules(new QuickSaveSalarySettingEvent(KFSConstants.EMPTY_STRING, errorKeyPrefix, document, savableFunding));
339                if (!isValid) {
340                    return false;
341                }
342            }
343    
344            salarySettingService.saveSalarySetting(salarySettingExpansion);
345            salarySettingExpansion.refresh();
346    
347            return true;
348        }
349    
350        // build the URL for the specified salary setting method
351        private String buildDetailSalarySettingURL(ActionMapping mapping, ActionForm form, HttpServletRequest request, String salarySettingAction) {
352            QuickSalarySettingForm salarySettingForm = (QuickSalarySettingForm) form;
353    
354            int indexOfSelectedLine = this.getSelectedLine(request);
355            List<PendingBudgetConstructionAppointmentFunding> appointmentFundings = salarySettingForm.getAppointmentFundings();
356            DynamicCollectionComparator.sort(appointmentFundings, KFSPropertyConstants.POSITION_NUMBER, KFSPropertyConstants.EMPLID);
357    
358            PendingBudgetConstructionAppointmentFunding appointmentFunding = appointmentFundings.get(indexOfSelectedLine);
359    
360            // get the base action
361            Map<String, String> salarySettingMethodAction = this.getSalarySettingMethodActionInfo();
362            String basePath = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSConstants.APPLICATION_URL_KEY);
363            String baseAction = basePath + "/" + salarySettingAction;
364            String methodToCall = salarySettingMethodAction.get(salarySettingAction);
365    
366            // build the query strings with the information of the selected line
367            Properties parameters = new Properties();
368            parameters.put(KFSConstants.DISPATCH_REQUEST_PARAMETER, methodToCall);
369            parameters.put(KFSConstants.BACK_LOCATION, basePath + mapping.getPath() + KFSConstants.ACTION_EXTENSION_DOT_DO);
370    
371            parameters.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, appointmentFunding.getUniversityFiscalYear().toString());
372            parameters.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, appointmentFunding.getChartOfAccountsCode());
373            parameters.put(KFSPropertyConstants.ACCOUNT_NUMBER, appointmentFunding.getAccountNumber());
374            parameters.put(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, appointmentFunding.getSubAccountNumber());
375            parameters.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, appointmentFunding.getFinancialObjectCode());
376            parameters.put(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE, appointmentFunding.getFinancialSubObjectCode());
377            parameters.put(KFSPropertyConstants.POSITION_NUMBER, appointmentFunding.getPositionNumber());
378            parameters.put(KFSPropertyConstants.EMPLID, appointmentFunding.getEmplid());
379    
380            parameters.put(BCPropertyConstants.REFRESH_INCUMBENT_BEFORE_SALARY_SETTING, Boolean.valueOf(salarySettingForm.isRefreshIncumbentBeforeSalarySetting()).toString());
381            parameters.put(BCPropertyConstants.REFRESH_POSITION_BEFORE_SALARY_SETTING, Boolean.valueOf(salarySettingForm.isRefreshPositionBeforeSalarySetting()).toString());
382    
383            parameters.put(BCPropertyConstants.BUDGET_BY_ACCOUNT_MODE, Boolean.TRUE.toString());
384            parameters.put(BCPropertyConstants.ADD_LINE, Boolean.FALSE.toString());
385            parameters.put(BCPropertyConstants.MAIN_WINDOW, (salarySettingForm.isMainWindow() ? "true" : "false"));
386    
387            // anchor, if it exists
388            if (form instanceof KualiForm && StringUtils.isNotEmpty(salarySettingForm.getAnchor())) {
389                parameters.put(BCConstants.RETURN_ANCHOR, salarySettingForm.getAnchor());
390            }
391    
392            // the form object is retrieved and removed upon return by KualiRequestProcessor.processActionForm()
393            parameters.put(BCConstants.RETURN_FORM_KEY, GlobalVariables.getUserSession().addObject(form, BCConstants.FORMKEY_PREFIX));
394    
395            return UrlFactory.parameterizeUrl(baseAction, parameters);
396        }
397    
398        // get the pairs of the method and action of salary settings
399        private Map<String, String> getSalarySettingMethodActionInfo() {
400            Map<String, String> salarySettingMethodAction = new HashMap<String, String>();
401            salarySettingMethodAction.put(BCConstants.INCUMBENT_SALARY_SETTING_ACTION, BCConstants.INCUMBENT_SALARY_SETTING_METHOD);
402            salarySettingMethodAction.put(BCConstants.POSITION_SALARY_SETTING_ACTION, BCConstants.POSITION_SALARY_SETTING_METHOD);
403    
404            return salarySettingMethodAction;
405        }
406    
407        /**
408         * @see org.kuali.kfs.module.bc.document.web.struts.SalarySettingBaseAction#getFundingAwareObjectName()
409         */
410        @Override
411        protected String getFundingAwareObjectName() {
412            return BCPropertyConstants.SALARY_SETTING_EXPANSION;
413        }
414    }