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 }