View Javadoc
1   /*
2    * The Kuali Financial System, a comprehensive financial management system for higher education.
3    * 
4    * Copyright 2005-2014 The Kuali Foundation
5    * 
6    * This program is free software: you can redistribute it and/or modify
7    * it under the terms of the GNU Affero General Public License as
8    * published by the Free Software Foundation, either version 3 of the
9    * License, or (at your option) any later version.
10   * 
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU Affero General Public License for more details.
15   * 
16   * You should have received a copy of the GNU Affero General Public License
17   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18   */
19  package org.kuali.kfs.module.purap.pdf;
20  
21  import java.util.HashMap;
22  import java.util.List;
23  import java.util.Map;
24  
25  import org.apache.commons.lang.StringUtils;
26  import org.kuali.kfs.module.purap.PurapConstants;
27  import org.kuali.kfs.module.purap.businessobject.PurchaseOrderContractLanguage;
28  import org.kuali.kfs.module.purap.businessobject.PurchaseOrderVendorQuote;
29  import org.kuali.kfs.module.purap.document.PurchaseOrderDocument;
30  import org.kuali.kfs.module.purap.exception.PurapConfigurationException;
31  import org.kuali.kfs.module.purap.service.ImageService;
32  import org.kuali.kfs.sys.KFSConstants;
33  import org.kuali.kfs.sys.KFSPropertyConstants;
34  import org.kuali.kfs.sys.context.SpringContext;
35  import org.kuali.kfs.sys.service.impl.KfsParameterConstants;
36  import org.kuali.kfs.vnd.businessobject.CampusParameter;
37  import org.kuali.rice.core.api.config.property.ConfigurationService;
38  import org.kuali.rice.coreservice.framework.parameter.ParameterService;
39  import org.kuali.rice.krad.service.BusinessObjectService;
40  
41  /**
42   * Contains the parameters needed for creating a purchase order pdf document.
43   */
44  public class PurchaseOrderTransmitParameters implements PurchaseOrderParameters  {
45  
46      private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurchaseOrderTransmitParameters.class);
47  
48      private String imageTempLocation;
49      private String key;
50      private String logoImage;
51      private String directorSignatureImage;
52      private String contractManagerSignatureImage;
53      private CampusParameter campusParameter;
54      private String statusInquiryUrl;
55      private String contractLanguage;
56      private String contractManagerCampusCode;
57      private boolean useImage;
58  
59    //   common parameters for pdf and fax
60      private String pdfFileLocation;
61      private String pdfFileName;
62  
63      // parameters for sending fax
64      String recipientFaxNumber;
65      String vendorName;
66      String faxDescription;
67  
68      public PurchaseOrderTransmitParameters() {
69  
70      }
71  
72      @Override
73      public void setPurchaseOrderPdfParameters(PurchaseOrderDocument po) {
74            setPurchaseOrderPdfParameters(po, null);
75       }
76  
77       @Override
78      public void setPurchaseOrderPdfParameters(PurchaseOrderDocument po, PurchaseOrderVendorQuote povq) {
79  
80  
81           this.key = povq == null ? po.getPurapDocumentIdentifier().toString() : po.getPurapDocumentIdentifier().toString() + povq.getPurchaseOrderVendorQuoteIdentifier().toString(); // key can be any string; chose to use the PO number.
82           String campusCode = po.getDeliveryCampusCode().toLowerCase();
83           boolean useImage = true;
84           if (SpringContext.getBean(ParameterService.class).parameterExists(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR)) {
85               useImage = SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR);
86           }
87           // We'll get the imageTempLocation and the actual images only if the useImage is true. If useImage is false, we'll leave the
88           // images as blank space
89           if (useImage) {
90               if (getImageTempLocation() == null) {
91                   throw new PurapConfigurationException("IMAGE_TEMP_PATH is missing");
92               }
93  
94               // Get images
95               if ((this.logoImage = SpringContext.getBean(ImageService.class).getLogo(key, campusCode, imageTempLocation)) == null) {
96                   throw new PurapConfigurationException("logoImage is null.");
97               }
98               if ((this.directorSignatureImage = SpringContext.getBean(ImageService.class).getPurchasingDirectorImage(key, campusCode, imageTempLocation)) == null) {
99                   throw new PurapConfigurationException("directorSignatureImage is null.");
100              }
101              if ((this.contractManagerSignatureImage = SpringContext.getBean(ImageService.class).getContractManagerImage(key, po.getContractManagerCode(), imageTempLocation)) == null) {
102                  throw new PurapConfigurationException("contractManagerSignatureImage is null.");
103              }
104          }
105 
106          Map<String, Object> criteria = new HashMap<String, Object>();
107          criteria.put(KFSPropertyConstants.CAMPUS_CODE, po.getDeliveryCampusCode());
108          this.campusParameter = ((List<CampusParameter>) SpringContext.getBean(BusinessObjectService.class).findMatching(CampusParameter.class, criteria)).get(0);
109 
110          if (getStatusInquiryUrl() == null) {
111              LOG.debug("generatePurchaseOrderPdf() ended");
112              throw new PurapConfigurationException("Application Setting INVOICE_STATUS_INQUIRY_URL is missing.");
113          }
114 
115          StringBuffer contractLanguage = new StringBuffer();
116          criteria.put(KFSPropertyConstants.ACTIVE, true);
117          List<PurchaseOrderContractLanguage> contractLanguageList = (List<PurchaseOrderContractLanguage>) (SpringContext.getBean(BusinessObjectService.class).findMatching(PurchaseOrderContractLanguage.class, criteria));
118          if (!contractLanguageList.isEmpty()) {
119              int lineNumber = 1;
120              for (PurchaseOrderContractLanguage row : contractLanguageList) {
121                  if (row.getCampusCode().equals(po.getDeliveryCampusCode())) {
122                      contractLanguage.append(lineNumber + " " + row.getPurchaseOrderContractLanguageDescription() + "\n");
123                      ++lineNumber;
124                  }
125              }
126          }
127 
128          this.contractLanguage = contractLanguage.toString();
129 
130          if (getPdfFileLocation() == null) {
131              LOG.debug("savePurchaseOrderPdf() ended");
132              throw new PurapConfigurationException("Application Setting PDF_DIRECTORY is missing.");
133          }
134 
135          String environment = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(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      @Override
148     public void setPurchaseOrderFaxParameters(PurchaseOrderDocument po, PurchaseOrderVendorQuote povq) {
149          // get parameters to send fax
150 
151          if (getPdfFileLocation() == null) {
152              LOG.debug("savePurchaseOrderPdf() ended");
153              throw new PurapConfigurationException("Application Setting PDF_DIRECTORY is missing.");
154          }
155 
156 
157          this.pdfFileName = povq != null ? "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_Quote" + povq.getPurchaseOrderVendorQuoteIdentifier().toString()+ "_"  + System.currentTimeMillis() + ".pdf" :
158                               "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_" + System.currentTimeMillis() + ".pdf";
159 
160 
161           this.faxDescription =  povq != null ? "PO: " + po.getPurapDocumentIdentifier() + " Quote ID: " + povq.getPurchaseOrderVendorQuoteIdentifier():
162                                                   "PO: " + po.getPurapDocumentIdentifier() + " Cntrct Mgr: " + po.getContractManager().getContractManagerCode();
163 
164           String productionEnvironmentCode = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(KFSConstants.PROD_ENVIRONMENT_CODE_KEY);
165           String environmentCode           = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(KFSConstants.ENVIRONMENT_KEY);
166 
167           if (!StringUtils.equals(productionEnvironmentCode, environmentCode)) {
168               this.faxDescription = environmentCode + " TEST - " + this.faxDescription;
169           }
170 
171           this.vendorName = povq != null ? povq.getVendorName() : po.getVendorName();
172 
173 
174 
175 
176 
177      }
178 
179 
180 
181      @Override
182     public void setPurchaseOrderPdfAndFaxParameters(PurchaseOrderDocument po) {
183           setPurchaseOrderPdfAndFaxParameters(po, null);
184      }
185 
186      @Override
187     public void setPurchaseOrderPdfAndFaxParameters(PurchaseOrderDocument po, PurchaseOrderVendorQuote povq) {
188 
189          this.key = povq == null ? po.getPurapDocumentIdentifier().toString() : po.getPurapDocumentIdentifier().toString() + povq.getPurchaseOrderVendorQuoteIdentifier().toString(); // key can be any string; chose to use the PO number.
190          String campusCode = po.getDeliveryCampusCode().toLowerCase();
191         // String imageTempLocation = "";
192         // String logoImage = "";
193         // String directorSignatureImage = "";
194        //  String contractManagerSignatureImage = "";
195          boolean useImage = true;
196          if (SpringContext.getBean(ParameterService.class).parameterExists(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR)) {
197              useImage = SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR);
198          }
199          // We'll get the imageTempLocation and the actual images only if the useImage is true. If useImage is false, we'll leave the
200          // images as blank space
201          if (useImage) {
202              if (getImageTempLocation() == null) {
203                  throw new PurapConfigurationException("IMAGE_TEMP_PATH is missing");
204              }
205 
206              // Get images
207              if ((this.logoImage = SpringContext.getBean(ImageService.class).getLogo(key, campusCode, imageTempLocation)) == null) {
208                  throw new PurapConfigurationException("logoImage is null.");
209              }
210              if ((this.directorSignatureImage = SpringContext.getBean(ImageService.class).getPurchasingDirectorImage(key, campusCode, imageTempLocation)) == null) {
211                  throw new PurapConfigurationException("directorSignatureImage is null.");
212              }
213              if ((this.contractManagerSignatureImage = SpringContext.getBean(ImageService.class).getContractManagerImage(key, po.getContractManagerCode(), imageTempLocation)) == null) {
214                  throw new PurapConfigurationException("contractManagerSignatureImage is null.");
215              }
216          }
217 
218          Map<String, Object> criteria = new HashMap<String, Object>();
219          criteria.put(KFSPropertyConstants.CAMPUS_CODE, po.getDeliveryCampusCode());
220          this.campusParameter = ((List<CampusParameter>) SpringContext.getBean(BusinessObjectService.class).findMatching(CampusParameter.class, criteria)).get(0);
221 
222          if (getStatusInquiryUrl() == null) {
223              LOG.debug("generatePurchaseOrderPdf() ended");
224              throw new PurapConfigurationException("Application Setting INVOICE_STATUS_INQUIRY_URL is missing.");
225          }
226 
227          StringBuffer contractLanguage = new StringBuffer();
228          criteria.put(KFSPropertyConstants.ACTIVE, true);
229          List<PurchaseOrderContractLanguage> contractLanguageList = (List<PurchaseOrderContractLanguage>) (SpringContext.getBean(BusinessObjectService.class).findMatching(PurchaseOrderContractLanguage.class, criteria));
230          if (!contractLanguageList.isEmpty()) {
231              int lineNumber = 1;
232              for (PurchaseOrderContractLanguage row : contractLanguageList) {
233                  if (row.getCampusCode().equals(po.getDeliveryCampusCode())) {
234                      contractLanguage.append(lineNumber + " " + row.getPurchaseOrderContractLanguageDescription() + "\n");
235                      ++lineNumber;
236                  }
237              }
238          }
239 
240          this.contractLanguage = contractLanguage.toString();
241 
242          if (getPdfFileLocation() == null) {
243              LOG.debug("savePurchaseOrderPdf() ended");
244              throw new PurapConfigurationException("Application Setting PDF_DIRECTORY is missing.");
245          }
246 
247           this.pdfFileName = povq != null ? "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_Quote" + povq.getPurchaseOrderVendorQuoteIdentifier().toString()+ "_"  + System.currentTimeMillis() + ".pdf" :
248                              "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_" + System.currentTimeMillis() + ".pdf";
249 
250 
251           this.contractManagerCampusCode = po.getContractManager().getContractManagerPerson()!= null ? po.getContractManager().getContractManagerPerson().getCampusCode() : "";
252 
253          // get parameters to send fax
254 
255           this.faxDescription =  povq != null ? "PO: " + po.getPurapDocumentIdentifier() + " Quote ID: " + povq.getPurchaseOrderVendorQuoteIdentifier():
256                                                   "PO: " + po.getPurapDocumentIdentifier() + " Cntrct Mgr: " + po.getContractManager().getContractManagerCode();
257 
258           String productionEnvironmentCode = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(KFSConstants.PROD_ENVIRONMENT_CODE_KEY);
259           String environmentCode           = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(KFSConstants.ENVIRONMENT_KEY);
260 
261           if (!StringUtils.equals(productionEnvironmentCode, environmentCode)) {
262               this.faxDescription = environmentCode + " TEST - " + this.faxDescription;
263           }
264 
265           this.vendorName = povq != null ? povq.getVendorName() : po.getVendorName();
266           this.recipientFaxNumber = povq == null ? po.getVendorFaxNumber(): povq.getVendorFaxNumber();
267 
268 
269      }
270 
271 
272 
273     public String getContractManagerCampusCode() {
274         return contractManagerCampusCode;
275     }
276 
277     public void setContractManagerCampusCode(String contractManagerCampusCode) {
278         this.contractManagerCampusCode = contractManagerCampusCode;
279     }
280 
281     public String getPdfFileName() {
282         return pdfFileName;
283     }
284 
285     public void setPdfFileName(String pdfFileName) {
286         this.pdfFileName = pdfFileName;
287     }
288 
289     public String getPdfFileLocation() {
290         if (pdfFileLocation == null) {
291             pdfFileLocation = SpringContext.getBean(ParameterService.class).getParameterValueAsString(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_DIRECTORY);
292         }
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         if (imageTempLocation == null) {
334             imageTempLocation = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(KFSConstants.TEMP_DIRECTORY_KEY) + "/";
335         }
336         return imageTempLocation;
337     }
338 
339     public void setImageTempLocation(String imageTempLocation) {
340         this.imageTempLocation = imageTempLocation;
341     }
342 
343     public String getKey() {
344         return key;
345     }
346 
347     public void setKey(String key) {
348         this.key = key;
349     }
350 
351     public String getLogoImage() {
352         return logoImage;
353     }
354 
355     public void setLogoImage(String logoImage) {
356         this.logoImage = logoImage;
357     }
358 
359     public String getStatusInquiryUrl() {
360         if (statusInquiryUrl == null) {
361             statusInquiryUrl = SpringContext.getBean(ParameterService.class).getParameterValueAsString(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.STATUS_INQUIRY_URL);
362         }
363         return statusInquiryUrl;
364     }
365 
366     public void setStatusInquiryUrl(String statusInquiryUrl) {
367         this.statusInquiryUrl = statusInquiryUrl;
368     }
369 
370     public boolean isUseImage() {
371         return useImage;
372     }
373 
374     public void setUseImage(boolean useImage) {
375         this.useImage = useImage;
376     }
377 
378     public String getRecipientFaxNumber() {
379       return recipientFaxNumber;
380     }
381 
382     public void setRecipientFaxNumber(String recipientFaxNumber) {
383         this.recipientFaxNumber = recipientFaxNumber;
384     }
385 
386     public String getVendorName() {
387         return vendorName;
388     }
389 
390     public void setVendorName(String vendorName) {
391         this.vendorName = vendorName;
392     }
393 
394     public String getFaxDescription() {
395         return faxDescription;
396     }
397 
398     public void setFaxDescription(String faxDescription) {
399         this.faxDescription = faxDescription;
400     }
401 
402 
403 
404 
405 }