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.service.impl;
017    
018    import java.util.ArrayList;
019    import java.util.Collection;
020    import java.util.HashMap;
021    import java.util.List;
022    import java.util.Map;
023    
024    import org.kuali.kfs.module.bc.BCConstants;
025    import org.kuali.kfs.module.bc.BCKeyConstants;
026    import org.kuali.kfs.module.bc.businessobject.BudgetConstructionOrgSynchronizationProblemsReport;
027    import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPosition;
028    import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPositionFunding;
029    import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding;
030    import org.kuali.kfs.module.bc.document.dataaccess.BudgetConstructionSynchronizationProblemsReportDao;
031    import org.kuali.kfs.module.bc.document.service.BudgetConstructionOrganizationReportsService;
032    import org.kuali.kfs.module.bc.document.service.BudgetConstructionSynchronizationProblemsReportService;
033    import org.kuali.kfs.sys.KFSPropertyConstants;
034    import org.kuali.rice.kns.service.BusinessObjectService;
035    import org.kuali.rice.kns.service.KualiConfigurationService;
036    import org.springframework.transaction.annotation.Transactional;
037    
038    /**
039     * Service implementation of BudgetConstructionAccountSummaryReportService.
040     */
041    @Transactional
042    public class BudgetConstructionSynchronizationProblemsReportServiceImpl implements BudgetConstructionSynchronizationProblemsReportService {
043    
044        BudgetConstructionSynchronizationProblemsReportDao budgetConstructionSynchronizationProblemsReportDao;
045        BudgetConstructionOrganizationReportsService budgetConstructionOrganizationReportsService;
046        KualiConfigurationService kualiConfigurationService;
047        BusinessObjectService businessObjectService;
048    
049    
050        public void updateSynchronizationProblemsReport(String principalName) {
051            budgetConstructionSynchronizationProblemsReportDao.updateReportsSynchronizationProblemsTable(principalName);
052    
053        }
054    
055        public Collection<BudgetConstructionOrgSynchronizationProblemsReport> buildReports(Integer universityFiscalYear, String principalName) {
056            Collection<BudgetConstructionOrgSynchronizationProblemsReport> reportSet = new ArrayList();
057    
058    
059            BudgetConstructionOrgSynchronizationProblemsReport orgSynchronizationProblemsReportEntry;
060            // build searchCriteria
061            Map searchCriteria = new HashMap();
062            searchCriteria.put(KFSPropertyConstants.KUALI_USER_PERSON_UNIVERSAL_IDENTIFIER, principalName);
063    
064            // build order list
065            List<String> orderList = buildOrderByList();
066            Collection<BudgetConstructionPositionFunding> synchronizationProblemsList = budgetConstructionOrganizationReportsService.getBySearchCriteriaOrderByList(BudgetConstructionPositionFunding.class, searchCriteria, orderList);
067            Map positionMap = new HashMap();
068            for (BudgetConstructionPositionFunding positionFundingEntry : synchronizationProblemsList) {
069                BudgetConstructionPosition budgetConstructionPosition = getBudgetConstructionPosition(universityFiscalYear, positionFundingEntry.getPendingAppointmentFunding());
070                positionMap.put(positionFundingEntry, budgetConstructionPosition);
071            }
072    
073            for (BudgetConstructionPositionFunding positionFundingEntry : synchronizationProblemsList) {
074                orgSynchronizationProblemsReportEntry = new BudgetConstructionOrgSynchronizationProblemsReport();
075                buildReportsHeader(universityFiscalYear, orgSynchronizationProblemsReportEntry, positionFundingEntry);
076                buildReportsBody(orgSynchronizationProblemsReportEntry, positionFundingEntry, positionMap);
077                reportSet.add(orgSynchronizationProblemsReportEntry);
078            }
079    
080            return reportSet;
081        }
082    
083    
084        public void buildReportsHeader(Integer universityFiscalYear, BudgetConstructionOrgSynchronizationProblemsReport orgSynchronizationProblemsReportEntry, BudgetConstructionPositionFunding positionFunding) {
085    
086            String chartDesc = positionFunding.getSelectedOrganizationChartOfAccounts().getFinChartOfAccountDescription();
087            String orgName = positionFunding.getSelectedOrganization().getOrganizationName();
088    
089            Integer prevFiscalyear = universityFiscalYear - 1;
090            orgSynchronizationProblemsReportEntry.setChartOfAccountsCode(positionFunding.getSelectedOrganizationChartOfAccountsCode());
091            orgSynchronizationProblemsReportEntry.setOrganizationCode(positionFunding.getSelectedOrganizationCode());
092            if (chartDesc == null) {
093                orgSynchronizationProblemsReportEntry.setChartOfAccountDescription(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_CHART_DESCRIPTION));
094            }
095            else {
096                orgSynchronizationProblemsReportEntry.setChartOfAccountDescription(chartDesc);
097            }
098            if (orgName == null) {
099                orgSynchronizationProblemsReportEntry.setOrganizationName(kualiConfigurationService.getPropertyString(BCKeyConstants.ERROR_REPORT_GETTING_ORGANIZATION_NAME));
100            }
101            else {
102                orgSynchronizationProblemsReportEntry.setOrganizationName(orgName);
103            }
104            orgSynchronizationProblemsReportEntry.setFiscalYear(prevFiscalyear.toString() + "-" + universityFiscalYear.toString().substring(2, 4));
105        }
106        
107        
108        public void buildReportsBody(BudgetConstructionOrgSynchronizationProblemsReport orgSynchronizationProblemsReportEntry, BudgetConstructionPositionFunding positionFunding, Map positionMap) {
109            
110            orgSynchronizationProblemsReportEntry.setBodyChartOfAccountsCode(positionFunding.getChartOfAccountsCode());
111            orgSynchronizationProblemsReportEntry.setAccountNumber(positionFunding.getAccountNumber());
112            orgSynchronizationProblemsReportEntry.setSubAccountNumber(positionFunding.getSubAccountNumber());
113            orgSynchronizationProblemsReportEntry.setFinancialObjectCode(positionFunding.getFinancialObjectCode());
114            orgSynchronizationProblemsReportEntry.setFinancialSubObjectCode(positionFunding.getFinancialSubObjectCode());
115            orgSynchronizationProblemsReportEntry.setPositionNumber(positionFunding.getPositionNumber());
116            orgSynchronizationProblemsReportEntry.setEmplid(positionFunding.getEmplid());
117            orgSynchronizationProblemsReportEntry.setName(positionFunding.getName());
118            
119            orgSynchronizationProblemsReportEntry.setPositionObjectChangeIndicator(booleanToString(positionFunding.getPendingAppointmentFunding().isPositionObjectChangeIndicator()));
120            orgSynchronizationProblemsReportEntry.setPositionSalaryChangeIndicator(booleanToString(positionFunding.getPendingAppointmentFunding().isPositionSalaryChangeIndicator()));
121            
122            BudgetConstructionPosition budgetConstructionPosition = (BudgetConstructionPosition) positionMap.get(positionFunding);
123            orgSynchronizationProblemsReportEntry.setPositionEffectiveStatus(budgetConstructionPosition.getPositionEffectiveStatus());
124            orgSynchronizationProblemsReportEntry.setBudgetedPosition(booleanToString(budgetConstructionPosition.isBudgetedPosition()));
125        }
126        
127        protected String booleanToString(boolean boo){
128            if (boo){
129                return BCConstants.Report.YES;
130            } else { return BCConstants.Report.NO; }
131            
132        }
133        
134        
135        
136        
137        
138        
139        
140        
141        
142        
143    
144    
145        protected BudgetConstructionPosition getBudgetConstructionPosition(Integer universityFiscalYear, PendingBudgetConstructionAppointmentFunding appointmentFundingEntry) {
146            Map searchCriteria = new HashMap();
147            searchCriteria.put(KFSPropertyConstants.POSITION_NUMBER, appointmentFundingEntry.getPositionNumber());
148            searchCriteria.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, universityFiscalYear);
149            return (BudgetConstructionPosition) businessObjectService.findByPrimaryKey(BudgetConstructionPosition.class, searchCriteria);
150        }
151    
152    
153        /**
154         * builds orderByList for sort order.
155         * 
156         * @return returnList
157         */
158        public List<String> buildOrderByList() {
159            List<String> returnList = new ArrayList();
160            returnList.add(KFSPropertyConstants.PERSON_UNIVERSAL_IDENTIFIER);
161            returnList.add(KFSPropertyConstants.SELECTED_ORGANIZATION_CHART_OF_ACCOUNTS_CODE);
162            returnList.add(KFSPropertyConstants.SELECTED_ORGANIZATION_CODE);
163            returnList.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
164            returnList.add(KFSPropertyConstants.ACCOUNT_NUMBER);
165            returnList.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER);
166            returnList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE);
167            returnList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE);
168            returnList.add(KFSPropertyConstants.PERSON_NAME);
169            returnList.add(KFSPropertyConstants.POSITION_NUMBER);
170            return returnList;
171        }
172    
173    
174        public void setBudgetConstructionSynchronizationProblemsReportDao(BudgetConstructionSynchronizationProblemsReportDao budgetConstructionSynchronizationProblemsReportDao) {
175            this.budgetConstructionSynchronizationProblemsReportDao = budgetConstructionSynchronizationProblemsReportDao;
176        }
177    
178        public void setBudgetConstructionOrganizationReportsService(BudgetConstructionOrganizationReportsService budgetConstructionOrganizationReportsService) {
179            this.budgetConstructionOrganizationReportsService = budgetConstructionOrganizationReportsService;
180        }
181    
182    
183        public void setBusinessObjectService(BusinessObjectService businessObjectService) {
184            this.businessObjectService = businessObjectService;
185        }
186    
187        public void setKualiConfigurationService(KualiConfigurationService kualiConfigurationService) {
188            this.kualiConfigurationService = kualiConfigurationService;
189        }
190    
191    }
192