WooCommerce: obtenha exportação de pedidos com linhas de impostos

Dec 01 2020

Desejo exportar todos os meus pedidos com as linhas tributárias separadas por alíquota.

Por exemplo: Um pedido pode ter as taxas de imposto de 7% e 19%. Se o pedido tiver produtos com ambas as taxas de imposto, recebo apenas um valor de imposto combinado.

Digamos que o pedido tenha dois produtos por 100 € cada. Haveria os seguintes impostos:

  • 100 € com taxa reduzida: 7 €
  • 100 € à taxa padrão: 19 €
  • impostos combinados: 26 €

Estou usando o seguinte código (trecho) para exportar dados do pedido:

$order_data = $order->get_data(); // The Order data 
$order_date_created = $order_data['date_created']->date('d.m.Y'); // Example for oder creation date

Depois de obter os dados, preciso armazená-los em uma matriz:

$custom_data = array( 'custom_order_date_created' => $custom_order_date_created,
)

O que eu preciso é de uma coluna fixa (como a $order_date_createdacima) para cada taxa de imposto.

Como:

  • Coluna 1: taxa de imposto - 7%
  • Coluna 2: valor do imposto - 7 €
  • Coluna 3: taxa de imposto - 19%
  • Coluna 4: valor do imposto - 19 €

Se não houver valor para uma taxa de imposto, a coluna pode ficar vazia.

Eu sei que existe uma propriedade de pedido chamada tax_lines. Mas é um array e não sei como usá-lo. A propriedade tax_linestem algumas propriedades com linhas fiscais próprias .

Alguém tem ideia de como obter esses valores de um pedido?

EDITAR: Encontrei um snippet em outra pergunta :

foreach ( $order->get_tax_totals() as $rate_code => $tax ) {
            $tax_rate_id = $tax->rate_id;
            $tax_label = $tax->label;
            $tax_amount = $tax->amount;
            $tax_f_amount = $tax->formatted_amount;
            $compound = $tax->is_compound;
            echo '<tr><td>' . $tax_label . ': </td><td>' . $tax_f_amount . '</td></tr>';
        }

Parece certo, mas não tenho certeza de como usá-lo com meu exemplo de código e armazená-lo em meu array.

EDIT 2: Depois de mais algumas escavações, encontrei o WC_Order_Item_Tax objeto que contém os itens de imposto do pedido. Tentei usar esses dados, mas é um objeto enorme e não tenho certeza de como selecionar os dados e mostrá-los na coluna certa.

É assim (há muito mais). E preciso selecionar o imposto, por rate_idexemplo:

[4543] => WC_Order_Item_Tax Object
        (
            [extra_data:protected] => Array
                (
                    [rate_code] => 
                    [rate_id] => 0
                    [label] => 
                    [compound] => 
                    [tax_total] => 0
                    [shipping_tax_total] => 0
                    [rate_percent] => 
                )

            [data:protected] => Array
                (
                    [order_id] => 11244
                    [name] => 
                    [rate_code] => DE-MWST.-1
                    [rate_id] => 1
                    [label] => MwSt.
                    [compound] => 1
                    [tax_total] => 7.54
                    [shipping_tax_total] => 0
                    [rate_percent] => 16
                )

            [cache_group:protected] => order-items
            [meta_type:protected] => order_item
            [object_type:protected] => order_item
            [id:protected] => 4543
            [changes:protected] => Array
                (
                )

            [object_read:protected] => 1
            [default_data:protected] => Array
                (
                    [order_id] => 0
                    [name] => 
                    [rate_code] => 
                    [rate_id] => 0
                    [label] => 
                    [compound] => 
                    [tax_total] => 0
                    [shipping_tax_total] => 0
                    [rate_percent] => 
                )

Respostas

1 LoicTheAztec Dec 02 2020 at 01:27

Você pode usá-lo desta forma após esta linha de código

$custom_data = array( 'custom_order_date_created' => $custom_order_date_created,
)

Em seguida, o loop foreach com itens de taxa de imposto e usando o WC_Taxmétodoget_rate_percent() para obter a porcentagem da taxa de imposto da seguinte forma:

// Loop through order tax items
foreach ( $order->get_tax_totals() as $rate_code => $tax ) { // Store it in the array $custom_data['taxes'][] = array(
        'tax_rate'   =>  WC_Tax::get_rate_percent($tax->rate_id), // <=== the tax rate percentage 'tax_amount' => $tax->formatted_amount
    );
}

Relacionado:

  • Como obter detalhes de impostos e taxas de pedidos no WooCommerce?
  • Obtenha os valores totais de impostos do pedido separados com classe de imposto