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    }