/*
* 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.fixture;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.kuali.kfs.module.purap.PurapConstants;
import org.kuali.kfs.module.purap.util.PurApDateFormatUtils;
public class ElectronicInvoiceHelperServiceFixture {
private static String vendorDUNSNumber;
private static String poNumber;
private static String invoiceDate;
private static String itemQty;
public static String getCorruptedCXML(String vendorDUNS,String poNbr){
vendorDUNSNumber = vendorDUNS;
poNumber = poNbr;
//Adding some text at the end of a valid cxml
return getXMLChunk().concat("TestForCorruptedXML");
}
public static String getCXMLForPaymentDocCreation(String vendorDuns,String poNbr){
vendorDUNSNumber = vendorDuns;
poNumber = poNbr;
itemQty = "1";
return getXMLChunk();
}
public static String getCXMLForRejectDocCreation(String vendorDUNS,String poNbr){
vendorDUNSNumber = vendorDUNS;
poNumber = poNbr;
itemQty = "100";
return getXMLChunk();
}
private static String getXMLChunk(){
StringBuffer xmlChunk = new StringBuffer();
xmlChunk.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
xmlChunk.append("<!DOCTYPE cXML SYSTEM \"http://xml.cxml.org/schemas/cXML/1.2.009/InvoiceDetail.dtd\">\n");
xmlChunk.append("<cXML payloadID=\"irrelevant\" xml:lang=\"en-US\" timestamp=").
append(getCXMLDate(true)).append("\n").
append(" version=\"1.2.014\">");
xmlChunk.append(getHeaderXMLChunk());
xmlChunk.append(getRequestXMLChunk());
xmlChunk.append("</cXML>");
return xmlChunk.toString();
}
private static StringBuffer getHeaderXMLChunk(){
StringBuffer header = new StringBuffer();
header.append("<Header>");
header.append("<From>");
header.append("<Credential domain=\"DUNS\">");
header.append("<Identity>" + vendorDUNSNumber + "</Identity>");
header.append("</Credential>");
header.append("</From>");
header.append("<To>");
header.append("<Credential domain=\"DUNS\">");
header.append("<Identity>IU</Identity>");
header.append("</Credential>");
header.append("</To>");
header.append("<Sender>");
header.append("<Credential domain=\"DUNS\">");
header.append("<Identity>" + vendorDUNSNumber + "</Identity>");
header.append("<SharedSecret>INDIANA</SharedSecret>");
header.append("</Credential>");
header.append("<UserAgent/>");
header.append("</Sender>");
header.append("</Header>");
return header;
}
private static StringBuffer getRequestXMLChunk(){
StringBuffer request = new StringBuffer();
request.append("<Request deploymentMode=\"production\">");
request.append("<InvoiceDetailRequest>");
request.append("<InvoiceDetailRequestHeader invoiceID=\"LDR3496\" purpose=\"standard\" invoiceDate=" + getCXMLDate(true) +">");
request.append("<InvoiceDetailHeaderIndicator/>");
request.append("<InvoiceDetailLineIndicator/>");
request.append("<InvoicePartner>");
request.append("<Contact role=\"billTo\">");
request.append("<Name xml:lang=\"en\">INDIANA UNIVERSITY-SOUTH BEND LRC</Name>");
request.append("<PostalAddress>");
request.append("<DeliverTo/>");
request.append("<Street>PO BOX 7111</Street><City>SOUTH BEND</City><State>IN</State><PostalCode>466347111</PostalCode>");
request.append("<Country isoCountryCode=\"US\">US</Country>");
request.append("</PostalAddress>");
request.append("</Contact>");
request.append("</InvoicePartner>");
request.append("<InvoicePartner>");
request.append("<Contact role=\"remitTo\" addressID=\"2088891\">");
request.append("<Name xml:lang=\"en\">CDW Government, Inc.</Name>");
request.append("</Contact>");
request.append("</InvoicePartner>");
request.append("<InvoiceDetailShipping>");
request.append("<Contact role=\"shipFrom\">");
request.append("<Name xml:lang=\"en\">CDW Government, Inc.</Name>");
request.append("<PostalAddress>");
request.append("<DeliverTo/><Street>230 North Milwaukee Avenue</Street><City>Vernon Hills</City><State>IL</State><PostalCode>60061</PostalCode>");
request.append("<Country isoCountryCode=\"US\">US</Country>");
request.append("</PostalAddress></Contact>");
request.append("<Contact role=\"shipTo\">");
request.append("<Name xml:lang=\"en\">INDIANA UNIVERSITY SOUTH BEND</Name>");
request.append("<PostalAddress>");
request.append("<DeliverTo/>");
request.append("<Street>1825 NORTHSIDE BLVD RM #NS075A</Street><City>SOUTH BEND</City><State>IN</State><PostalCode>466151501</PostalCode>");
request.append("<Country isoCountryCode=\"US\">US</Country>");
request.append("</PostalAddress></Contact></InvoiceDetailShipping>");
request.append("<InvoiceDetailPaymentTerm payInNumberOfDays=\"30\" percentageRate=\"0\"/>");
request.append("</InvoiceDetailRequestHeader>");
request.append(getInvoiceOrderXMLChunk());
request.append(getInvoiceSummaryXMLChunk());
request.append("</InvoiceDetailRequest>");
request.append("</Request>");
return request;
}
public static StringBuffer getInvoiceOrderXMLChunk(){
StringBuffer order = new StringBuffer();
order.append("<InvoiceDetailOrder>");
order.append("<InvoiceDetailOrderInfo>");
order.append("<OrderReference orderID=\"" + poNumber + "\" orderDate=" + getCXMLDate(false) + "/>");
order.append("</InvoiceDetailOrderInfo>");
order.append("<InvoiceDetailItem invoiceLineNumber=\"1\" quantity=\"" + itemQty + "\">");
order.append("<UnitOfMeasure>BG</UnitOfMeasure>");
order.append("<UnitPrice><Money currency=\"USD\">10.00</Money></UnitPrice>");
order.append("<InvoiceDetailItemReference lineNumber=\"1\">");
order.append("<ItemID><SupplierPartID>1212</SupplierPartID></ItemID>");
order.append("<Description xml:lang=\"en\">test</Description><ManufacturerPartID/><ManufacturerName/></InvoiceDetailItemReference>");
order.append("<SubtotalAmount><Money currency=\"USD\">10.00</Money></SubtotalAmount>");
order.append("</InvoiceDetailItem>");
order.append("</InvoiceDetailOrder>");
return order;
}
public static StringBuffer getInvoiceSummaryXMLChunk(){
StringBuffer summary = new StringBuffer();
summary.append("<InvoiceDetailSummary>");
summary.append("<SubtotalAmount><Money currency=\"USD\">10</Money></SubtotalAmount>");
summary.append("<Tax>");
summary.append("<Money currency=\"USD\">0</Money>");
summary.append("<Description xml:lang=\"en\">TOTAL TAX</Description>");
summary.append("<TaxDetail category=\"sales\" percentageRate=\"0\" purpose=\"tax\">");
summary.append("<TaxAmount><Money currency=\"USD\">0.0</Money></TaxAmount>");
summary.append("<Description xml:lang=\"en\">Item State and Local Tax</Description>");
summary.append("</TaxDetail></Tax>");
summary.append("<SpecialHandlingAmount><Money currency=\"USD\">0.00</Money></SpecialHandlingAmount>\n");
summary.append("<ShippingAmount><Money currency=\"USD\">0.00</Money></ShippingAmount>");
summary.append("<InvoiceDetailDiscount><Money currency=\"USD\">0.00</Money></InvoiceDetailDiscount>");
summary.append("<NetAmount><Money currency=\"USD\">10.00</Money></NetAmount>");
summary.append("<DepositAmount><Money currency=\"USD\">2.00</Money></DepositAmount>");
summary.append("<DueAmount><Money currency=\"USD\">10.00</Money></DueAmount>");
summary.append("</InvoiceDetailSummary>");
return summary;
}
private static String getCXMLDate(boolean includeTime){
StringBuffer dateString = new StringBuffer();
Date d = new Date();
SimpleDateFormat date = PurApDateFormatUtils.getSimpleDateFormat(PurapConstants.NamedDateFormats.CXML_SIMPLE_DATE_FORMAT);
SimpleDateFormat time = PurApDateFormatUtils.getSimpleDateFormat(PurapConstants.NamedDateFormats.CXML_SIMPLE_TIME_FORMAT);
dateString.append("\"" + date.format(d)).append("T");
if (includeTime){
dateString.append(time.format(d)).append("-05:00");
}
dateString.append("\"");
return dateString.toString();
}
}