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.pdf;
017    
018    import java.util.HashMap;
019    import java.util.List;
020    import java.util.Map;
021    
022    import org.apache.commons.lang.StringUtils;
023    import org.kuali.kfs.module.purap.PurapConstants;
024    import org.kuali.kfs.module.purap.businessobject.PurchaseOrderContractLanguage;
025    import org.kuali.kfs.module.purap.businessobject.PurchaseOrderVendorQuote;
026    import org.kuali.kfs.module.purap.dataaccess.ImageDao;
027    import org.kuali.kfs.module.purap.document.PurchaseOrderDocument;
028    import org.kuali.kfs.module.purap.exception.PurapConfigurationException;
029    import org.kuali.kfs.sys.KFSConstants;
030    import org.kuali.kfs.sys.KFSPropertyConstants;
031    import org.kuali.kfs.sys.context.SpringContext;
032    import org.kuali.kfs.sys.service.impl.KfsParameterConstants;
033    import org.kuali.kfs.vnd.businessobject.CampusParameter;
034    import org.kuali.rice.core.resourceloader.ServiceLocator;
035    import org.kuali.rice.kns.service.BusinessObjectService;
036    import org.kuali.rice.kns.service.KualiConfigurationService;
037    import org.kuali.rice.kns.service.ParameterService;
038    
039    /**
040     * Contains the parameters needed for creating a purchase order pdf document.
041     */
042    public class PurchaseOrderTransmitParameters implements PurchaseOrderParameters  {
043        
044        private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurchaseOrderTransmitParameters.class);
045        
046        private String imageTempLocation;
047        private String key;
048        private String logoImage;
049        private String directorSignatureImage;
050        private String contractManagerSignatureImage;
051        private CampusParameter campusParameter;
052        private String statusInquiryUrl;
053        private String contractLanguage;
054        private String contractManagerCampusCode;
055        private boolean useImage;
056        
057      //   common parameters for pdf and fax
058        private String pdfFileLocation;
059        private String pdfFileName;
060        
061        // parameters for sending fax
062        String recipientFaxNumber;
063        String vendorName;
064        String faxDescription;
065        
066        public PurchaseOrderTransmitParameters() {
067            
068        }
069        
070        public void setPurchaseOrderPdfParameters(PurchaseOrderDocument po) {
071              setPurchaseOrderPdfParameters(po, null);
072         }
073        
074         public void setPurchaseOrderPdfParameters(PurchaseOrderDocument po, PurchaseOrderVendorQuote povq) {
075           
076             
077             this.key = povq == null ? po.getPurapDocumentIdentifier().toString() : po.getPurapDocumentIdentifier().toString() + povq.getPurchaseOrderVendorQuoteIdentifier().toString(); // key can be any string; chose to use the PO number.
078             String campusCode = po.getDeliveryCampusCode().toLowerCase();
079             boolean useImage = true;
080             if (SpringContext.getBean(ParameterService.class).parameterExists(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR)) {
081                 useImage = SpringContext.getBean(ParameterService.class).getIndicatorParameter(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR);
082             }
083             // We'll get the imageTempLocation and the actual images only if the useImage is true. If useImage is false, we'll leave the
084             // images as blank space
085             if (useImage) {
086                 this.imageTempLocation = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSConstants.TEMP_DIRECTORY_KEY) + "/";
087    
088                 if (imageTempLocation == null) {
089                     throw new PurapConfigurationException("IMAGE_TEMP_PATH is missing");
090                 }
091    
092                 // Get images
093                 if ((this.logoImage = SpringContext.getBean(ImageDao.class).getLogo(key, campusCode, imageTempLocation)) == null) {
094                     throw new PurapConfigurationException("logoImage is null.");
095                 }
096                 if ((this.directorSignatureImage = SpringContext.getBean(ImageDao.class).getPurchasingDirectorImage(key, campusCode, imageTempLocation)) == null) {
097                     throw new PurapConfigurationException("directorSignatureImage is null.");
098                 }
099                 if ((this.contractManagerSignatureImage = SpringContext.getBean(ImageDao.class).getContractManagerImage(key, po.getContractManagerCode(), imageTempLocation)) == null) {
100                     throw new PurapConfigurationException("contractManagerSignatureImage is null.");
101                 }
102             }
103    
104             Map<String, Object> criteria = new HashMap<String, Object>();
105             criteria.put(KFSPropertyConstants.CAMPUS_CODE, po.getDeliveryCampusCode());
106             this.campusParameter = (CampusParameter) ((List) SpringContext.getBean(BusinessObjectService.class).findMatching(CampusParameter.class, criteria)).get(0);
107    
108            this. statusInquiryUrl = SpringContext.getBean(ParameterService.class).getParameterValue(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.STATUS_INQUIRY_URL);
109             if (this.statusInquiryUrl == null) {
110                 LOG.debug("generatePurchaseOrderPdf() ended");
111                 throw new PurapConfigurationException("Application Setting INVOICE_STATUS_INQUIRY_URL is missing.");
112             }
113    
114             StringBuffer contractLanguage = new StringBuffer();
115             criteria.put(KFSPropertyConstants.ACTIVE, true);
116             List<PurchaseOrderContractLanguage> contractLanguageList = (List<PurchaseOrderContractLanguage>) (SpringContext.getBean(BusinessObjectService.class).findMatching(PurchaseOrderContractLanguage.class, criteria));
117             if (!contractLanguageList.isEmpty()) {
118                 int lineNumber = 1;
119                 for (PurchaseOrderContractLanguage row : contractLanguageList) {
120                     if (row.getCampusCode().equals(po.getDeliveryCampusCode())) {
121                         contractLanguage.append(lineNumber + " " + row.getPurchaseOrderContractLanguageDescription() + "\n");
122                         ++lineNumber;
123                     }
124                 }
125             }
126             
127             this.contractLanguage = contractLanguage.toString();
128             
129             this.pdfFileLocation = SpringContext.getBean(ParameterService.class).getParameterValue(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_DIRECTORY);
130             if (pdfFileLocation == null) {
131                 LOG.debug("savePurchaseOrderPdf() ended");
132                 throw new PurapConfigurationException("Application Setting PDF_DIRECTORY is missing.");
133             }
134             
135             String environment = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSConstants.ENVIRONMENT_KEY);
136             
137              this.pdfFileName = povq != null ? "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_Quote" + povq.getPurchaseOrderVendorQuoteIdentifier().toString()+ "_"  +  environment + "_" + System.currentTimeMillis() + ".pdf" :
138                                   "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_" + environment + "_" + System.currentTimeMillis() + ".pdf";
139            
140             
141              this.contractManagerCampusCode = po.getContractManager().getContractManagerPerson()!= null ? po.getContractManager().getContractManagerPerson().getCampusCode() : "";
142              this.contractLanguage = contractLanguage.toString();
143         
144         }
145    
146    
147         public void setPurchaseOrderFaxParameters(PurchaseOrderDocument po, PurchaseOrderVendorQuote povq) {
148             // get parameters to send fax 
149             
150          
151             this.pdfFileLocation = SpringContext.getBean(ParameterService.class).getParameterValue(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_DIRECTORY);
152             if (this.pdfFileLocation == null) {
153                 LOG.debug("savePurchaseOrderPdf() ended");
154                 throw new PurapConfigurationException("Application Setting PDF_DIRECTORY is missing.");
155             }
156             
157             
158             this.pdfFileName = povq != null ? "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_Quote" + povq.getPurchaseOrderVendorQuoteIdentifier().toString()+ "_"  + System.currentTimeMillis() + ".pdf" :
159                                  "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_" + System.currentTimeMillis() + ".pdf";
160             
161               
162              this.faxDescription =  povq != null ? "PO: " + po.getPurapDocumentIdentifier() + " Quote ID: " + povq.getPurchaseOrderVendorQuoteIdentifier():   
163                                                      "PO: " + po.getPurapDocumentIdentifier() + " Cntrct Mgr: " + po.getContractManager().getContractManagerCode(); 
164              
165              String productionEnvironmentCode = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSConstants.PROD_ENVIRONMENT_CODE_KEY);
166              String environmentCode           = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSConstants.ENVIRONMENT_KEY);
167             
168              if (!StringUtils.equals(productionEnvironmentCode, environmentCode)) {
169                  this.faxDescription = environmentCode + " TEST - " + this.faxDescription;
170              }
171              
172              this.vendorName = povq != null ? povq.getVendorName() : po.getVendorName();
173              
174              
175           
176              
177              
178         }
179         
180         
181      
182         public void setPurchaseOrderPdfAndFaxParameters(PurchaseOrderDocument po) {
183              setPurchaseOrderPdfAndFaxParameters(po, null);
184         }
185         
186         public void setPurchaseOrderPdfAndFaxParameters(PurchaseOrderDocument po, PurchaseOrderVendorQuote povq) {
187             
188             this.key = povq == null ? po.getPurapDocumentIdentifier().toString() : po.getPurapDocumentIdentifier().toString() + povq.getPurchaseOrderVendorQuoteIdentifier().toString(); // key can be any string; chose to use the PO number.
189             String campusCode = po.getDeliveryCampusCode().toLowerCase();
190            // String imageTempLocation = "";
191            // String logoImage = "";
192            // String directorSignatureImage = "";
193           //  String contractManagerSignatureImage = "";
194             boolean useImage = true;
195             if (SpringContext.getBean(ParameterService.class).parameterExists(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR)) {
196                 useImage = SpringContext.getBean(ParameterService.class).getIndicatorParameter(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR);
197             }
198             // We'll get the imageTempLocation and the actual images only if the useImage is true. If useImage is false, we'll leave the
199             // images as blank space
200             if (useImage) {
201                 this.imageTempLocation = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSConstants.TEMP_DIRECTORY_KEY) + "/";
202    
203                 if (this.imageTempLocation == null) {
204                     throw new PurapConfigurationException("IMAGE_TEMP_PATH is missing");
205                 }
206    
207                 // Get images
208                 if ((this.logoImage = SpringContext.getBean(ImageDao.class).getLogo(key, campusCode, imageTempLocation)) == null) {
209                     throw new PurapConfigurationException("logoImage is null.");
210                 }
211                 if ((this.directorSignatureImage = SpringContext.getBean(ImageDao.class).getPurchasingDirectorImage(key, campusCode, imageTempLocation)) == null) {
212                     throw new PurapConfigurationException("directorSignatureImage is null.");
213                 }
214                 if ((this.contractManagerSignatureImage = SpringContext.getBean(ImageDao.class).getContractManagerImage(key, po.getContractManagerCode(), imageTempLocation)) == null) {
215                     throw new PurapConfigurationException("contractManagerSignatureImage is null.");
216                 }
217             }
218    
219             Map<String, Object> criteria = new HashMap<String, Object>();
220             criteria.put(KFSPropertyConstants.CAMPUS_CODE, po.getDeliveryCampusCode());
221             this.campusParameter = (CampusParameter) ((List) SpringContext.getBean(BusinessObjectService.class).findMatching(CampusParameter.class, criteria)).get(0);
222    
223              this.statusInquiryUrl = SpringContext.getBean(ParameterService.class).getParameterValue(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.STATUS_INQUIRY_URL);
224             if (this.statusInquiryUrl == null) {
225                 LOG.debug("generatePurchaseOrderPdf() ended");
226                 throw new PurapConfigurationException("Application Setting INVOICE_STATUS_INQUIRY_URL is missing.");
227             }
228    
229             StringBuffer contractLanguage = new StringBuffer();
230             criteria.put(KFSPropertyConstants.ACTIVE, true);
231             List<PurchaseOrderContractLanguage> contractLanguageList = (List<PurchaseOrderContractLanguage>) (SpringContext.getBean(BusinessObjectService.class).findMatching(PurchaseOrderContractLanguage.class, criteria));
232             if (!contractLanguageList.isEmpty()) {
233                 int lineNumber = 1;
234                 for (PurchaseOrderContractLanguage row : contractLanguageList) {
235                     if (row.getCampusCode().equals(po.getDeliveryCampusCode())) {
236                         contractLanguage.append(lineNumber + " " + row.getPurchaseOrderContractLanguageDescription() + "\n");
237                         ++lineNumber;
238                     }
239                 }
240             }
241             
242             this.contractLanguage = contractLanguage.toString();
243             
244             this.pdfFileLocation = SpringContext.getBean(ParameterService.class).getParameterValue(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_DIRECTORY);
245             if (pdfFileLocation == null) {
246                 LOG.debug("savePurchaseOrderPdf() ended");
247                 throw new PurapConfigurationException("Application Setting PDF_DIRECTORY is missing.");
248             }
249             
250              this.pdfFileName = povq != null ? "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_Quote" + povq.getPurchaseOrderVendorQuoteIdentifier().toString()+ "_"  + System.currentTimeMillis() + ".pdf" :
251                                 "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_" + System.currentTimeMillis() + ".pdf";
252    
253             
254              this.contractManagerCampusCode = po.getContractManager().getContractManagerPerson()!= null ? po.getContractManager().getContractManagerPerson().getCampusCode() : "";
255             
256             // get parameters to send fax 
257              
258              this.faxDescription =  povq != null ? "PO: " + po.getPurapDocumentIdentifier() + " Quote ID: " + povq.getPurchaseOrderVendorQuoteIdentifier():   
259                                                      "PO: " + po.getPurapDocumentIdentifier() + " Cntrct Mgr: " + po.getContractManager().getContractManagerCode(); 
260              
261              String productionEnvironmentCode = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSConstants.PROD_ENVIRONMENT_CODE_KEY);
262              String environmentCode           = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSConstants.ENVIRONMENT_KEY);
263             
264              if (!StringUtils.equals(productionEnvironmentCode, environmentCode)) {
265                  this.faxDescription = environmentCode + " TEST - " + this.faxDescription;
266              }
267              
268              this.vendorName = povq != null ? povq.getVendorName() : po.getVendorName();
269              this.recipientFaxNumber = povq == null ? po.getVendorFaxNumber(): povq.getVendorFaxNumber();
270             
271            
272         }
273    
274        
275    
276        public String getContractManagerCampusCode() {
277            return contractManagerCampusCode;
278        }
279    
280        public void setContractManagerCampusCode(String contractManagerCampusCode) {
281            this.contractManagerCampusCode = contractManagerCampusCode;
282        }
283    
284        public String getPdfFileName() {
285            return pdfFileName;
286        }
287    
288        public void setPdfFileName(String pdfFileName) {
289            this.pdfFileName = pdfFileName;
290        }
291    
292        public String getPdfFileLocation() {
293            return pdfFileLocation;
294        }
295    
296        public void setPdfFileLocation(String pdfFileLocation) {
297            this.pdfFileLocation = pdfFileLocation;
298        }
299    
300        public CampusParameter getCampusParameter() {
301            return campusParameter;
302        }
303    
304        public void setCampusParameter(CampusParameter campusParameter) {
305            this.campusParameter = campusParameter;
306        }
307    
308        public String getContractLanguage() {
309            return contractLanguage;
310        }
311    
312        public void setContractLanguage(String contractLanguage) {
313            this.contractLanguage = contractLanguage;
314        }
315    
316        public String getContractManagerSignatureImage() {
317            return contractManagerSignatureImage;
318        }
319    
320        public void setContractManagerSignatureImage(String contractManagerSignatureImage) {
321            this.contractManagerSignatureImage = contractManagerSignatureImage;
322        }
323    
324        public String getDirectorSignatureImage() {
325            return directorSignatureImage;
326        }
327    
328        public void setDirectorSignatureImage(String directorSignatureImage) {
329            this.directorSignatureImage = directorSignatureImage;
330        }
331    
332        public String getImageTempLocation() {
333            return imageTempLocation;
334        }
335    
336        public void setImageTempLocation(String imageTempLocation) {
337            this.imageTempLocation = imageTempLocation;
338        }
339    
340        public String getKey() {
341            return key;
342        }
343    
344        public void setKey(String key) {
345            this.key = key;
346        }
347    
348        public String getLogoImage() {
349            return logoImage;
350        }
351    
352        public void setLogoImage(String logoImage) {
353            this.logoImage = logoImage;
354        }
355    
356        public String getStatusInquiryUrl() {
357            return statusInquiryUrl;
358        }
359    
360        public void setStatusInquiryUrl(String statusInquiryUrl) {
361            this.statusInquiryUrl = statusInquiryUrl;
362        }
363    
364        public boolean isUseImage() {
365            return useImage;
366        }
367    
368        public void setUseImage(boolean useImage) {
369            this.useImage = useImage;
370        }
371        
372        public String getRecipientFaxNumber() {
373          return recipientFaxNumber;   
374        }
375    
376        public void setRecipientFaxNumber(String recipientFaxNumber) {
377            this.recipientFaxNumber = recipientFaxNumber;
378        }
379    
380        public String getVendorName() {
381            return vendorName;
382        }
383        
384        public void setVendorName(String vendorName) {
385            vendorName = vendorName;
386        }
387        
388        public String getFaxDescription() {
389            return faxDescription;
390        }
391        
392        public void setFaxDescription(String faxDescription) {
393            this.faxDescription = faxDescription;
394        }
395        
396       
397    
398    
399    }