<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": [{
"AddressLocationNumber": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Warehouse/Code"/>
</xsl:call-template>",
"LocationCodeQualifier": "92",
"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>",
"AddressName": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Warehouse/Name"/>
</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('00000',Warehouse/PostCode), string-length(concat('00000',Warehouse/PostCode))-4,5)"/>
</xsl:call-template>",
"State": "<xsl:call-template name="json-string">
<!--<xsl:with-param name="value" select="Warehouse/State"/>-->
<xsl:with-param name="value" select="substring(concat(' ',Warehouse/State), string-length(concat(' ',Warehouse/State))-1,2)"/>
</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>",
"LocationCodeQualifier": "92",
"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('00000',Parties/PartyIdentifier[Type='SHIPTO']/PostCode), string-length(concat('00000',Parties/PartyIdentifier[Type='SHIPTO']/PostCode))-4,5)"/>
</xsl:call-template>",
"State": "<xsl:call-template name="json-string">
<!--<xsl:with-param name="value" select="Parties/PartyIdentifier[Type='SHIPTO']/State"/>-->
<xsl:with-param name="value" select="substring(concat(' ',Parties/PartyIdentifier[Type='SHIPTO']/State), string-length(concat(' ',Parties/PartyIdentifier[Type='SHIPTO']/State))-1,2)"/>
</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[0]/CarrierAlphaCode != '' ">
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Invoices/Invoice[0]/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[0]/CarrierRouting != '' ">
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Invoices/Invoice[0]/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>",
"References": [{
"ReferenceID": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="''"/>
</xsl:call-template>",
"ReferenceQual": "PHC"
}]
},
"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="StorePartyIdentifier/Code"/>
</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>",
"AddressName": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/Name"/>
</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>"
}],
"Item": [
<xsl:for-each select="Cartons/Carton">
<xsl:for-each select="CartonQuantities/CartonQuantity">
{
"BuyerPartNumber": "<xsl:choose>
<xsl:when test="Line/RetailerItemCode != '' ">
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/RetailerItemCode"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/MatchedItemCode"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>",
"ConsumerPackageCode": "<xsl:choose>
<xsl:when test="Line/ConsumerPackageCode != '' ">
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/ConsumerPackageCode"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/BarCode"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>",
"Dates": [{
"Date": "<xsl:call-template name="json-date">
<xsl:with-param name="value" select="BestBeforeDate"/>
</xsl:call-template>",
"DateTimeQualifier": "036"
}],
"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>
],
"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(Pallets/Pallet)"/>
</xsl:call-template>
}],
"ShippingSerialID": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="PalletIdentifier"/>
</xsl:call-template>"
} <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="StorePartyIdentifier/Code"/>
</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>",
"AddressName": "<xsl:call-template name="json-string">
<xsl:with-param name="value" select="StorePartyIdentifier/Name"/>
</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>"
}],
"Item": [
<xsl:for-each select="CartonQuantities/CartonQuantity">
{
"BuyerPartNumber": "<xsl:choose>
<xsl:when test="Line/RetailerItemCode != '' ">
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/RetailerItemCode"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/MatchedItemCode"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>",
"ConsumerPackageCode": "<xsl:choose>
<xsl:when test="Line/ConsumerPackageCode != '' ">
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/ConsumerPackageCode"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="json-string">
<xsl:with-param name="value" select="Line/BarCode"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>",
"Dates": [{
"Date": "<xsl:call-template name="json-date">
<xsl:with-param name="value" select="BestBeforeDate"/>
</xsl:call-template>",
"DateTimeQualifier": "036"
}],
"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>
],
"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>"
}<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>