WooCommerce: экспорт заказов с налоговыми строками

Dec 01 2020

Я хочу экспортировать все свои заказы с разделением строк налога по ставке налога.

Например: заказ может иметь налоговые ставки 7% и 19%. Если в заказе есть товары с обеими налоговыми ставками, я получаю только одну комбинированную сумму налога.

Допустим, в заказе два товара по 100 евро каждый. Это будут следующие налоги:

  • 100 € по сниженной ставке: 7 €
  • 100 € по ставке по умолчанию: 19 €
  • вместе с налогами: 26 €

Я использую следующий код (отрывок) для экспорта данных заказа:

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

После получения данных мне нужно сохранить их в массиве:

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

Мне нужен фиксированный столбец (как указано $order_date_createdвыше) для каждой налоговой ставки.

Нравиться:

  • Графа 1: ставка налога - 7%.
  • Графа 2: сумма налога - 7 €
  • Графа 3: ставка налога - 19%.
  • Графа 4: сумма налога - 19 €

Если для налоговой ставки нет суммы, столбец может быть пустым.

Я знаю, что есть свойство order с именем tax_lines. Но это массив, и я не знаю, как его использовать. В собственности tax_linesесть несколько собственных налоговых линий .

Кто-нибудь знает, как получить эти значения из заказа?

РЕДАКТИРОВАТЬ: я нашел фрагмент в другом вопросе :

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>';
        }

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

РЕДАКТИРОВАТЬ 2: После еще нескольких копаний я нашел WC_Order_Item_Tax объект, в котором есть налоговые элементы заказа. Поэтому я попытался использовать эти данные, но это огромный объект, и я не уверен, как выбрать данные и показать их в правом столбце.

Выглядит это так (есть еще много всего). И мне нужно выбрать налог, rate_idнапример:

[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] => 
                )

Ответы

1 LoicTheAztec Dec 02 2020 at 01:27

Вы можете использовать его таким образом, возможно, после этой строки кода

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

Затем цикл foreach с элементами налоговой ставки и использованием WC_Taxметодаget_rate_percent() для получения процентной ставки налога следующим образом:

// 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
    );
}

Связанный:

  • Как получить информацию о налогах и ставках заказа в WooCommerce?
  • Получить отдельные итоговые суммы налогов по Заказу с указанием налогового класса