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.ec.businessobject.lookup;
017    
018    import java.util.Collections;
019    import java.util.HashMap;
020    import java.util.List;
021    import java.util.Map;
022    
023    import org.kuali.kfs.integration.ld.LaborLedgerBalance;
024    import org.kuali.kfs.integration.ld.LaborLedgerBalanceForEffortCertification;
025    import org.kuali.kfs.module.ec.EffortPropertyConstants;
026    import org.kuali.kfs.module.ec.businessobject.EffortCertificationReportDefinition;
027    import org.kuali.kfs.module.ec.service.EffortCertificationReportDefinitionService;
028    import org.kuali.kfs.sys.KFSConstants;
029    import org.kuali.kfs.sys.KFSPropertyConstants;
030    import org.kuali.kfs.sys.service.OptionsService;
031    import org.kuali.rice.kns.bo.BusinessObject;
032    import org.kuali.rice.kns.lookup.KualiLookupableHelperServiceImpl;
033    import org.kuali.rice.kns.service.BusinessObjectService;
034    import org.kuali.rice.kns.service.KualiModuleService;
035    import org.kuali.rice.kns.util.BeanPropertyComparator;
036    import org.kuali.rice.kns.util.KNSConstants;
037    
038    public class EffortLedgerBalanceLookupableHelperServiceImpl extends KualiLookupableHelperServiceImpl {
039    
040        private KualiModuleService kualiModuleService;
041        private BusinessObjectService businessObjectService;
042        private OptionsService optionsService;
043        private EffortCertificationReportDefinitionService effortCertificationReportDefinitionService;
044    
045        /**
046         * @see org.kuali.rice.kns.lookup.LookupableHelperService#getSearchResults(java.util.Map)
047         */
048        @Override
049        public List<? extends BusinessObject> getSearchResults(Map<String, String> fieldValues) {
050            Map<String, Object> searchFieldValues = this.getSearchFieldValues(fieldValues);
051            List<String> defaultSortColumns = this.getDefaultSortColumns();
052    
053            List<? extends BusinessObject> searchResults = (List<? extends BusinessObject>) getLookupService().findCollectionBySearch(getBusinessObjectClass(), searchFieldValues);
054    
055            if (defaultSortColumns.size() > 0) {
056                Collections.sort(searchResults, new BeanPropertyComparator(defaultSortColumns, true));
057            }
058    
059            return searchResults;
060        }
061    
062        /**
063         * build the real search field value map from the given field values
064         * 
065         * @param fieldValues the given field values
066         * @return the real search field value map built from the given field values
067         */
068        private Map<String, Object> getSearchFieldValues(Map<String, String> fieldValues) {
069            String reportYear = fieldValues.get(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR);
070            String reportNumber = fieldValues.get(EffortPropertyConstants.EFFORT_CERTIFICATION_REPORT_NUMBER);
071    
072            Map<String, String> primaryKeys = new HashMap<String, String>();
073            primaryKeys.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, reportYear);
074            primaryKeys.put(EffortPropertyConstants.EFFORT_CERTIFICATION_REPORT_NUMBER, reportNumber);
075    
076            EffortCertificationReportDefinition reportDefiniton = effortCertificationReportDefinitionService.findReportDefinitionByPrimaryKey(primaryKeys);
077    
078            Map<String, Object> searchFieldValues = new HashMap<String, Object>();
079            searchFieldValues.putAll(fieldValues);
080            searchFieldValues.remove(EffortPropertyConstants.EFFORT_CERTIFICATION_REPORT_NUMBER);
081    
082            String fiscalYears = KFSConstants.EMPTY_STRING;
083            String expenseObjectTypeCodes = KFSConstants.EMPTY_STRING;
084            for (Integer fiscalYear : reportDefiniton.getReportPeriods().keySet()) {
085                fiscalYears += fiscalYear + KNSConstants.OR_LOGICAL_OPERATOR;
086                expenseObjectTypeCodes += optionsService.getOptions(fiscalYear).getFinObjTypeExpenditureexpCd() + KNSConstants.OR_LOGICAL_OPERATOR;
087            }
088            searchFieldValues.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, fiscalYears);
089            searchFieldValues.put(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE, expenseObjectTypeCodes);
090    
091            String balanceTypeCodes = KFSConstants.BALANCE_TYPE_ACTUAL + KNSConstants.OR_LOGICAL_OPERATOR + KFSConstants.BALANCE_TYPE_A21;
092            searchFieldValues.put(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE, balanceTypeCodes);
093    
094            return searchFieldValues;
095        }
096    
097        /**
098         * @see org.kuali.rice.kns.lookup.AbstractLookupableHelperServiceImpl#getBusinessObjectClass()
099         */
100        @Override
101        public Class<? extends LaborLedgerBalance> getBusinessObjectClass() {
102            return kualiModuleService.getResponsibleModuleService(LaborLedgerBalanceForEffortCertification.class).createNewObjectFromExternalizableClass(LaborLedgerBalanceForEffortCertification.class).getClass();
103        }
104    
105        /**
106         * Sets the businessObjectService attribute value.
107         * 
108         * @param businessObjectService The businessObjectService to set.
109         */
110        public void setBusinessObjectService(BusinessObjectService businessObjectService) {
111            this.businessObjectService = businessObjectService;
112        }
113    
114        /**
115         * Sets the effortCertificationReportDefinitionService attribute value.
116         * 
117         * @param effortCertificationReportDefinitionService The effortCertificationReportDefinitionService to set.
118         */
119        public void setEffortCertificationReportDefinitionService(EffortCertificationReportDefinitionService effortCertificationReportDefinitionService) {
120            this.effortCertificationReportDefinitionService = effortCertificationReportDefinitionService;
121        }
122    
123        /**
124         * Sets the optionsService attribute value.
125         * 
126         * @param optionsService The optionsService to set.
127         */
128        public void setOptionsService(OptionsService optionsService) {
129            this.optionsService = optionsService;
130        }
131    
132        /**
133         * Sets the kualiModuleService attribute value.
134         * 
135         * @param kualiModuleService The kualiModuleService to set.
136         */
137        public void setKualiModuleService(KualiModuleService kualiModuleService) {
138            this.kualiModuleService = kualiModuleService;
139        }
140    
141    }