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