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.ld.service.impl;
017    
018    import java.util.Collection;
019    import java.util.List;
020    import java.util.Map;
021    
022    import org.kuali.kfs.module.ld.businessobject.AccountStatusBaseFunds;
023    import org.kuali.kfs.module.ld.businessobject.EmployeeFunding;
024    import org.kuali.kfs.module.ld.businessobject.July1PositionFunding;
025    import org.kuali.kfs.module.ld.businessobject.LaborCalculatedSalaryFoundationTracker;
026    import org.kuali.kfs.module.ld.dataaccess.LaborCalculatedSalaryFoundationTrackerDao;
027    import org.kuali.kfs.module.ld.service.LaborCalculatedSalaryFoundationTrackerService;
028    import org.kuali.kfs.sys.ObjectUtil;
029    import org.kuali.rice.kns.service.LookupService;
030    import org.springframework.transaction.annotation.Transactional;
031    
032    /**
033     * This class provides its clients with access to CSF tracker entries in the backend data store.
034     * 
035     * @see org.kuali.kfs.module.ld.businessobject.LaborCalculatedSalaryFoundationTracker
036     */
037    @Transactional
038    public class LaborCalculatedSalaryFoundationTrackerServiceImpl implements LaborCalculatedSalaryFoundationTrackerService {
039        private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(LaborCalculatedSalaryFoundationTrackerServiceImpl.class);
040    
041        private LaborCalculatedSalaryFoundationTrackerDao laborCalculatedSalaryFoundationTrackerDao;
042        private LookupService lookupService;
043    
044        /**
045         * @see org.kuali.kfs.module.ld.service.LaborBaseFundsService#findCSFTracker(java.util.Map, boolean)
046         */
047        public List<LaborCalculatedSalaryFoundationTracker> findCSFTracker(Map fieldValues, boolean isConsolidated) {
048            LOG.info("start findCSFTracker()");
049            return laborCalculatedSalaryFoundationTrackerDao.findCSFTrackers(fieldValues, isConsolidated);
050        }
051    
052        /**
053         * @see org.kuali.kfs.module.ld.service.LaborCalculatedSalaryFoundationTrackerService#findCSFTrackerWithJuly1(java.util.Map,
054         *      boolean)
055         */
056        public List<LaborCalculatedSalaryFoundationTracker> findCSFTrackerWithJuly1(Map fieldValues, boolean isConsolidated) {
057            LOG.info("start findCSFTrackerWithJuly1()");
058    
059            List<LaborCalculatedSalaryFoundationTracker> CSFTrackerCollection = this.findCSFTracker(fieldValues, isConsolidated);
060            Collection<July1PositionFunding> july1PositionFundings = lookupService.findCollectionBySearch(July1PositionFunding.class, fieldValues);
061            for (July1PositionFunding july1PositionFunding : july1PositionFundings) {
062                LaborCalculatedSalaryFoundationTracker CSFTracker = this.findCSFTracker(CSFTrackerCollection, july1PositionFunding);
063    
064                if (CSFTracker != null) {
065                    CSFTracker.setJuly1BudgetAmount(CSFTracker.getJuly1BudgetAmount().add(july1PositionFunding.getJuly1BudgetAmount()));
066                    CSFTracker.setJuly1BudgetFteQuantity(CSFTracker.getJuly1BudgetFteQuantity().add(july1PositionFunding.getJuly1BudgetFteQuantity()));
067                    CSFTracker.setJuly1BudgetTimePercent(CSFTracker.getJuly1BudgetTimePercent().add(july1PositionFunding.getJuly1BudgetTimePercent()));
068                }
069                else {
070                    CSFTracker = new LaborCalculatedSalaryFoundationTracker();
071                    ObjectUtil.buildObject(CSFTracker, july1PositionFunding);
072                    CSFTrackerCollection.add(CSFTracker);
073                }
074            }
075            return CSFTrackerCollection;
076        }
077    
078        /**
079         * Check if there is a CSF track in the given set that matches the given object
080         * 
081         * @param csfTrackerCollection the given set of CSF trackers
082         * @param anotherObject the object to be searched
083         * @return the CSF tracker if there is a CSF track in the given set that matches the given object
084         */
085        protected LaborCalculatedSalaryFoundationTracker findCSFTracker(List<LaborCalculatedSalaryFoundationTracker> CSFTrackerCollection, Object anotherObject) {
086            for (LaborCalculatedSalaryFoundationTracker CSFTracker : CSFTrackerCollection) {
087                boolean found = ObjectUtil.equals(CSFTracker, anotherObject, CSFTracker.getKeyFieldList());
088                if (found) {
089                    return CSFTracker;
090                }
091            }
092            return null;
093        }
094    
095        /**
096         * @see org.kuali.kfs.module.ld.service.LaborBaseFundsService#findCSFTrackersAsAccountStatusBaseFunds(java.util.Map, boolean)
097         */
098        public List<AccountStatusBaseFunds> findCSFTrackersAsAccountStatusBaseFunds(Map fieldValues, boolean isConsolidated) {
099            LOG.info("start findCSFTrackersAsAccountStatusBaseFunds()");
100            return laborCalculatedSalaryFoundationTrackerDao.findCSFTrackersAsAccountStatusBaseFunds(fieldValues, isConsolidated);
101        }
102    
103        /**
104         * @see org.kuali.kfs.module.ld.service.LaborCalculatedSalaryFoundationTrackerService#findCSFTrackersAsEmployeeFunding(java.util.Map,
105         *      boolean)
106         */
107        public List<EmployeeFunding> findCSFTrackersAsEmployeeFunding(Map fieldValues, boolean isConsolidated) {
108            LOG.info("start findCSFTrackersAsEmployeeFunding()");
109            return laborCalculatedSalaryFoundationTrackerDao.findCSFTrackersAsEmployeeFunding(fieldValues, isConsolidated);
110        }
111    
112        /**
113         * Sets the laborCalculatedSalaryFoundationTrackerDao attribute value.
114         * 
115         * @param laborCalculatedSalaryFoundationTrackerDao The laborCalculatedSalaryFoundationTrackerDao to set.
116         */
117        public void setLaborCalculatedSalaryFoundationTrackerDao(LaborCalculatedSalaryFoundationTrackerDao laborCalculatedSalaryFoundationTrackerDao) {
118            this.laborCalculatedSalaryFoundationTrackerDao = laborCalculatedSalaryFoundationTrackerDao;
119        }
120    
121        /**
122         * Sets the lookupService attribute value.
123         * 
124         * @param lookupService The lookupService to set.
125         */
126        public void setLookupService(LookupService lookupService) {
127            this.lookupService = lookupService;
128        }
129    }