установка переменных для добавления нескольких элементов в xsl pdf invoice creator - ошибки - PullRequest
0 голосов
/ 13 февраля 2020

Спасибо за оригинальные комментарии и ответы!

В соответствии с просьбой я отредактировал вопрос и разбил свой код на более мелкие куски, чтобы его было легче понять, и, надеюсь, кто-то может разобраться, где Я ошибаюсь?

CRM использует XSL v.1.0 для создания пользовательских шаблонов pdf, используя поля из базы данных для создания предложений, счетов-фактур и заказов (используя один и тот же шаблон basi c и фильтрацию в зависимости от типа документа ).

Для каждого типа документа (цитата, заказ, счет и т. Д. c) есть отдельные поля, поэтому я пытался отфильтровать по типу документа, а также по каждой строке, чтобы проверить, является ли сумма не был нулевым (поэтому я могу добавить настраиваемые поля в макет счета, если применяется скидка)

Эта часть кода анализируется нормально, но не дает правильных ответов (см. ниже)

<?xml version="1.0" encoding="UTF-8"?>
<xslt:stylesheet xmlns:date="http://exslt.org/dates-and-times" xmlns:str="http://exslt.org/strings" xmlns:xslt="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xf="http://www.ecrion.com/xf/1.0" xmlns:xc="http://www.ecrion.com/2008/xc" xmlns:xfd="http://www.ecrion.com/xfd/1.0" xmlns:svg="http://www.w3.org/2000/svg" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" extension-element-prefixes="date str">
  <xslt:output indent="yes" encoding="utf-8"/>
  <xsl:template match="/">


                <!-- == REGIONAL DISCOUNT == -->
        <xsl:variable name="regional_discount_1">
            <xsl:choose>
                    <xsl:when test="sum(/hash/order_line_items/*/additional_discount_1_percent[@amount &gt; 0]) &gt; 0">
                    <xsl:value-of select="1"/> 
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="0"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable> 

        <!-- == EARLY PAYMENT OR PRICE DISCOUNT == -->
        <xsl:variable name="price_discount">
            <xsl:choose>
                    <xsl:when test="sum(/hash/order_line_items/*/hash/discount_percent[@amount &gt; 0]) &gt; 0">
                    <xsl:value-of select="1"/> 
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="0"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

        <!-- == TOTAL DISCOUNTS // NB BAND RELIEF NEEDS TWO COLUMNS == -->
        <xsl:variable name="total_discount_columns">
            <xsl:choose>
                <xsl:when test="$regional_discount_1 + $price_discount = 0">
                    <xsl:value-of select="0"/> 
                </xsl:when>;
                <xsl:when test="$regional_discount_1 + $price_discount = 1">
                    <xsl:value-of select="1"/> 
                </xsl:when>
                <xsl:when test="$regional_discount_1 + $price_discount = 2">
                    <xsl:value-of select="2"/> 
                </xsl:when>
                <xsl:when test="$regional_discount_1 + $price_discount = 3">
                    <xsl:value-of select="3"/> 
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="0"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable>

Однако код для этой переменной (@band_relief) не анализируется в CRM (но не выдает никаких сообщений об ошибках!), Так как его пришлось удалить из кода, поэтому не уверен, что с этим не так:

        <xsl:variable name="band_relief">
            <xsl:choose>
                <xsl:when test="(sum(/hash/cf_customer_quotation_line_item_band_relief) != 0 and /hash/text/Collection_Class_Name = &quot;Private::Accounting::Quotation&quot;)
                or (sum(/hash/cf_customer_order_line_item_band_relief) != 0 and /hash/text/Collection_Class_Name = &quot;Private::Accounting::SalesOrder&quot;)
                or (sum(/hash/cf_customer_invoice_line_item_band_relief) != 0 and /hash/text/Collection_Class_Name = &quot;Private::Invoice:Quotation&quot;)
                or (sum(/hash/cf_customer_credit_note_line_item_band_relief) != 0 and /hash/text/Collection_Class_Name = &quot;Private::CreditNote::Quotation&quot;)">
                    <xsl:value-of select="1"/> 
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="0"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:variable> 

Если какая-либо из товарных линий имеет одну из трех скидок, я хочу, чтобы переменная отображалась как 1, иначе 0, чтобы я мог добавить дополнительные столбцы к макет счета-фактуры.

Используя приведенный ниже код, мне удалось извлечь данные из трех позиций счета-фактуры, и существует скидка для каждого типа, но для другого продукта, однако переменная @band_relief не анализируется при хотя я все еще могу извлечь данные, как показано ниже.

  <fo:block padding-top="0.45cm" font-size="9pt" padding-bottom="0cm">
       <fo:inline>
        $regional_discount_1 <xsl:value-of select="$regional_discount_1"/>
        $price_discount <xsl:value-of select="$price_discount"/>
        </fo:inline>
     </fo:block>
     <fo:block padding-top="0.45cm" font-size="9pt" padding-bottom="0cm">
        <xsl:for-each select = "/hash/order_line_items/order_line_item">
        <fo:block padding-top="0.45cm" font-size="9pt" padding-bottom="0cm">
        <fo:inline>
        Band Relief <xsl:value-of select="sum(cf_customer_invoice_line_item_band_relief/@amount)"/>
        Regional Discount <xsl:value-of select="sum(additional_discount_1_percent)"/>
        Price Discount <xsl:value-of select="sum(discount_percent)"/>
        </fo:inline>
        </fo:block>
        </xsl:for-each> 
      </fo:block>

, который дает следующие выходные данные в формате PDF:

Данные

Облегчение полосы 302,5 Региональная скидка 50 Цена со скидкой 0

Band Relief 10 Региональная скидка 0 Цена со скидкой 0

Band Relief 0 Региональная скидка 0 Цена со скидкой 5

Фактические результаты:

$ band_relief (Doesn 'работа') $ Regional_discount 0 $ Price_Discount 0

Ожидается (так как скидка существует!)

$ band_relief 1 $ Regional_Discount 1 $ Price_discount 1

Я просто не ' Что не так с кодом, так как я могу извлекать данные построчно, но просто не могу их суммировать, так как не могу найти способ суммирования столбцов в переменной, которая работает.

Запись; поля могут быть процентами, валютой или нулевыми значениями.

Я также не совсем уверен, что означает @amount, но предположим, что он просто извлекает числовое значение - я только что скопировал его, фактически не зная, что он делает !

Буду признателен за любую дополнительную помощь.

Спасибо

...