<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="2.0">
    <xsl:strip-space elements="*" />
    <xsl:output method="xml" indent="yes" encoding="UTF-8"
        standalone="yes" />

    <xsl:template match="/">

        <xsl:variable name="date"
            select="/data/document/item[@name='$modified']/value" />
			
			<Invoices version="2020.2"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

            <Message>
                <SenderID>Imixs-Office-Workflow</SenderID>
                <ReceiverID>Cargosoft</ReceiverID>
                <MessageID>
                    <xsl:value-of select="/data/document/item[@name='$uniqueid']/value"
                    />
                </MessageID>
                <MessageDate>
                    <DateTime>
                        <xsl:value-of select="$date" />
                    </DateTime>
                </MessageDate>
            </Message>

            <xsl:apply-templates
                select="/data/document[normalize-space(item[@name = '$workflowgroup']/value) =
			'Cargosoft-Export']" />
        </Invoices>

    </xsl:template>

    <!-- This template builds invoice info -->
    <xsl:template
        match="/data/document[normalize-space(item[@name = '$workflowgroup']/value) =
			'Cargosoft-Export']">

        <xsl:variable name="date" select="item[@name='$modified']/value" />
			<xsl:variable
            name="currency" select="item[@name='invoice.currency']/value" />
			
			
			<Invoice>
            <InvoiceHeader>
                <Client>
                    <Codes>
                        <!-- Als Typ muss „cs“ übermittelt werden und im Code wird
			dann der Cargosoft Mandant erwartet. -->
                        <Code Type="cs">005</Code>
                    </Codes>
                </Client>
                <!-- Hier muss eine eindeutige Belegnummer für jeden einzelnen
			Beleg übermittelt werden. Es muss sich um eine Nummer
			handeln, die pro Beleg hochgezählt wird und darf sich nicht
			überschneiden mit dem CargoSoft Belegnummernkreis.
			Daher den Nummernkreis vorher mit CargoSoft absprechen. -->
                <InvoiceNumber>
                    <xsl:value-of select="item[@name='numsequencenumber']/value"
                    />
                </InvoiceNumber>

                <!-- Belegart - bei Gutschriften 'CREDIT' andernfalls 'INVOICE -->
                <InvoiceType>
                    <Codes>
                        <xsl:choose>
                            <xsl:when test="item[@name='payment.type']/value = 'credit'">
                                <Code Type="cs">CREDIT</Code>
                            </xsl:when>
                            <xsl:otherwise>
                                <Code Type="cs">INVOICE</Code>
                            </xsl:otherwise>
                        </xsl:choose>
                    </Codes>
                </InvoiceType>
                <InvoiceCurrency>
                    <Codes>
                        <Code Type="cs">
                            <xsl:value-of select="$currency" />
                        </Code>
                    </Codes>
                </InvoiceCurrency>
                <InvoiceAmount>
                    <NetAmount>
                        <Amount>
                            <Currency>
                                <Codes>
                                    <Code Type="cs">
                                        <xsl:value-of select="$currency" />
                                    </Code>
                                </Codes>
                            </Currency>
                            <Value>
                                <xsl:value-of select="item[@name='order.total.netto']/value"
                                />
                            </Value>
                            <!-- exchange rate nur ausgeben wenn vorhanden -->
                            <xsl:if
                                test="string-length(item[@name='invoice.exchangerate']/value) >0">
                                <ExchangeRate>
                                    <xsl:value-of select="item[@name='invoice.exchangerate']/value"
                                    />
                                </ExchangeRate>
                            </xsl:if>
                        </Amount>
                    </NetAmount>
                    <VATInformation>
                        <VATAmount>
                            <Amount>
                                <Currency>
                                    <Codes>
                                        <Code Type="cs">
                                            <xsl:value-of select="$currency" />
                                        </Code>
                                    </Codes>
                                </Currency>
                                <Value>
                                    <xsl:value-of select="item[@name='order.total.tax']/value"
                                    />
                                </Value>
                                <!-- exchange rate nur ausgeben wenn vorhanden -->
                                <xsl:if
                                    test="string-length(item[@name='invoice.exchangerate']/value) >
			0">
                                    <ExchangeRate>
                                        <xsl:value-of
                                            select="item[@name='invoice.exchangerate']/value"
                                        />
                                    </ExchangeRate>
                                </xsl:if>
                            </Amount>
                        </VATAmount>
                    </VATInformation>
                </InvoiceAmount>
                <CollectionInvoice>false</CollectionInvoice>
                <xsl:if test="string-length(item[@name='invoice.period']/value) > 0">
                    <BookingPeriod>
                        <xsl:value-of select="item[@name='invoice.period']/value"
                        />
                    </BookingPeriod>
                </xsl:if>
                <Booked>false</Booked>
                <InvoiceDate>
                    <xsl:value-of select="item[@name='invoice.date']/value"
                    />
                </InvoiceDate>


                <InvoiceAddress type="CN">
                    <Codes>
                        <Code Type="cs">
                            <xsl:value-of select="item[@name='cdtr.number']/value"
                            />
                        </Code>
                    </Codes>
                </InvoiceAddress>

                <References>
                    <Reference type="cs">
                        <xsl:value-of select="item[@name='invoice.number']/value"
                        />
                    </Reference>
                </References>

                <!-- Attachements -->
                <xsl:if test="item[@name='$file.count']/value > 0">
                    <Attachments>
                        <xsl:for-each
                            select="item[@name='$file']/value/item">
                            <Attachment>
                                <xsl:attribute name="id"><xsl:value-of
                                        select="./value/item[@name='md5checksum']/value" /></xsl:attribute>
                                <xsl:attribute name="version">1</xsl:attribute>
                                <Filename>
                                    <xsl:value-of select="lower-case(./@name)"
                                    />
                                </Filename>
                                <Description>Imixs-Office-Workflow</Description>
                                <Content>
                                    <xsl:value-of select="./value[2]" />
                                </Content>
                            </Attachment>
                        </xsl:for-each>
                    </Attachments>
                </xsl:if>

            </InvoiceHeader>
            <InvoiceRows>

                <xsl:for-each
                    select="item[@name='_childitems']/value">
                    <InvoiceRow>
                        <Row>
                            <xsl:value-of select="./item[@name='numpos']/value" />
                        </Row>
                        <FileNumber>
                            <xsl:value-of select="./item[@name='name']/value"
                            />
                        </FileNumber>
                        <InvoiceAmount>
                            <NetAmount>
                                <Amount>
                                    <Currency>
                                        <Codes>
                                            <Code Type="cs">
                                                <xsl:value-of select="$currency" />
                                            </Code>
                                        </Codes>
                                    </Currency>
                                    <Value>
                                        <xsl:value-of select="./item[@name='amount']/value"
                                        />
                                    </Value>
                                </Amount>
                            </NetAmount>
                            <VATInformation>
                                <VAT>
                                    <Codes>
                                        <Code Type="cs">
                                            <xsl:value-of select="./item[@name='tax']/value"
                                            />
                                        </Code>
                                    </Codes>
                                </VAT>
                            </VATInformation>
                        </InvoiceAmount>
                        <ActivityType>
                            <Codes>
                                <Code Type="cs">
                                    <xsl:value-of select="./item[@name='category']/value"
                                    />
                                </Code>
                            </Codes>
                        </ActivityType>
                    </InvoiceRow>
                </xsl:for-each>
            </InvoiceRows>
        </Invoice>

    </xsl:template>


</xsl:stylesheet>