Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get refunded orders and refunded order items details in Woocommerce 3

I see when I look at an order it will show the specific item that was refunded if the whole order wasn't.

Is there a way to find using the WC_Order_Item_Product if an item was refunded? Also, is there a way to get the discount amount that shows up below the item in the order view?

I'm currently doing it manually but if there is a function for it already, I would rather use it.

like image 666
twg_ Avatar asked Sep 25 '18 04:09

twg_


People also ask

What is refund order?

When you refund an order, you send payment back to the customer. You can refund an entire order or only part of an order. You can also refund an order without creating a return, but you can't create a return after a refund has been issued. In some circumstances, you can cancel an order and issue a refund.


1 Answers

To get refunded orders you could use some dedicated WC_Order methods like the following ones that have Item Id as argument:

$item_qty_refunded = $order->get_qty_refunded_for_item( $item_id ); // Get the refunded amount for a line item.

$item_total_refunded = $order->get_total_refunded_for_item( $item_id ); // Get the refunded amount for a line item.

You can access an array WC_Order_Refund Objects for this order using get_refunds() method:

  • For each refund, you can use the WC_Order_Refund methods.
  • For each refund, you can access items using WC_Abstract_Order method get_items() that will give you the refunded items for the current Order refund.
  • Each refund "line" item is a WC_Order_Item_Product (with negative values in general) see this related answer: Get Order items and WC_Order_Item_Product in WooCommerce 3

So you can use the following example code:

// Get the WC_Order Object instance (from the order ID)
$order = wc_get_order( $order_id );

// Get the Order refunds (array of refunds)
$order_refunds = $order->get_refunds();

// Loop through the order refunds array
foreach( $order_refunds as $refund ){
    // Loop through the order refund line items
    foreach( $refund->get_items() as $item_id => $item ){

        ## --- Using WC_Order_Item_Product methods --- ##

        $refunded_quantity      = $item->get_quantity(); // Quantity: zero or negative integer
        $refunded_line_subtotal = $item->get_subtotal(); // line subtotal: zero or negative number
        // ... And so on ...

        // Get the original refunded item ID
        $refunded_item_id       = $item->get_meta('_refunded_item_id'); // line subtotal: zero or negative number
    }
}

To get the order items discounted values that appear in admin order edit pages you will use the following code:

// Get the WC_Order Object instance (from the order ID)
$order = wc_get_order($order_id);

// Loop through the order refund line items
foreach( $order->get_items() as $item_id => $item ){
    $line_subtotal     = $item->get_subtotal();
    $line_total        = $item->get_total();
    $line_subtotal_tax = $item->get_subtotal_tax();
    $line_total_tax    = $item->get_total_tax();
    
    // Get the negative discount values
    $line_discount     = $line_total - $line_subtotal; // (Negative number)
    $line_discount_tax = $line_total_tax - $line_subtotal_tax; // (Negative number)
}

Related Answers:

  • How to get WooCommerce order details
  • Get Order items and WC_Order_Item_Product in WooCommerce 3
  • Woocommerce - Getting the order item price and quantity.
like image 77
LoicTheAztec Avatar answered Sep 16 '22 18:09

LoicTheAztec