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

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

Например: заказ может иметь налоговые ставки 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 евро.

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

Я знаю, что есть свойство порядка под названием 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] => 
                )

person Cray    schedule 01.12.2020    source источник


Ответы (1)


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

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

Затем цикл foreach с элементами налоговой ставки и использованием _ 2_ метод 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
    );
}

Связанный:

person LoicTheAztec    schedule 01.12.2020
comment
Мой ответ здесь просто отвечает на ваш первоначальный вопрос, как получить процентную ставку налога и соответствующие суммы ... Я не использую функцию экспорта woocommerce по умолчанию ... $ order- ›get_tax_totals () дает массив объектов WC_Order_Item_Tax так же, как $order->get_items('tax') ... - person LoicTheAztec; 01.12.2020
comment
Понятно, есть ли возможность объединить массив $custom_data['taxes'][] с массивом $custom_data? - person Cray; 01.12.2020
comment
@Cray Я не знаю, что для этого нужно в массиве функций экспорта WC. - person LoicTheAztec; 01.12.2020