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.purap.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.apache.commons.logging.Log;
027    import org.apache.commons.logging.LogFactory;
028    import org.kuali.kfs.module.purap.PurapConstants;
029    import org.kuali.kfs.module.purap.businessobject.PurchaseOrderContractLanguage;
030    import org.kuali.kfs.module.purap.businessobject.PurchaseOrderItem;
031    import org.kuali.kfs.module.purap.businessobject.PurchaseOrderVendorQuote;
032    import org.kuali.kfs.module.purap.dataaccess.ImageDao;
033    import org.kuali.kfs.module.purap.document.BulkReceivingDocument;
034    import org.kuali.kfs.module.purap.document.PurchaseOrderDocument;
035    import org.kuali.kfs.module.purap.document.service.PrintService;
036    import org.kuali.kfs.module.purap.exception.PurError;
037    import org.kuali.kfs.module.purap.exception.PurapConfigurationException;
038    import org.kuali.kfs.module.purap.pdf.BulkReceivingPdf;
039    import org.kuali.kfs.module.purap.pdf.PurchaseOrderParameters;
040    import org.kuali.kfs.module.purap.pdf.PurchaseOrderPdf;
041    import org.kuali.kfs.module.purap.pdf.PurchaseOrderTransmitParameters;
042    import org.kuali.kfs.module.purap.pdf.PurchaseOrderQuotePdf;
043    import org.kuali.kfs.module.purap.pdf.PurchaseOrderQuoteRequestsPdf;
044    import org.kuali.kfs.sys.KFSConstants;
045    import org.kuali.kfs.sys.KFSPropertyConstants;
046    import org.kuali.kfs.sys.context.SpringContext;
047    import org.kuali.kfs.sys.service.impl.KfsParameterConstants;
048    import org.kuali.kfs.vnd.businessobject.CampusParameter;
049    import org.kuali.kfs.vnd.businessobject.ContractManager;
050    import org.kuali.rice.kim.bo.Person;
051    import org.kuali.rice.kim.service.PersonService;
052    import org.kuali.rice.kns.service.BusinessObjectService;
053    import org.kuali.rice.kns.service.KualiConfigurationService;
054    import org.kuali.rice.kns.service.ParameterService;
055    import org.springframework.transaction.annotation.Transactional;
056    
057    @Transactional
058    public class PrintServiceImpl implements PrintService {
059        private static Log LOG = LogFactory.getLog(PrintServiceImpl.class);
060        protected static final boolean TRANSMISSION_IS_RETRANSMIT = true;
061        protected static final boolean TRANSMISSION_IS_NOT_RETRANSMIT = !TRANSMISSION_IS_RETRANSMIT;
062    
063        private ImageDao imageDao;
064        private ParameterService parameterService;
065        private BusinessObjectService businessObjectService;
066        private KualiConfigurationService kualiConfigurationService;
067        private PurchaseOrderParameters purchaseOrderParameters;
068        
069        
070       
071    
072        /**
073         * @see org.kuali.kfs.module.purap.document.service.PrintService#generatePurchaseOrderQuoteRequestsListPdf(org.kuali.kfs.module.purap.document.PurchaseOrderDocument, java.io.ByteArrayOutputStream)
074         */
075        public Collection generatePurchaseOrderQuoteRequestsListPdf(PurchaseOrderDocument po, ByteArrayOutputStream byteArrayOutputStream) {
076            LOG.debug("generatePurchaseOrderQuoteRequestsListPdf() started");
077            Collection errors = new ArrayList();
078    
079            PurchaseOrderQuoteRequestsPdf poQuoteRequestsPdf = new PurchaseOrderQuoteRequestsPdf();
080    
081            try {
082                PurchaseOrderTransmitParameters pdfParameters = getPurchaseOrderQuoteRequestsListPdfParameters(po);
083                String deliveryCampusName = pdfParameters.getCampusParameter().getCampus().getCampusName();
084                poQuoteRequestsPdf.generatePOQuoteRequestsListPdf(po, byteArrayOutputStream, pdfParameters.getCampusParameter().getPurchasingInstitutionName());
085    
086            }
087            catch (PurError pe) {
088                LOG.error("Caught exception ", pe);
089                errors.add(pe.getMessage());
090            }
091            catch (PurapConfigurationException pce) {
092                LOG.error("Caught exception ", pce);
093                errors.add(pce.getMessage());
094            }
095            catch (Exception e) {
096                LOG.error("Caught exception ", e);
097                errors.add(e.getMessage());
098            }
099    
100            LOG.debug("generatePurchaseOrderQuoteRequestsListPdf() ended");
101            return errors;
102        }
103    
104        /**
105         * @see org.kuali.kfs.module.purap.document.service.PrintService#savePurchaseOrderQuoteRequestsListPdf(org.kuali.kfs.module.purap.document.PurchaseOrderDocument)
106         */
107        public Collection savePurchaseOrderQuoteRequestsListPdf(PurchaseOrderDocument po) {
108            return null;
109        }
110    
111        /**
112         * Returns the PurchaseOrderPdfParameters given the PurchaseOrderDocument.
113         * 
114         * @param po  The PurchaseOrderDocument object to be used to obtain the PurchaseOrderPdfParameters.
115         * @return    The PurchaseOrderPdfParameters given the PurchaseOrderDocument.
116         */
117        /*protected PurchaseOrderPdfFaxParameters getPurchaseOrderQuotePdfParameters(PurchaseOrderDocument po) {
118            String key = po.getPurapDocumentIdentifier().toString(); // key can be any string; chose to use the PO number.
119            String campusCode = po.getDeliveryCampusCode().toLowerCase();
120            String imageTempLocation = "";
121            String logoImage = "";
122            boolean useImage = true;
123            if (parameterService.parameterExists(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR)) {
124                useImage = parameterService.getIndicatorParameter(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR);
125            }
126            // We'll get the imageTempLocation and the actual images only if the useImage is true. If useImage is false, we'll leave the
127            // images as blank space
128            if (useImage) {
129                imageTempLocation = kualiConfigurationService.getPropertyString(KFSConstants.TEMP_DIRECTORY_KEY) + "/";
130    
131                if (imageTempLocation == null) {
132                    LOG.debug("generatePurchaseOrderQuotePdf() ended");
133                    throw new PurapConfigurationException("Application Setting IMAGE_TEMP_PATH is missing");
134                }
135                // Get logo image.
136                logoImage = imageDao.getLogo(key, campusCode, imageTempLocation);
137            }
138            Map<String, Object> criteria = new HashMap<String, Object>();
139            criteria.put(KFSPropertyConstants.CAMPUS_CODE, po.getDeliveryCampusCode());
140            CampusParameter campusParameter = (CampusParameter) ((List) businessObjectService.findMatching(CampusParameter.class, criteria)).get(0);
141    
142            // Get the contract manager's campus
143            ContractManager contractManager = po.getContractManager();
144            String contractManagerCampusCode = "N/A";
145            if (contractManager != null && contractManager.getContractManagerUserIdentifier() != null) {
146                Person contractManagerUser = SpringContext.getBean(PersonService.class).getPerson(contractManager.getContractManagerUserIdentifier());
147                contractManagerCampusCode = contractManagerUser.getCampusCode();
148            }
149    
150            String pdfFileLocation = parameterService.getParameterValue(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_DIRECTORY);
151            if (pdfFileLocation == null) {
152                LOG.debug("savePurchaseOrderPdf() ended");
153                throw new PurapConfigurationException("Application Setting PDF_DIRECTORY is missing.");
154            }
155    
156            PurchaseOrderPdfFaxParameters pdfParameters = new PurchaseOrderPdfFaxParameters();
157            pdfParameters.setImageTempLocation(imageTempLocation);
158            pdfParameters.setKey(key);
159            pdfParameters.setLogoImage(logoImage);
160            pdfParameters.setCampusParameter(campusParameter);
161            pdfParameters.setContractManagerCampusCode(contractManagerCampusCode);
162            pdfParameters.setPdfFileLocation(pdfFileLocation);
163            pdfParameters.setUseImage(useImage);
164            return pdfParameters;
165        }*/
166    
167        /**
168         * Returns the PurchaseOrderPdfParameters given the PurchaseOrderDocument.
169         * 
170         * @param po  The PurchaseOrderDocument object to be used to obtain the PurchaseOrderPdfParameters.
171         * @return    The PurchaseOrderPdfParameters given the PurchaseOrderDocument.
172         */
173        protected PurchaseOrderTransmitParameters getPurchaseOrderQuoteRequestsListPdfParameters(PurchaseOrderDocument po) {
174            PurchaseOrderParameters purchaseOrderParameters = getPurchaseOrderParameters();
175            purchaseOrderParameters.setPurchaseOrderPdfParameters(po);
176            return (PurchaseOrderTransmitParameters)purchaseOrderParameters;
177            /*String key = po.getPurapDocumentIdentifier().toString(); // key can be any string; chose to use the PO number.
178            String campusCode = po.getDeliveryCampusCode().toLowerCase();
179            String imageTempLocation = "";
180            String logoImage = "";
181            boolean useImage = true;
182            if (parameterService.parameterExists(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR)) {
183                useImage = parameterService.getIndicatorParameter(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR);
184            }
185            // We'll get the imageTempLocation and the actual images only if the useImage is true. If useImage is false, we'll leave the
186            // images as blank space
187            if (useImage) {
188                imageTempLocation = kualiConfigurationService.getPropertyString(KFSConstants.TEMP_DIRECTORY_KEY) + "/";
189    
190                if (imageTempLocation == null) {
191                    LOG.debug("generatePurchaseOrderQuotePdf() ended");
192                    throw new PurapConfigurationException("Application Setting IMAGE_TEMP_PATH is missing");
193                }
194                // Get logo image.
195                logoImage = imageDao.getLogo(key, campusCode, imageTempLocation);
196            }
197            Map<String, Object> criteria = new HashMap<String, Object>();
198            criteria.put(KFSPropertyConstants.CAMPUS_CODE, po.getDeliveryCampusCode());
199            CampusParameter campusParameter = (CampusParameter) ((List) businessObjectService.findMatching(CampusParameter.class, criteria)).get(0);
200    
201            // Get the contract manager's campus
202            ContractManager contractManager = po.getContractManager();
203            String contractManagerCampusCode = "";
204            if (contractManager.getContractManagerUserIdentifier() != null) {            
205                Person contractManagerUser = SpringContext.getBean(PersonService.class).getPerson(contractManager.getContractManagerUserIdentifier());
206                contractManagerCampusCode = contractManagerUser.getCampusCode();
207            }
208    
209            String pdfFileLocation = parameterService.getParameterValue(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_DIRECTORY);
210            if (pdfFileLocation == null) {
211                LOG.debug("savePurchaseOrderPdf() ended");
212                throw new PurapConfigurationException("Application Setting PDF_DIRECTORY is missing.");
213            }
214    
215            PurchaseOrderPdfFaxParameters pdfParameters = new PurchaseOrderPdfFaxParameters();
216            pdfParameters.setImageTempLocation(imageTempLocation);
217            pdfParameters.setKey(key);
218            pdfParameters.setLogoImage(logoImage);
219            pdfParameters.setCampusParameter(campusParameter);
220            pdfParameters.setContractManagerCampusCode(contractManagerCampusCode);
221            pdfParameters.setPdfFileLocation(pdfFileLocation);
222            pdfParameters.setUseImage(useImage);
223            return pdfParameters;*/
224        }
225    
226        /**
227         * @see org.kuali.kfs.module.purap.document.service.PrintService#generatePurchaseOrderQuotePdf(org.kuali.kfs.module.purap.document.PurchaseOrderDocument, org.kuali.kfs.module.purap.businessobject.PurchaseOrderVendorQuote, java.io.ByteArrayOutputStream, java.lang.String)
228         */
229        public Collection generatePurchaseOrderQuotePdf(PurchaseOrderDocument po, PurchaseOrderVendorQuote povq, ByteArrayOutputStream byteArrayOutputStream, String environment) {
230            LOG.debug("generatePurchaseOrderQuotePdf() started");
231    
232            PurchaseOrderQuotePdf poQuotePdf = new PurchaseOrderQuotePdf();
233            Collection errors = new ArrayList();
234    
235            try {
236                PurchaseOrderParameters purchaseOrderParameters = getPurchaseOrderParameters();
237                purchaseOrderParameters.setPurchaseOrderPdfParameters(po,povq);
238                PurchaseOrderTransmitParameters pdfParameters = (PurchaseOrderTransmitParameters)purchaseOrderParameters;
239                String deliveryCampusName = pdfParameters.getCampusParameter().getCampus().getCampusName();
240                poQuotePdf.generatePOQuotePDF(po, povq, deliveryCampusName, pdfParameters.getContractManagerCampusCode(), pdfParameters.getLogoImage(), byteArrayOutputStream, environment);
241            }
242            catch (PurError pe) {
243                LOG.error("Caught exception ", pe);
244                errors.add(pe.getMessage());
245            }
246            catch (PurapConfigurationException pce) {
247                LOG.error("Caught exception ", pce);
248                errors.add(pce.getMessage());
249            }
250            LOG.debug("generatePurchaseOrderQuotePdf() ended");
251            return errors;
252        }
253    
254        /**
255         * @see org.kuali.kfs.module.purap.document.service.PrintService#savePurchaseOrderQuotePdf(org.kuali.kfs.module.purap.document.PurchaseOrderDocument, org.kuali.kfs.module.purap.businessobject.PurchaseOrderVendorQuote, java.lang.String)
256         */
257        public Collection savePurchaseOrderQuotePdf(PurchaseOrderDocument po, PurchaseOrderVendorQuote povq, String environment) {
258            LOG.debug("savePurchaseOrderQuotePdf() started");
259    
260            String pdfQuoteFilename = "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_Quote_" + povq.getPurchaseOrderVendorQuoteIdentifier().toString() + "_" + System.currentTimeMillis() + ".pdf";
261            PurchaseOrderQuotePdf poQuotePdf = new PurchaseOrderQuotePdf();
262            Collection errors = new ArrayList();
263    
264            PurchaseOrderTransmitParameters pdfParameters = null;
265            try {
266                PurchaseOrderParameters purchaseOrderParameters = getPurchaseOrderParameters();
267                purchaseOrderParameters.setPurchaseOrderPdfParameters(po,povq);
268                pdfParameters = (PurchaseOrderTransmitParameters)purchaseOrderParameters;
269                String deliveryCampusName = pdfParameters.getCampusParameter().getCampus().getCampusName();
270                poQuotePdf.savePOQuotePDF(po, povq, pdfParameters, environment);
271            }
272            catch (PurError e) {
273                LOG.error("Caught exception ", e);
274                errors.add(e.getMessage());
275            }
276            catch (PurapConfigurationException pce) {
277                LOG.error("Caught exception ", pce);
278                errors.add(pce.getMessage());
279            }
280            finally {
281                try {
282                    poQuotePdf.deletePdf(pdfParameters.getPdfFileLocation(), pdfQuoteFilename);
283                }
284                catch (Throwable e) {
285                    LOG.error("savePurchaseOrderQuotePdf() Error deleting Quote PDF" + pdfQuoteFilename + " - Exception was " + e.getMessage(), e);
286                    errors.add(e.getMessage());
287                }
288            }
289    
290            LOG.debug("savePurchaseOrderQuotePdf() ended");
291            return errors;
292        }
293        
294        /**
295         * Returns the PurchaseOrderPdfParameters given the PurchaseOrderDocument.
296         * 
297         * @param po  The PurchaseOrderDocument object to be used to obtain the PurchaseOrderPdfParameters.
298         * @return    The PurchaseOrderPdfParameters given the PurchaseOrderDocument.
299         */
300       /* protected PurchaseOrderPdfFaxParameters getPurchaseOrderPdfParameters(PurchaseOrderDocument po) {
301            String key = po.getPurapDocumentIdentifier().toString(); // key can be any string; chose to use the PO number.
302            String campusCode = po.getDeliveryCampusCode().toLowerCase();
303            String imageTempLocation = "";
304            String logoImage = "";
305            String directorSignatureImage = "";
306            String contractManagerSignatureImage = "";
307            boolean useImage = true;
308            if (parameterService.parameterExists(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR)) {
309                useImage = parameterService.getIndicatorParameter(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR);
310            }
311            // We'll get the imageTempLocation and the actual images only if the useImage is true. If useImage is false, we'll leave the
312            // images as blank space
313            if (useImage) {
314                imageTempLocation = kualiConfigurationService.getPropertyString(KFSConstants.TEMP_DIRECTORY_KEY) + "/";
315    
316                if (imageTempLocation == null) {
317                    throw new PurapConfigurationException("IMAGE_TEMP_PATH is missing");
318                }
319    
320                // Get images
321                if ((logoImage = imageDao.getLogo(key, campusCode, imageTempLocation)) == null) {
322                    throw new PurapConfigurationException("logoImage is null.");
323                }
324                if ((directorSignatureImage = imageDao.getPurchasingDirectorImage(key, campusCode, imageTempLocation)) == null) {
325                    throw new PurapConfigurationException("directorSignatureImage is null.");
326                }
327                if ((contractManagerSignatureImage = imageDao.getContractManagerImage(key, po.getContractManagerCode(), imageTempLocation)) == null) {
328                    throw new PurapConfigurationException("contractManagerSignatureImage is null.");
329                }
330            }
331    
332            Map<String, Object> criteria = new HashMap<String, Object>();
333            criteria.put(KFSPropertyConstants.CAMPUS_CODE, po.getDeliveryCampusCode());
334            CampusParameter campusParameter = (CampusParameter) ((List) businessObjectService.findMatching(CampusParameter.class, criteria)).get(0);
335    
336            String statusInquiryUrl = parameterService.getParameterValue(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.STATUS_INQUIRY_URL);
337            if (statusInquiryUrl == null) {
338                LOG.debug("generatePurchaseOrderPdf() ended");
339                throw new PurapConfigurationException("Application Setting INVOICE_STATUS_INQUIRY_URL is missing.");
340            }
341    
342            StringBuffer contractLanguage = new StringBuffer();
343            criteria.put(KFSPropertyConstants.ACTIVE, true);
344            List<PurchaseOrderContractLanguage> contractLanguageList = (List<PurchaseOrderContractLanguage>) (businessObjectService.findMatching(PurchaseOrderContractLanguage.class, criteria));
345            if (!contractLanguageList.isEmpty()) {
346                int lineNumber = 1;
347                for (PurchaseOrderContractLanguage row : contractLanguageList) {
348                    if (row.getCampusCode().equals(po.getDeliveryCampusCode())) {
349                        contractLanguage.append(lineNumber + " " + row.getPurchaseOrderContractLanguageDescription() + "\n");
350                        ++lineNumber;
351                    }
352                }
353            }
354    
355            String pdfFileLocation = parameterService.getParameterValue(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_DIRECTORY);
356            if (pdfFileLocation == null) {
357                LOG.debug("savePurchaseOrderPdf() ended");
358                throw new PurapConfigurationException("Application Setting PDF_DIRECTORY is missing.");
359            }
360    
361            String pdfFileName = "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_" + System.currentTimeMillis() + ".pdf";
362    
363            PurchaseOrderPdfFaxParameters pdfParameters = new PurchaseOrderPdfFaxParameters();
364            pdfParameters.setCampusParameter(campusParameter);
365            pdfParameters.setContractLanguage(contractLanguage.toString());
366            pdfParameters.setContractManagerSignatureImage(contractManagerSignatureImage);
367            pdfParameters.setDirectorSignatureImage(directorSignatureImage);
368            pdfParameters.setImageTempLocation(imageTempLocation);
369            pdfParameters.setKey(key);
370            pdfParameters.setLogoImage(logoImage);
371            pdfParameters.setStatusInquiryUrl(statusInquiryUrl);
372            pdfParameters.setPdfFileLocation(pdfFileLocation);
373            pdfParameters.setPdfFileName(pdfFileName);
374            pdfParameters.setUseImage(useImage);
375            return pdfParameters;
376        }*/
377    
378        /**
379         * Creates purchase order pdf document given the input parameters.
380         * 
381         * @param po                     The PurchaseOrderDocument.
382         * @param byteArrayOutputStream  ByteArrayOutputStream that the action is using, where the pdf will be printed to.
383         * @param isRetransmit           boolean true if this is a retransmit purchase order document.
384         * @param environment            The current environment used (e.g. DEV if it is a development environment).
385         * @param retransmitItems        The items selected by the user to be retransmitted.
386         * @return                       Collection of error strings.
387         */
388         protected Collection generatePurchaseOrderPdf(PurchaseOrderDocument po, ByteArrayOutputStream byteArrayOutputStream, boolean isRetransmit, String environment, List<PurchaseOrderItem> retransmitItems) {
389            LOG.debug("generatePurchaseOrderPdf() started");
390    
391            PurchaseOrderPdf poPdf = new PurchaseOrderPdf();
392            Collection errors = new ArrayList();
393            try {
394                PurchaseOrderParameters purchaseOrderParameters = getPurchaseOrderParameters();
395                purchaseOrderParameters.setPurchaseOrderPdfParameters(po);
396                PurchaseOrderTransmitParameters pdfParameters = (PurchaseOrderTransmitParameters)purchaseOrderParameters;
397                poPdf.generatePdf(po, pdfParameters, byteArrayOutputStream, isRetransmit, environment, retransmitItems);
398            }
399            catch (PurError e) {
400                LOG.error("Caught exception ", e);
401                errors.add(e.getMessage());
402            }
403            catch (PurapConfigurationException pce) {
404                LOG.error("Caught exception ", pce);
405                errors.add(pce.getMessage());
406            }
407    
408            LOG.debug("generatePurchaseOrderPdf() ended");
409            return errors;
410        }
411    
412        /**
413         * @see org.kuali.kfs.module.purap.document.service.PrintService#generatePurchaseOrderPdf(org.kuali.kfs.module.purap.document.PurchaseOrderDocument,
414         *      java.io.ByteArrayOutputStream, java.lang.String)
415         */
416        public Collection generatePurchaseOrderPdf(PurchaseOrderDocument po, ByteArrayOutputStream byteArrayOutputStream, String environment, List<PurchaseOrderItem> retransmitItems) {
417            return generatePurchaseOrderPdf(po, byteArrayOutputStream, TRANSMISSION_IS_NOT_RETRANSMIT, environment, retransmitItems);
418        }
419    
420      
421    
422        /**
423         * @see org.kuali.kfs.module.purap.document.service.PrintService#generatePurchaseOrderPdfForRetransmission(org.kuali.kfs.module.purap.document.PurchaseOrderDocument,
424         *      java.io.ByteArrayOutputStream, java.lang.String)
425         */
426        public Collection generatePurchaseOrderPdfForRetransmission(PurchaseOrderDocument po, ByteArrayOutputStream byteArrayOutputStream, String environment, List<PurchaseOrderItem> retransmitItems) {
427            return generatePurchaseOrderPdf(po, byteArrayOutputStream, TRANSMISSION_IS_RETRANSMIT, environment, retransmitItems);
428        }
429    
430    
431        /**
432         * Saves the purchase order pdf document.
433         * 
434         * @param po            The PurchaseOrderDocument.
435         * @param isRetransmit  boolean true if this is a retransmit purchase order document.
436         * @param environment   The current environment used (e.g. DEV if it is a development environment).
437         * @return              Collection of error strings.
438         */
439        protected Collection savePurchaseOrderPdf(PurchaseOrderDocument po, boolean isRetransmit, String environment) {
440            LOG.debug("savePurchaseOrderPdf() started");
441    
442            PurchaseOrderPdf poPdf = new PurchaseOrderPdf();
443            Collection errors = new ArrayList();
444    
445            PurchaseOrderTransmitParameters pdfParameters = null;
446    
447            try {
448                PurchaseOrderParameters purchaseOrderParameters = getPurchaseOrderParameters();
449                purchaseOrderParameters.setPurchaseOrderPdfParameters(po);
450                pdfParameters = (PurchaseOrderTransmitParameters)purchaseOrderParameters;
451                poPdf.savePdf(po, pdfParameters, isRetransmit, environment);
452            }
453            catch (PurError e) {
454                LOG.error("Caught exception ", e);
455                errors.add(e.getMessage());
456            }
457            catch (PurapConfigurationException pce) {
458                LOG.error("Caught exception ", pce);
459                errors.add(pce.getMessage());
460            }
461            finally {
462                try {
463                    poPdf.deletePdf(pdfParameters.getPdfFileLocation(), pdfParameters.getPdfFileName());
464                }
465                catch (Throwable e) {
466                    LOG.error("savePurchaseOrderPdf() Error deleting PDF" + pdfParameters.getPdfFileName() + " - Exception was " + e.getMessage(), e);
467                    errors.add("Error while deleting the pdf after savePurchaseOrderPdf" + e.getMessage());
468                }
469            }
470    
471            LOG.debug("savePurchaseOrderPdf() ended");
472            return errors;
473        }
474    
475        /**
476         * @see org.kuali.kfs.module.purap.document.service.PrintService#savePurchaseOrderPdf(org.kuali.kfs.module.purap.document.PurchaseOrderDocument,
477         *      java.lang.String)
478         */
479        public Collection savePurchaseOrderPdf(PurchaseOrderDocument po, String environment) {
480            return savePurchaseOrderPdf(po, TRANSMISSION_IS_NOT_RETRANSMIT, environment);
481        }
482    
483        /**
484         * @see org.kuali.kfs.module.purap.document.service.PrintService#savePurchaseOrderPdfForRetransmission(org.kuali.kfs.module.purap.document.PurchaseOrderDocument,
485         *      java.lang.String)
486         */
487        public Collection savePurchaseOrderPdfForRetransmission(PurchaseOrderDocument po, String environment) {
488            return savePurchaseOrderPdf(po, TRANSMISSION_IS_RETRANSMIT, environment);
489        }
490    
491        public Collection generateBulkReceivingPDF(BulkReceivingDocument blkRecDoc, 
492                                                   ByteArrayOutputStream baosPDF) {
493            
494            LOG.debug("generateBulkReceivingPDF() started");
495    
496            BulkReceivingPdf recBlkTicketPDF = new BulkReceivingPdf();
497            Collection errors = new ArrayList();
498            
499            String imageTempLocation = StringUtils.EMPTY;
500            String logoImage = StringUtils.EMPTY;
501            
502            String key = blkRecDoc.getDocumentNumber().toString(); // key can be any string; 
503            String campusCode = blkRecDoc.getDeliveryCampusCode().toLowerCase();
504            
505            String environment = kualiConfigurationService.getPropertyString(KFSConstants.ENVIRONMENT_KEY);
506            
507            boolean useImage = true;
508            if (parameterService.parameterExists(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR)) {
509                useImage = parameterService.getIndicatorParameter(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR);
510            }
511    
512            if (useImage) {
513                imageTempLocation = kualiConfigurationService.getPropertyString(KFSConstants.TEMP_DIRECTORY_KEY) + "/";
514    
515                if (imageTempLocation == null) {
516                    throw new PurapConfigurationException("IMAGE_TEMP_PATH is missing");
517                }
518    
519                // Get images
520                logoImage = imageDao.getLogo(key, campusCode, imageTempLocation);
521                
522                if (StringUtils.isEmpty(logoImage)) {
523                    throw new PurapConfigurationException("logoImage is null.");
524                }
525            }
526            
527            try {
528                recBlkTicketPDF.generatePdf(blkRecDoc,baosPDF,logoImage,environment);
529            }catch (PurapConfigurationException pce) {
530                LOG.error("Caught exception ", pce);
531                errors.add(pce.getMessage());
532            }
533    
534            LOG.debug("generateBulkReceivingPDF() ended");
535            return errors;
536        }
537        
538        public void setParameterService(ParameterService parameterService) {
539            this.parameterService = parameterService;
540        }
541    
542        public void setImageDao(ImageDao imageDao) {
543            this.imageDao = imageDao;
544        }
545    
546        public void setBusinessObjectService(BusinessObjectService businessObjectService) {
547            this.businessObjectService = businessObjectService;
548        }
549    
550        public void setKualiConfigurationService(KualiConfigurationService kualiConfigurationService) {
551            this.kualiConfigurationService = kualiConfigurationService;
552        }
553    
554        public void setPurchaseOrderParameters(PurchaseOrderParameters purchaseOrderParameters) {
555            this.purchaseOrderParameters = purchaseOrderParameters;
556        }
557        
558        public PurchaseOrderParameters getPurchaseOrderParameters() {
559            return SpringContext.getBean(PurchaseOrderParameters.class);
560        }
561        
562    }
563