WooCommerce: obtenha exportação de pedidos com linhas de impostos
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_created
acima) 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_lines
tem 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_id
exemplo:
[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
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