как динамически добавлять несколько позиций «SalesReceiptLineAdd» при добавлении товарного чека с помощью qbxml с php?

У меня есть собственное программное обеспечение, и я хочу добавить товарный чек из моей базы данных в Quickbooks pro 2020. Таким образом, у меня есть торговый чек с более чем одной позицией внутри. Как я могу передать больше строк в qbXML с помощью PHP при возврате запроса xml?

Это мой код. Я использую структуру Кейта Палмера.

В этом я добавил SalesReceiptLineAdd для нескольких элементов статически. Но как его создать динамически? то есть, как мне зациклить тег SalesReceiptLineAdd несколько раз?

function _quickbooks_salesreceipt_add_request($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale)
{
    /*
        <CustomerRef>
            <ListID>80003579-1231522938</ListID>
        </CustomerRef>  
    */

    $xml = '<?xml version="1.0" encoding="utf-8"?>
        <?qbxml version="7.0"?>
        <QBXML>
            <QBXMLMsgsRq onError="stopOnError">
                <SalesReceiptAddRq requestID="' . $requestID . '">
                    <SalesReceiptAdd>
                        <CustomerRef>
                            <ListID>80000020-1573225608</ListID>
                        </CustomerRef>
                        <TxnDate>2019-11-14</TxnDate>
                        <RefNumber>34</RefNumber>
                        <BillAddress>
                            <Addr1>Keith Palmer Jr.</Addr1>
                            <Addr3>134 Stonemill Road</Addr3>
                            <City>Storrs-Mansfield</City>
                            <State>CT</State>
                            <PostalCode>06268</PostalCode>
                            <Country>United States</Country>
                        </BillAddress>
                        <SalesReceiptLineAdd>
                            <ItemRef>
                                <ListID>80000030-1573662395</ListID>
                            </ItemRef>
                            <Desc>$25.00 gift certificate</Desc>
                            <Quantity>1</Quantity>
                            <Rate>25.00</Rate>
                            <SalesTaxCodeRef>
                                <FullName>tax</FullName>
                            </SalesTaxCodeRef>
                        </SalesReceiptLineAdd>
                        <SalesReceiptLineAdd>
                            <ItemRef>
                                <ListID>80000031-1573810312</ListID>
                            </ItemRef>
                            <Desc>The Hitchhiker\'s Guide to the Galaxy</Desc>
                            <Quantity>1</Quantity>
                            <Rate>25.00</Rate>
                            <SalesTaxCodeRef>
                                <FullName>tax</FullName>
                            </SalesTaxCodeRef>
                        </SalesReceiptLineAdd>
                    </SalesReceiptAdd>
                </SalesReceiptAddRq>
            </QBXMLMsgsRq>
        </QBXML>';

    return $xml;


}

person GAURAV DESHPANDE    schedule 15.11.2019    source источник


Ответы (1)


Для этого вы можете использовать стандартную конкатенацию строк и цикл for.

Например, что-то вроде этого будет повторять элемент строки 5 раз (для 5 строк):

function _quickbooks_salesreceipt_add_request($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale)
{
    /*
        <CustomerRef>
            <ListID>80003579-1231522938</ListID>
        </CustomerRef>  
    */

    $xml = '<?xml version="1.0" encoding="utf-8"?>
        <?qbxml version="7.0"?>
        <QBXML>
            <QBXMLMsgsRq onError="stopOnError">
                <SalesReceiptAddRq requestID="' . $requestID . '">
                    <SalesReceiptAdd>
                        <CustomerRef>
                            <ListID>80000020-1573225608</ListID>
                        </CustomerRef>
                        <TxnDate>2019-11-14</TxnDate>
                        <RefNumber>34</RefNumber>
                        <BillAddress>
                            <Addr1>Keith Palmer Jr.</Addr1>
                            <Addr3>134 Stonemill Road</Addr3>
                            <City>Storrs-Mansfield</City>
                            <State>CT</State>
                            <PostalCode>06268</PostalCode>
                            <Country>United States</Country>
                        </BillAddress>';
            
    for ($i = 0; $i <= 5; $i++)
    {
        $xml .= '
          <SalesReceiptLineAdd>
                            <ItemRef>
                                <ListID>80000031-1573810312</ListID>
                            </ItemRef>
                            <Desc>The Hitchhiker\'s Guide to the Galaxy</Desc>
                            <Quantity>1</Quantity>
                            <Rate>25.00</Rate>
                            <SalesTaxCodeRef>
                                <FullName>tax</FullName>
                            </SalesTaxCodeRef>
                        </SalesReceiptLineAdd>';
    }
                        
    $xml .= '
                    </SalesReceiptAdd>
                </SalesReceiptAddRq>
            </QBXMLMsgsRq>
        </QBXML>';

    return $xml;


}

Я бы также рекомендовал обратиться к документации по PHP по следующим основным темам:

person Keith Palmer Jr.    schedule 16.11.2019