Files
syspro/mapping/XSL_SYSPRO_DELIVERY/DELIVERY.xsl
T

247 lines
8.6 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<!-- 22.12.2023 DEV-8311 SAP sends delivery advices to stores MAPPING: SOURCE
- SAP ZFSHDLV TARGET - syspro internal Format -->
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns0="http://sap.com/xi/XI/SplitAndMerge" xmlns:map="java.util.Map" xmlns:dyn="com.sap.aii.mapping.api.DynamicConfiguration" xmlns:key="com.sap.aii.mapping.api.DynamicConfigurationKey" exclude-result-prefixes="xs map key dyn">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="inputparam"/>
<xsl:template match="/" name="DELIVERY">
<ns0:Messages>
<ns0:Message1>
<xsl:apply-templates/>
</ns0:Message1>
</ns0:Messages>
</xsl:template>
<xsl:template match="/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC" name="checkForHandlingUnit">
<xsl:if test="./E1EDL20/E1EDL37">
<xsl:call-template name="HandlingUnit"/>
</xsl:if>
<xsl:if test="not(./E1EDL20/E1EDL37)">
<xsl:call-template name="WithOutHandlingUnits"/>
</xsl:if>
</xsl:template>
<xsl:template name="Message">
<xsl:param name="CASE"/>
<xsl:param name="ID"/>
<xsl:param name="SSCCID"/>
<xsl:param name="POSITIONS"/>
<xsl:variable name="PackageCode">
<xsl:value-of select="'33E'"/>
</xsl:variable>
<xsl:variable name="PackageType">
<xsl:value-of select="'BJ'"/>
</xsl:variable>
<XMLDESADV>
<XMLDESADVHEADER>
<DocumentId>
<xsl:value-of select="$ID"/>
</DocumentId>
<DeliveryNote>
<xsl:choose>
<xsl:when test="/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/LIFEX/node()">
<xsl:value-of select="/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/LIFEX"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/VBELN"/>
</xsl:otherwise>
</xsl:choose>
</DeliveryNote>
<DocumentType>
<xsl:value-of select="'XMLDESADV'"/>
</DocumentType>
<DocumentSubType>
<xsl:call-template name="DocumentSubType">
<xsl:with-param name="LFART">
<xsl:value-of select="../E1EDL21/LFART"/>
</xsl:with-param>
</xsl:call-template>
</DocumentSubType>
<DocumentDate>
<xsl:value-of select="format-dateTime(adjust-dateTime-to-timezone(xs:dateTime(concat(
substring(/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/E1EDT13[QUALF='015']/NTANF,1,4),
'-',
substring(/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/E1EDT13[QUALF='015']/NTANF,5,2),
'-',
substring(/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/E1EDT13[QUALF='015']/NTANF,7,2),
'T',
substring(/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/E1EDT13[QUALF='015']/NTANZ,1,2),
':',
substring(/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/E1EDT13[QUALF='015']/NTANZ,3,2),
':',
substring(/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/E1EDT13[QUALF='015']/NTANZ,5,2)))),
'[Y0000]-[M00]-[D00]T[H00]:[m00]:[s00].[f0000000][Z]')"/>
</DocumentDate>
<DeliveryDate>
<xsl:value-of select="format-dateTime(adjust-dateTime-to-timezone(xs:dateTime(concat(
substring(/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/E1EDT13[QUALF='007']/NTANF,1,4),
'-',
substring(/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/E1EDT13[QUALF='007']/NTANF,5,2),
'-',
substring(/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/E1EDT13[QUALF='007']/NTANF,7,2),
'T',
substring(/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/E1EDT13[QUALF='007']/NTANZ,1,2),
':',
substring(/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/E1EDT13[QUALF='007']/NTANZ,3,2),
':',
substring(/ns0:Messages/ns0:Message1/ZFSHDLV/IDOC/E1EDL20/E1EDT13[QUALF='007']/NTANZ,5,2)))),
'[Y0000]-[M00]-[D00]T[H00]:[m00]:[s00].[f0000000][Z]')"/>
</DeliveryDate>
<ReferenceSupplierOrder/>
<ReferenceBuyerOrder/>
<ReferenceDocument>
<xsl:value-of select="$ID"/>
</ReferenceDocument>
<AllocationReference/>
<SenderGLN>
<xsl:value-of select="//IDOC/E1IDOCENHANCEMENT[IDENTIFIER='SENDERGLN']/DATA"/>
</SenderGLN>
<ReceipientGLN>
<xsl:value-of select="//IDOC/E1IDOCENHANCEMENT[IDENTIFIER='RECEIVERGLN']/DATA"/>
</ReceipientGLN>
<SupplierGLN/>
<BuyerGLN/>
<DeliveryPartyGLN/>
<UltimateConsignyGLN/>
<ReturnGLN/>
<SendFromGLN/>
<SendToGLN/>
<DeliveryCurrency/>
</XMLDESADVHEADER>
<XMLDESADV>
</XMLDESADV>
<XMLPACKAGEGROUP>
<NumberOfPackages>
<xsl:choose>
<xsl:when test="number(format-number(../../../IDOC/E1EDL20/ANZPK,'#')) > 0 ">
<xsl:value-of select="format-number(../../../IDOC/E1EDL20/ANZPK,'#')"/>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="1"/>
</xsl:otherwise>
</xsl:choose>
</NumberOfPackages>
<PackageCode>
<xsl:value-of select="$PackageCode"/>
</PackageCode>
</XMLPACKAGEGROUP>
<XMLSSCCGROUP>
<SSCC>
<xsl:value-of select="$SSCCID"/>
</SSCC>
<PackageCode>
<xsl:value-of select="$PackageCode"/>
</PackageCode>
<PackageType>
<xsl:value-of select="$PackageType"/>
</PackageType>
<xsl:copy-of select="$POSITIONS"/>
</XMLSSCCGROUP>
</XMLDESADV>
</xsl:template>
<xsl:template name="WithOutHandlingUnits">
<xsl:variable name="POSITIONS">
<xsl:for-each select="./E1EDL20/E1EDL24">
<XMLITEMS>
<PositionNumber>
<xsl:value-of select="./POSNR"/>
</PositionNumber>
<GTIN>
<xsl:value-of select="./EAN11"/>
</GTIN>
<DeliveredQuantity>
<xsl:value-of select="xs:decimal(./LGMNG)"/>
</DeliveredQuantity>
<QuantityQualifier>
<xsl:call-template name="QuantityQualifier">
<xsl:with-param name="UoM">
<xsl:value-of select="./MEINS"/>
</xsl:with-param>
</xsl:call-template>
</QuantityQualifier>
<DeliveryPrice/>
<ReferenceSupplierOrder>
<xsl:value-of select="./VGBEL"/>
</ReferenceSupplierOrder>
<ReferenceBuyerOrder/>
</XMLITEMS>
</xsl:for-each>
</xsl:variable>
<xsl:call-template name="Message">
<xsl:with-param name="CASE" select="'NoHandlingUnit'"/>
<xsl:with-param name="ID" select="./E1EDL20/VBELN"/>
<xsl:with-param name="SSCCID" select="./E1EDL20/VBELN"/>
<xsl:with-param name="POSITIONS" select="$POSITIONS"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="HandlingUnit">
<xsl:for-each select="./E1EDL20/E1EDL37">
<!-- Looping over all E1EDL37 segments and create a new message -->
<xsl:variable name="POSITIONS">
<xsl:for-each select="./E1EDL44">
<xsl:variable name="position" select="./POSNR"/>
<XMLITEMS>
<PositionNumber>
<xsl:value-of select="$position"/>
</PositionNumber>
<GTIN>
<xsl:value-of select="../../E1EDL24[POSNR = $position]/EAN11"/>
</GTIN>
<DeliveredQuantity>
<xsl:value-of select="xs:decimal(../../E1EDL24[POSNR = $position]/LGMNG)"/>
</DeliveredQuantity>
<QuantityQualifier>
<xsl:call-template name="QuantityQualifier">
<xsl:with-param name="UoM">
<xsl:value-of select="../../E1EDL24[POSNR = $position]/MEINS"/>
</xsl:with-param>
</xsl:call-template>
</QuantityQualifier>
<DeliveryPrice/>
<ReferenceSupplierOrder>
<xsl:value-of select="../../E1EDL24[POSNR = $position]/VGBEL"/>
</ReferenceSupplierOrder>
<ReferenceBuyerOrder/>
<xsl:if test="exists(./E1EPC03)">
<xsl:for-each select="./E1EPC03">
<XMLEPC>
<EPC>
<xsl:value-of select="./EPC"/>
</EPC>
</XMLEPC>
</xsl:for-each>
</xsl:if>
</XMLITEMS>
</xsl:for-each>
</xsl:variable>
<xsl:call-template name="Message">
<xsl:with-param name="CASE" select="'HandlingUnit'"/>
<xsl:with-param name="ID" select="concat(../VBELN,'_',./EXIDV)"/>
<xsl:with-param name="SSCCID" select="format-number(./EXIDV,'#')"/>
<xsl:with-param name="POSITIONS" select="$POSITIONS"/>
</xsl:call-template>
</xsl:for-each>
</xsl:template>
<xsl:template name="DocumentSubType">
<xsl:param name="LFART"/>
<xsl:choose>
<xsl:when test="$LFART = 'ZIL'">
<xsl:value-of select="'DESADV_IBT'"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'DESADV_GI'"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="QuantityQualifier">
<xsl:param name="UoM"/>
<xsl:choose>
<xsl:when test="$UoM = 'PCE'">
<xsl:value-of select="'12'"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="'999'"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>