<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:asp="remove">
<xsl:output method="text" indent="yes"/>
<xsl:param name="palletlabels"/>
<xsl:param name="includeitem"/>
<xsl:param name="despatchadvicetype"/>
<xsl:template match="Document">
{
"Header": {
"Address": [{
"AddressName": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Warehouse/Name"/>
</xsl:call-template>",
"Address1": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Warehouse/Street1"/>
</xsl:call-template>",
"Address2": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Warehouse/Street2"/>
</xsl:call-template>",
"AddressTypeCode": "SF",
"City": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Warehouse/Suburb"/>
</xsl:call-template>",
"Country": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Warehouse/Country"/>
</xsl:call-template>",
"PostalCode": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="substring(concat('0000',Warehouse/PostCode), string-length(concat('0000',Warehouse/PostCode))-3,4)"/>
</xsl:call-template>",
"State": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Warehouse/State"/>
</xsl:call-template>"
},
{
"AddressLocationNumber": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="substring(concat('0000',Parties/PartyIdentifier[Type='SHIPTO']/Code), string-length(concat('0000',Parties/PartyIdentifier[Type='SHIPTO']/Code))-3,4)"/>
</xsl:call-template>",
"Address1": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Parties/PartyIdentifier[Type='SHIPTO']/Street1"/>
</xsl:call-template>",
"Address2": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Parties/PartyIdentifier[Type='SHIPTO']/Street2"/>
</xsl:call-template>",
"AddressName": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Parties/PartyIdentifier[Type='SHIPTO']/Name"/>
</xsl:call-template>",
"AddressTypeCode": "ST",
"City": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Parties/PartyIdentifier[Type='SHIPTO']/Suburb"/>
</xsl:call-template>",
"Country": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Parties/PartyIdentifier[Type='SHIPTO']/Country"/>
</xsl:call-template>",
"PostalCode": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="substring(concat('0000',Parties/PartyIdentifier[Type='SHIPTO']/PostCode), string-length(concat('0000',Parties/PartyIdentifier[Type='SHIPTO']/PostCode))-3,4)"/>
</xsl:call-template>",
"State": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Parties/PartyIdentifier[Type='SHIPTO']/State"/>
</xsl:call-template>"
},
{
"Address1": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Supplier/Street1"/>
</xsl:call-template>",
"Address2": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Supplier/Street2"/>
</xsl:call-template>",
"AddressName": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Supplier/Name"/>
</xsl:call-template>",
"AddressTypeCode": "VN",
"City": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Supplier/Suburb"/>
</xsl:call-template>",
"Country": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Supplier/Country"/>
</xsl:call-template>",
"PostalCode": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="substring(concat('0000',Supplier/PostCode), string-length(concat('0000',Supplier/PostCode))-3,4)"/>
</xsl:call-template>",
"State": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Supplier/State"/>
</xsl:call-template>"
}],
"BillOfLadingNumber": "<xsl:choose>
<xsl:when test="Invoices/Invoice[1]/ConNoteNumber != '' ">
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Invoices/Invoice[1]/ConNoteNumber"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Invoices/Invoice[1]/DeliveryNumber"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>",
"CarrierInformation": [{
"CarrierAlphaCode": "<xsl:choose>
<xsl:when test="Invoices/Invoice[1]/CarrierAlphaCode != '' ">
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Invoices/Invoice[1]/CarrierAlphaCode"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="SupplierFreightCompany/CarrierAlphaCode"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>",
"CarrierRouting": "<xsl:choose>
<xsl:when test="Invoices/Invoice[1]/CarrierRouting != '' ">
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Invoices/Invoice[1]/CarrierRouting"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="SupplierFreightCompany/CarrierRouting"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>"
}],
"CarrierProNumber": "<xsl:choose>
<xsl:when test="Invoices/Invoice[1]/ConNoteNumber != '' ">
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Invoices/Invoice[1]/ConNoteNumber"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Invoices/Invoice[1]/DeliveryNumber"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>",
"Department": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Department"/>
</xsl:call-template>",
"Division": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Division"/>
</xsl:call-template>",
"Notes": [{
"Note": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Comment"/>
</xsl:call-template>",
"NoteCode": "SPE"
}],
"PurchaseOrderNumber": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="OrderNumber"/>
</xsl:call-template>",
"TradingPartnerId": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="SenderID"/>
</xsl:call-template>",
"Vendor": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Supplier/CompanyGS1Number"/>
</xsl:call-template>"
},
"Pack": [
<xsl:choose>
<xsl:when test="palletlabels = 'true' ">
<xsl:for-each select="Pallets/Pallet">
{
"Address": [{
"AddressLocationNumber": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="substring(concat('0000',StorePartyIdentifier/Code), string-length(concat('0000',StorePartyIdentifier/Code))-3,4)"/>
</xsl:call-template>",
"AddressName": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/Name"/>
</xsl:call-template>",
"AddressTypeCode": "Z7",
"LocationCodeQualifier": "92",
"Address1": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/Street1"/>
</xsl:call-template>",
"Address2": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/Street2"/>
</xsl:call-template>",
"City": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/Suburb"/>
</xsl:call-template>",
"Country": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/Country"/>
</xsl:call-template>",
"PostalCode": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="substring(concat('00000',StorePartyIdentifier/PostCode), string-length(concat('00000',StorePartyIdentifier/PostCode))-4,5)"/>
</xsl:call-template>",
"State": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/State"/>
</xsl:call-template>"
}],
"Notes": [{
"Note": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="''"/>
</xsl:call-template>",
"NoteCode": "SPE"
}],
"PhysicalDetails": [{
"PackQualifier": "OU",
"PackValue": <xsl:call-template name="json-number">
<xsl:with-param name="value" select="count(Cartons/Carton)"/>
</xsl:call-template>
}],
"ShippingSerialID": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="CartonIdentifier"/>
</xsl:call-template>",
"Item": [
<xsl:for-each select="Cartons/Carton">
<xsl:for-each select="CartonQuantities/CartonQuantity[position() = 1]">
{
"BuyerPartNumber": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/RetailerItemCode"/>
</xsl:call-template>",
"ConsumerPackageCode": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/ConsumerPackageCode"/>
</xsl:call-template>",
<xsl:if test="BestBeforeDate != ''">
"Dates": [{
"Date": "<xsl:call-template name="json-date">
<xsl:with-param name="value" select="BestBeforeDate"/>
</xsl:call-template>",
"DateTimeQualifier": "036"
}],
</xsl:if>
"GTIN": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/BarCode"/>
</xsl:call-template>",
"EAN": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/BarCode"/>
</xsl:call-template>",
"PhysicalDetails": [{
"PackQualifier": "CP",
"PackWidth": <xsl:call-template name="json-number">
<xsl:with-param name="value" select="Line/UnitWidth"/>
</xsl:call-template>
}],
"ProductColorDescription": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/ProductColorDescription"/>
</xsl:call-template>",
"ProductID": [{
"PartNumber": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/MatchedItemCode"/>
</xsl:call-template>",
"PartNumberQual": "CB"
}],
"ProductOrItemDescription": [{
"ProductCharacteristicCode": "08",
"ProductDescription": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/ItemDescription"/>
</xsl:call-template>"
}],
"ProductSizeDescription": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/ProductSizeDescription"/>
</xsl:call-template>",
"References": [{
"ReferenceID": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="BatchNumber"/>
</xsl:call-template>",
"ReferenceQual": "BT"
}],
"ShipQty": <xsl:call-template name="json-number">
<xsl:with-param name="value" select="Quantity"/>
</xsl:call-template>,
"VendorPartNumber": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/MatchedItemCode"/>
</xsl:call-template>"
}<xsl:if test="position() != last()" >,</xsl:if>
</xsl:for-each>
<xsl:if test="position() != last()" >,</xsl:if>
</xsl:for-each>
],
} <xsl:if test="position() != last()" >,</xsl:if>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="Cartons/Carton">
{
"Address": [{
"AddressLocationNumber": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="substring(concat('0000',StorePartyIdentifier/Code), string-length(concat('0000',StorePartyIdentifier/Code))-3,4)"/>
</xsl:call-template>",
"AddressName": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/Name"/>
</xsl:call-template>",
"AddressTypeCode": "Z7",
"LocationCodeQualifier": "92",
"Address1": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/Street1"/>
</xsl:call-template>",
"Address2": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/Street2"/>
</xsl:call-template>",
"City": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/Suburb"/>
</xsl:call-template>",
"Country": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/Country"/>
</xsl:call-template>",
"PostalCode": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="substring(concat('00000',StorePartyIdentifier/PostCode), string-length(concat('00000',StorePartyIdentifier/PostCode))-4,5)"/>
</xsl:call-template>",
"State": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/State"/>
</xsl:call-template>"
}],
"Notes": [{
"Note": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="''"/>
</xsl:call-template>",
"NoteCode": "SPE"
}],
"PhysicalDetails": [{
"PackQualifier": "OU",
"PackValue": <xsl:call-template name="json-number">
<xsl:with-param name="value" select="count(Cartons/Carton)"/>
</xsl:call-template>
}],
"ShippingSerialID": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="CartonIdentifier"/>
</xsl:call-template>",
"Item": [
<xsl:for-each select="CartonQuantities/CartonQuantity[position() = 1]">
{
"BuyerPartNumber": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/RetailerItemCode"/>
</xsl:call-template>",
"ConsumerPackageCode": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/ConsumerPackageCode"/>
</xsl:call-template>",
<xsl:if test="BestBeforeDate != ''">
"Dates": [{
"Date": "<xsl:call-template name="json-date">
<xsl:with-param name="value" select="BestBeforeDate"/>
</xsl:call-template>",
"DateTimeQualifier": "036"
}],
</xsl:if>
"EAN": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/BarCode"/>
</xsl:call-template>",
"GTIN": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/BarCode"/>
</xsl:call-template>",
"PhysicalDetails": [{
"PackQualifier": "CP",
"PackWidth": <xsl:call-template name="json-number">
<xsl:with-param name="value" select="Line/UnitWidth"/>
</xsl:call-template>
}],
"ProductColorDescription": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/ProductColorDescription"/>
</xsl:call-template>",
"ProductID": [{
"PartNumber": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/MatchedItemCode"/>
</xsl:call-template>",
"PartNumberQual": "CB"
}],
"ProductOrItemDescription": [{
"ProductCharacteristicCode": "08",
"ProductDescription": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/ItemDescription"/>
</xsl:call-template>"
}],
"ProductSizeDescription": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/ProductSizeDescription"/>
</xsl:call-template>",
"References": [{
"ReferenceID": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="BatchNumber"/>
</xsl:call-template>",
"ReferenceQual": "BT"
}],
"ShipQty": <xsl:call-template name="json-number">
<xsl:with-param name="value" select="Quantity"/>
</xsl:call-template>,
"VendorPartNumber": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/MatchedItemCode"/>
</xsl:call-template>"
}<xsl:if test="position() != last()" >,</xsl:if>
</xsl:for-each>
]
}<xsl:if test="position() != last()" >,</xsl:if>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
]
}
</xsl:template>
<xsl:template name="json-date">
<xsl:param name="value"/>
<xsl:choose>
<xsl:when test="substring($value,5,1)='-' or substring($value,5,1)='/' ">
<xsl:value-of select="concat(substring($value,1,4),substring($value,6,2),substring($value,9,2))"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat(substring($value,7,4),substring($value,4,2),substring($value,1,2))"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="json-string">
<xsl:param name="value"/>
<xsl:variable name="doublequote">"</xsl:variable>
<xsl:variable name="singlequote">'</xsl:variable>
<xsl:value-of select="translate( $value,$doublequote,$singlequote)"/>
</xsl:template>
<xsl:template name="json-number">
<xsl:param name="value"/>
<xsl:value-of select="$value"/>
</xsl:template>
</xsl:stylesheet>