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