Возврат товара в порядке 1x программно в WooCommerce - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь создать частичное возмещение за заказ программно.Также важно рассчитать налог, но пока кажется, что ничего не работает правильно, и я не могу понять, почему.

Я хочу нажать кнопку, и функция "ceb_wc_refund_order" будет вызываться с $ order_id,количество и причина.$ qty обычно равен 1. Проблема в том, что в заказе всегда содержится только ОДИН элемент, но, например, 3 раза.Теперь я хочу вернуть только один из этих пунктов.

Я знаю, как сделать это вручную, поэтому в основном я хочу добиться следующего, но программно: enter image description here

В данный момент код, по-видимому, успешно создает возмещение, а также количество товара является правильным.Но сумма возмещения - это цена товара * количество, а также налог не возвращается.

Я знаю, что мой код пока не приводит к моей цели.Я не нашел много в интернете об этом ... Вы можете мне помочь?

function ceb_wc_refund_order( $order_id, $qty, $refund_reason = '') {

$order  = wc_get_order( $order_id );
// If it's something else such as a WC_Order_Refund, we don't want that.
if( ! is_a( $order, 'WC_Order') ) {
    return new WP_Error( 'wc-order', __( 'Provided ID is not a WC Order', 'yourtextdomain' ) );
}

if( 'refunded' == $order->get_status() ) {
    return new WP_Error( 'wc-order', __( 'Order has been already refunded', 'yourtextdomain' ) );
}
// Get Items
$order_items = $order->get_items();
// Refund Amount
$refund_amount = 0;
// Prepare line items which we are refunding
$line_items = array();


if ( $order_items ) {
    foreach( $order_items as $item_id => $item ) {
        $item_meta = $order->get_item_meta($item_id);
        $tax_data = $item_meta['_line_tax'];
        $refund_tax = $tax_data;

        $refund_amount = wc_format_decimal($refund_amount) + wc_format_decimal($item_meta['_line_total'][0]);
        $line_items[$item_id] = array(
            'qty' => $qty,
            'refund_total' => wc_format_decimal($item_meta['_line_total'][0]),
            'refund_tax' => $refund_tax);
    }
}

// ...
$refund = wc_create_refund( array(
    'amount'         => $refund_amount,
    'reason'         => $refund_reason,
    'order_id'       => $order_id,
    'line_items'     => $line_items,
    'refund_payment' => false
));
return $refund;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...