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.io.ByteArrayOutputStream; 019 import java.util.ArrayList; 020 import java.util.Collection; 021 import java.util.HashMap; 022 import java.util.List; 023 import java.util.Map; 024 025 import org.apache.commons.lang.StringUtils; 026 import org.kuali.kfs.coa.businessobject.ObjectCode; 027 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAdministrativePost; 028 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionIntendedIncumbent; 029 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionObjectDump; 030 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionObjectPick; 031 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPosition; 032 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionReasonCodePick; 033 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionSalaryFunding; 034 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionSalarySocialSecurityNumber; 035 import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding; 036 import org.kuali.kfs.module.bc.document.service.BudgetConstructionOrganizationReportsService; 037 import org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper; 038 import org.kuali.kfs.sys.KFSPropertyConstants; 039 import org.kuali.kfs.sys.service.NonTransactional; 040 import org.kuali.rice.kns.service.BusinessObjectService; 041 import org.springframework.transaction.annotation.Transactional; 042 043 import com.lowagie.text.Document; 044 import com.lowagie.text.DocumentException; 045 import com.lowagie.text.Paragraph; 046 import com.lowagie.text.pdf.PdfWriter; 047 048 /** 049 * This implements the methods described in BudgetConstructionReportsServiceHelper 050 */ 051 public class BudgetConstructionReportsServiceHelperImpl implements BudgetConstructionReportsServiceHelper { 052 053 BudgetConstructionOrganizationReportsService budgetConstructionOrganizationReportsService; 054 BusinessObjectService businessObjectService; 055 056 /** 057 * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper#getDataForBuildingReports(java.lang.Class, 058 * java.lang.String, java.util.List) 059 */ 060 @Transactional 061 public Collection getDataForBuildingReports(Class clazz, String principalName, List<String> orderList) { 062 063 // build searchCriteria 064 Map searchCriteria = new HashMap(); 065 searchCriteria.put(KFSPropertyConstants.KUALI_USER_PERSON_UNIVERSAL_IDENTIFIER, principalName); 066 067 // build order list 068 return budgetConstructionOrganizationReportsService.getBySearchCriteriaOrderByList(clazz, searchCriteria, orderList); 069 } 070 071 /** 072 * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper#getDataForBuildingReports(java.lang.Class, 073 * java.util.Map, java.util.List) 074 */ 075 @Transactional 076 public Collection getDataForBuildingReports(Class clazz, Map searchCriteria, List<String> orderList) { 077 078 return budgetConstructionOrganizationReportsService.getBySearchCriteriaOrderByList(clazz, searchCriteria, orderList); 079 } 080 081 /** 082 * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper#generatePdf(java.util.List, 083 * java.io.ByteArrayOutputStream) 084 */ 085 @NonTransactional 086 public void generatePdf(List<String> errorMessages, ByteArrayOutputStream baos) throws DocumentException { 087 Document document = new Document(); 088 PdfWriter.getInstance(document, baos); 089 document.open(); 090 091 for (String error : errorMessages) { 092 document.add(new Paragraph(error)); 093 } 094 095 document.close(); 096 } 097 098 /** 099 * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper#getObjectCode(java.lang.Integer, 100 * java.lang.String, java.lang.String) 101 */ 102 @Transactional 103 public ObjectCode getObjectCode(Integer universityFiscalYear, String chartOfAccountsCode, String financialObjectCode) { 104 105 Map searchCriteria = new HashMap(); 106 searchCriteria.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, universityFiscalYear); 107 searchCriteria.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, chartOfAccountsCode); 108 searchCriteria.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, financialObjectCode); 109 return (ObjectCode) businessObjectService.findByPrimaryKey(ObjectCode.class, searchCriteria); 110 } 111 112 /** 113 * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper#getSelectedObjectCodes(java.lang.String) 114 */ 115 @Transactional 116 public String getSelectedObjectCodes(String principalName) { 117 Map searchCriteria = new HashMap(); 118 searchCriteria.put(KFSPropertyConstants.PERSON_UNIVERSAL_IDENTIFIER, principalName); 119 searchCriteria.put(KFSPropertyConstants.SELECT_FLAG, 1); 120 Collection<BudgetConstructionObjectPick> objectPickList = businessObjectService.findMatching(BudgetConstructionObjectPick.class, searchCriteria); 121 String objectCodes = StringUtils.EMPTY; 122 int count = 0; 123 for (BudgetConstructionObjectPick objectPick : objectPickList) { 124 count += 1; 125 objectCodes += objectPick.getFinancialObjectCode(); 126 if (count < objectPickList.size()) { 127 objectCodes += ", "; 128 } 129 } 130 return objectCodes; 131 } 132 133 /** 134 * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper#getSelectedReasonCodes(java.lang.String) 135 */ 136 @Transactional 137 public String getSelectedReasonCodes(String principalName) { 138 Map searchCriteria = new HashMap(); 139 searchCriteria.put(KFSPropertyConstants.PERSON_UNIVERSAL_IDENTIFIER, principalName); 140 searchCriteria.put(KFSPropertyConstants.SELECT_FLAG, 1); 141 Collection<BudgetConstructionReasonCodePick> reasonCodePickList = businessObjectService.findMatching(BudgetConstructionReasonCodePick.class, searchCriteria); 142 String reasonCodes = StringUtils.EMPTY; 143 int count = 0; 144 for (BudgetConstructionReasonCodePick reasonPick : reasonCodePickList) { 145 count += 1; 146 reasonCodes += reasonPick.getAppointmentFundingReasonCode(); 147 if (count < reasonCodePickList.size()) { 148 reasonCodes += ", "; 149 } 150 } 151 return reasonCodes; 152 } 153 154 /** 155 * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper#getBudgetConstructionAdministrativePost(org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding) 156 */ 157 @Transactional 158 public BudgetConstructionAdministrativePost getBudgetConstructionAdministrativePost(PendingBudgetConstructionAppointmentFunding appointmentFundingEntry) { 159 Map searchCriteria = new HashMap(); 160 searchCriteria.put(KFSPropertyConstants.EMPLID, appointmentFundingEntry.getEmplid()); 161 searchCriteria.put(KFSPropertyConstants.POSITION_NUMBER, appointmentFundingEntry.getPositionNumber()); 162 return (BudgetConstructionAdministrativePost) businessObjectService.findByPrimaryKey(BudgetConstructionAdministrativePost.class, searchCriteria); 163 } 164 165 /** 166 * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper#getBudgetConstructionPosition(java.lang.Integer, 167 * org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding) 168 */ 169 @Transactional 170 public BudgetConstructionPosition getBudgetConstructionPosition(Integer universityFiscalYear, PendingBudgetConstructionAppointmentFunding appointmentFundingEntry) { 171 Map searchCriteria = new HashMap(); 172 searchCriteria.put(KFSPropertyConstants.POSITION_NUMBER, appointmentFundingEntry.getPositionNumber()); 173 searchCriteria.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, universityFiscalYear); 174 return (BudgetConstructionPosition) businessObjectService.findByPrimaryKey(BudgetConstructionPosition.class, searchCriteria); 175 } 176 177 /** 178 * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper#getBudgetConstructionIntendedIncumbent(org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding) 179 */ 180 @Transactional 181 public BudgetConstructionIntendedIncumbent getBudgetConstructionIntendedIncumbent(PendingBudgetConstructionAppointmentFunding appointmentFundingEntry) { 182 Map searchCriteria = new HashMap(); 183 searchCriteria.put(KFSPropertyConstants.EMPLID, appointmentFundingEntry.getEmplid()); 184 return (BudgetConstructionIntendedIncumbent) businessObjectService.findByPrimaryKey(BudgetConstructionIntendedIncumbent.class, searchCriteria); 185 } 186 187 /** 188 * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper#getBudgetConstructionSalarySocialSecurityNumber(java.lang.String, 189 * org.kuali.kfs.module.bc.businessobject.BudgetConstructionSalaryFunding) 190 */ 191 @Transactional 192 public BudgetConstructionSalarySocialSecurityNumber getBudgetConstructionSalarySocialSecurityNumber(String principalName, BudgetConstructionSalaryFunding salaryFunding) { 193 194 Map searchCriteria = new HashMap(); 195 searchCriteria.put(KFSPropertyConstants.PERSON_UNIVERSAL_IDENTIFIER, principalName); 196 searchCriteria.put(KFSPropertyConstants.EMPLID, salaryFunding.getEmplid()); 197 198 List<String> orderList = new ArrayList(); 199 orderList.add(KFSPropertyConstants.ORGANIZATION_CHART_OF_ACCOUNTS_CODE); 200 orderList.add(KFSPropertyConstants.ORGANIZATION_CODE); 201 orderList.add(KFSPropertyConstants.PERSON_NAME); 202 orderList.add(KFSPropertyConstants.EMPLID); 203 204 return (BudgetConstructionSalarySocialSecurityNumber) businessObjectService.findByPrimaryKey(BudgetConstructionSalarySocialSecurityNumber.class, searchCriteria); 205 } 206 207 /** 208 * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper#getSalaryFunding(java.lang.String, 209 * java.lang.String) 210 */ 211 @Transactional 212 public Collection<BudgetConstructionSalaryFunding> getSalaryFunding(String principalName, String emplid) { 213 Map searchCriteria = new HashMap(); 214 searchCriteria.put(KFSPropertyConstants.PERSON_UNIVERSAL_IDENTIFIER, principalName); 215 searchCriteria.put(KFSPropertyConstants.EMPLID, emplid); 216 217 List<String> orderList = new ArrayList(); 218 orderList.add(KFSPropertyConstants.POSITION_NUMBER); 219 orderList.add(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR); 220 orderList.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE); 221 orderList.add(KFSPropertyConstants.ACCOUNT_NUMBER); 222 orderList.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER); 223 orderList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE); 224 orderList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE); 225 226 return budgetConstructionOrganizationReportsService.getBySearchCriteriaOrderByList(BudgetConstructionSalaryFunding.class, searchCriteria, orderList); 227 } 228 229 /** 230 * @see org.kuali.kfs.module.bc.document.service.BudgetConstructionReportsServiceHelper#getPendingBudgetConstructionAppointmentFundingList(java.lang.Integer, 231 * org.kuali.kfs.module.bc.businessobject.BudgetConstructionObjectDump) 232 */ 233 @Transactional 234 public Collection<PendingBudgetConstructionAppointmentFunding> getPendingBudgetConstructionAppointmentFundingList(Integer universityFiscalYear, BudgetConstructionObjectDump budgetConstructionObjectDump) { 235 Map searchCriteria = new HashMap(); 236 searchCriteria.put(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, universityFiscalYear); 237 searchCriteria.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, budgetConstructionObjectDump.getChartOfAccountsCode()); 238 searchCriteria.put(KFSPropertyConstants.ACCOUNT_NUMBER, budgetConstructionObjectDump.getAccountNumber()); 239 searchCriteria.put(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, budgetConstructionObjectDump.getSubAccountNumber()); 240 searchCriteria.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, budgetConstructionObjectDump.getFinancialObjectCode()); 241 242 List<String> orderList = new ArrayList(); 243 orderList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE); 244 orderList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE); 245 orderList.add(KFSPropertyConstants.POSITION_NUMBER); 246 orderList.add(KFSPropertyConstants.EMPLID); 247 return budgetConstructionOrganizationReportsService.getBySearchCriteriaOrderByList(PendingBudgetConstructionAppointmentFunding.class, searchCriteria, orderList); 248 } 249 250 /** 251 * sets the budgetConstructionOrganizationReportsService attribute value 252 * 253 * @param budgetConstructionOrganizationReportsService 254 */ 255 @NonTransactional 256 public void setBudgetConstructionOrganizationReportsService(BudgetConstructionOrganizationReportsService budgetConstructionOrganizationReportsService) { 257 this.budgetConstructionOrganizationReportsService = budgetConstructionOrganizationReportsService; 258 } 259 260 /** 261 * sets the businessObjectService attribute value 262 * 263 * @param businessObjectService 264 */ 265 @NonTransactional 266 public void setBusinessObjectService(BusinessObjectService businessObjectService) { 267 this.businessObjectService = businessObjectService; 268 } 269 }