/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.module.purap.pdf;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.kuali.kfs.module.purap.PurapConstants;
import org.kuali.kfs.module.purap.businessobject.PurchaseOrderContractLanguage;
import org.kuali.kfs.module.purap.businessobject.PurchaseOrderVendorQuote;
import org.kuali.kfs.module.purap.document.PurchaseOrderDocument;
import org.kuali.kfs.module.purap.exception.PurapConfigurationException;
import org.kuali.kfs.module.purap.service.ImageService;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.kfs.sys.KFSPropertyConstants;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.service.impl.KfsParameterConstants;
import org.kuali.kfs.vnd.businessobject.CampusParameter;
import org.kuali.rice.core.api.config.property.ConfigurationService;
import org.kuali.rice.coreservice.framework.parameter.ParameterService;
import org.kuali.rice.krad.service.BusinessObjectService;
/**
* Contains the parameters needed for creating a purchase order pdf document.
*/
public class PurchaseOrderTransmitParameters implements PurchaseOrderParameters {
private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurchaseOrderTransmitParameters.class);
private String imageTempLocation;
private String key;
private String logoImage;
private String directorSignatureImage;
private String contractManagerSignatureImage;
private CampusParameter campusParameter;
private String statusInquiryUrl;
private String contractLanguage;
private String contractManagerCampusCode;
private boolean useImage;
// common parameters for pdf and fax
private String pdfFileLocation;
private String pdfFileName;
// parameters for sending fax
String recipientFaxNumber;
String vendorName;
String faxDescription;
public PurchaseOrderTransmitParameters() {
}
@Override
public void setPurchaseOrderPdfParameters(PurchaseOrderDocument po) {
setPurchaseOrderPdfParameters(po, null);
}
@Override
public void setPurchaseOrderPdfParameters(PurchaseOrderDocument po, PurchaseOrderVendorQuote povq) {
this.key = povq == null ? po.getPurapDocumentIdentifier().toString() : po.getPurapDocumentIdentifier().toString() + povq.getPurchaseOrderVendorQuoteIdentifier().toString(); // key can be any string; chose to use the PO number.
String campusCode = po.getDeliveryCampusCode().toLowerCase();
boolean useImage = true;
if (SpringContext.getBean(ParameterService.class).parameterExists(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR)) {
useImage = SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR);
}
// We'll get the imageTempLocation and the actual images only if the useImage is true. If useImage is false, we'll leave the
// images as blank space
if (useImage) {
if (getImageTempLocation() == null) {
throw new PurapConfigurationException("IMAGE_TEMP_PATH is missing");
}
// Get images
if ((this.logoImage = SpringContext.getBean(ImageService.class).getLogo(key, campusCode, imageTempLocation)) == null) {
throw new PurapConfigurationException("logoImage is null.");
}
if ((this.directorSignatureImage = SpringContext.getBean(ImageService.class).getPurchasingDirectorImage(key, campusCode, imageTempLocation)) == null) {
throw new PurapConfigurationException("directorSignatureImage is null.");
}
if ((this.contractManagerSignatureImage = SpringContext.getBean(ImageService.class).getContractManagerImage(key, po.getContractManagerCode(), imageTempLocation)) == null) {
throw new PurapConfigurationException("contractManagerSignatureImage is null.");
}
}
Map<String, Object> criteria = new HashMap<String, Object>();
criteria.put(KFSPropertyConstants.CAMPUS_CODE, po.getDeliveryCampusCode());
this.campusParameter = ((List<CampusParameter>) SpringContext.getBean(BusinessObjectService.class).findMatching(CampusParameter.class, criteria)).get(0);
if (getStatusInquiryUrl() == null) {
LOG.debug("generatePurchaseOrderPdf() ended");
throw new PurapConfigurationException("Application Setting INVOICE_STATUS_INQUIRY_URL is missing.");
}
StringBuffer contractLanguage = new StringBuffer();
criteria.put(KFSPropertyConstants.ACTIVE, true);
List<PurchaseOrderContractLanguage> contractLanguageList = (List<PurchaseOrderContractLanguage>) (SpringContext.getBean(BusinessObjectService.class).findMatching(PurchaseOrderContractLanguage.class, criteria));
if (!contractLanguageList.isEmpty()) {
int lineNumber = 1;
for (PurchaseOrderContractLanguage row : contractLanguageList) {
if (row.getCampusCode().equals(po.getDeliveryCampusCode())) {
contractLanguage.append(lineNumber + " " + row.getPurchaseOrderContractLanguageDescription() + "\n");
++lineNumber;
}
}
}
this.contractLanguage = contractLanguage.toString();
if (getPdfFileLocation() == null) {
LOG.debug("savePurchaseOrderPdf() ended");
throw new PurapConfigurationException("Application Setting PDF_DIRECTORY is missing.");
}
String environment = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(KFSConstants.ENVIRONMENT_KEY);
this.pdfFileName = povq != null ? "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_Quote" + povq.getPurchaseOrderVendorQuoteIdentifier().toString()+ "_" + environment + "_" + System.currentTimeMillis() + ".pdf" :
"PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_" + environment + "_" + System.currentTimeMillis() + ".pdf";
this.contractManagerCampusCode = po.getContractManager().getContractManagerPerson()!= null ? po.getContractManager().getContractManagerPerson().getCampusCode() : "";
this.contractLanguage = contractLanguage.toString();
}
@Override
public void setPurchaseOrderFaxParameters(PurchaseOrderDocument po, PurchaseOrderVendorQuote povq) {
// get parameters to send fax
if (getPdfFileLocation() == null) {
LOG.debug("savePurchaseOrderPdf() ended");
throw new PurapConfigurationException("Application Setting PDF_DIRECTORY is missing.");
}
this.pdfFileName = povq != null ? "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_Quote" + povq.getPurchaseOrderVendorQuoteIdentifier().toString()+ "_" + System.currentTimeMillis() + ".pdf" :
"PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_" + System.currentTimeMillis() + ".pdf";
this.faxDescription = povq != null ? "PO: " + po.getPurapDocumentIdentifier() + " Quote ID: " + povq.getPurchaseOrderVendorQuoteIdentifier():
"PO: " + po.getPurapDocumentIdentifier() + " Cntrct Mgr: " + po.getContractManager().getContractManagerCode();
String productionEnvironmentCode = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(KFSConstants.PROD_ENVIRONMENT_CODE_KEY);
String environmentCode = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(KFSConstants.ENVIRONMENT_KEY);
if (!StringUtils.equals(productionEnvironmentCode, environmentCode)) {
this.faxDescription = environmentCode + " TEST - " + this.faxDescription;
}
this.vendorName = povq != null ? povq.getVendorName() : po.getVendorName();
}
@Override
public void setPurchaseOrderPdfAndFaxParameters(PurchaseOrderDocument po) {
setPurchaseOrderPdfAndFaxParameters(po, null);
}
@Override
public void setPurchaseOrderPdfAndFaxParameters(PurchaseOrderDocument po, PurchaseOrderVendorQuote povq) {
this.key = povq == null ? po.getPurapDocumentIdentifier().toString() : po.getPurapDocumentIdentifier().toString() + povq.getPurchaseOrderVendorQuoteIdentifier().toString(); // key can be any string; chose to use the PO number.
String campusCode = po.getDeliveryCampusCode().toLowerCase();
// String imageTempLocation = "";
// String logoImage = "";
// String directorSignatureImage = "";
// String contractManagerSignatureImage = "";
boolean useImage = true;
if (SpringContext.getBean(ParameterService.class).parameterExists(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR)) {
useImage = SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_IMAGES_AVAILABLE_INDICATOR);
}
// We'll get the imageTempLocation and the actual images only if the useImage is true. If useImage is false, we'll leave the
// images as blank space
if (useImage) {
if (getImageTempLocation() == null) {
throw new PurapConfigurationException("IMAGE_TEMP_PATH is missing");
}
// Get images
if ((this.logoImage = SpringContext.getBean(ImageService.class).getLogo(key, campusCode, imageTempLocation)) == null) {
throw new PurapConfigurationException("logoImage is null.");
}
if ((this.directorSignatureImage = SpringContext.getBean(ImageService.class).getPurchasingDirectorImage(key, campusCode, imageTempLocation)) == null) {
throw new PurapConfigurationException("directorSignatureImage is null.");
}
if ((this.contractManagerSignatureImage = SpringContext.getBean(ImageService.class).getContractManagerImage(key, po.getContractManagerCode(), imageTempLocation)) == null) {
throw new PurapConfigurationException("contractManagerSignatureImage is null.");
}
}
Map<String, Object> criteria = new HashMap<String, Object>();
criteria.put(KFSPropertyConstants.CAMPUS_CODE, po.getDeliveryCampusCode());
this.campusParameter = ((List<CampusParameter>) SpringContext.getBean(BusinessObjectService.class).findMatching(CampusParameter.class, criteria)).get(0);
if (getStatusInquiryUrl() == null) {
LOG.debug("generatePurchaseOrderPdf() ended");
throw new PurapConfigurationException("Application Setting INVOICE_STATUS_INQUIRY_URL is missing.");
}
StringBuffer contractLanguage = new StringBuffer();
criteria.put(KFSPropertyConstants.ACTIVE, true);
List<PurchaseOrderContractLanguage> contractLanguageList = (List<PurchaseOrderContractLanguage>) (SpringContext.getBean(BusinessObjectService.class).findMatching(PurchaseOrderContractLanguage.class, criteria));
if (!contractLanguageList.isEmpty()) {
int lineNumber = 1;
for (PurchaseOrderContractLanguage row : contractLanguageList) {
if (row.getCampusCode().equals(po.getDeliveryCampusCode())) {
contractLanguage.append(lineNumber + " " + row.getPurchaseOrderContractLanguageDescription() + "\n");
++lineNumber;
}
}
}
this.contractLanguage = contractLanguage.toString();
if (getPdfFileLocation() == null) {
LOG.debug("savePurchaseOrderPdf() ended");
throw new PurapConfigurationException("Application Setting PDF_DIRECTORY is missing.");
}
this.pdfFileName = povq != null ? "PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_Quote" + povq.getPurchaseOrderVendorQuoteIdentifier().toString()+ "_" + System.currentTimeMillis() + ".pdf" :
"PURAP_PO_" + po.getPurapDocumentIdentifier().toString() + "_" + System.currentTimeMillis() + ".pdf";
this.contractManagerCampusCode = po.getContractManager().getContractManagerPerson()!= null ? po.getContractManager().getContractManagerPerson().getCampusCode() : "";
// get parameters to send fax
this.faxDescription = povq != null ? "PO: " + po.getPurapDocumentIdentifier() + " Quote ID: " + povq.getPurchaseOrderVendorQuoteIdentifier():
"PO: " + po.getPurapDocumentIdentifier() + " Cntrct Mgr: " + po.getContractManager().getContractManagerCode();
String productionEnvironmentCode = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(KFSConstants.PROD_ENVIRONMENT_CODE_KEY);
String environmentCode = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(KFSConstants.ENVIRONMENT_KEY);
if (!StringUtils.equals(productionEnvironmentCode, environmentCode)) {
this.faxDescription = environmentCode + " TEST - " + this.faxDescription;
}
this.vendorName = povq != null ? povq.getVendorName() : po.getVendorName();
this.recipientFaxNumber = povq == null ? po.getVendorFaxNumber(): povq.getVendorFaxNumber();
}
public String getContractManagerCampusCode() {
return contractManagerCampusCode;
}
public void setContractManagerCampusCode(String contractManagerCampusCode) {
this.contractManagerCampusCode = contractManagerCampusCode;
}
public String getPdfFileName() {
return pdfFileName;
}
public void setPdfFileName(String pdfFileName) {
this.pdfFileName = pdfFileName;
}
public String getPdfFileLocation() {
if (pdfFileLocation == null) {
pdfFileLocation = SpringContext.getBean(ParameterService.class).getParameterValueAsString(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.PDF_DIRECTORY);
}
return pdfFileLocation;
}
public void setPdfFileLocation(String pdfFileLocation) {
this.pdfFileLocation = pdfFileLocation;
}
public CampusParameter getCampusParameter() {
return campusParameter;
}
public void setCampusParameter(CampusParameter campusParameter) {
this.campusParameter = campusParameter;
}
public String getContractLanguage() {
return contractLanguage;
}
public void setContractLanguage(String contractLanguage) {
this.contractLanguage = contractLanguage;
}
public String getContractManagerSignatureImage() {
return contractManagerSignatureImage;
}
public void setContractManagerSignatureImage(String contractManagerSignatureImage) {
this.contractManagerSignatureImage = contractManagerSignatureImage;
}
public String getDirectorSignatureImage() {
return directorSignatureImage;
}
public void setDirectorSignatureImage(String directorSignatureImage) {
this.directorSignatureImage = directorSignatureImage;
}
public String getImageTempLocation() {
if (imageTempLocation == null) {
imageTempLocation = SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(KFSConstants.TEMP_DIRECTORY_KEY) + "/";
}
return imageTempLocation;
}
public void setImageTempLocation(String imageTempLocation) {
this.imageTempLocation = imageTempLocation;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getLogoImage() {
return logoImage;
}
public void setLogoImage(String logoImage) {
this.logoImage = logoImage;
}
public String getStatusInquiryUrl() {
if (statusInquiryUrl == null) {
statusInquiryUrl = SpringContext.getBean(ParameterService.class).getParameterValueAsString(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapConstants.STATUS_INQUIRY_URL);
}
return statusInquiryUrl;
}
public void setStatusInquiryUrl(String statusInquiryUrl) {
this.statusInquiryUrl = statusInquiryUrl;
}
public boolean isUseImage() {
return useImage;
}
public void setUseImage(boolean useImage) {
this.useImage = useImage;
}
public String getRecipientFaxNumber() {
return recipientFaxNumber;
}
public void setRecipientFaxNumber(String recipientFaxNumber) {
this.recipientFaxNumber = recipientFaxNumber;
}
public String getVendorName() {
return vendorName;
}
public void setVendorName(String vendorName) {
this.vendorName = vendorName;
}
public String getFaxDescription() {
return faxDescription;
}
public void setFaxDescription(String faxDescription) {
this.faxDescription = faxDescription;
}
}