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