Handle partial/full refund for orders containing free items
Also adds helper method to determine if such as free item exists or not. Closes #9460
This commit is contained in:
parent
871c8591f0
commit
5b6e16682c
|
@ -1941,24 +1941,31 @@ abstract class WC_Abstract_Order {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the order contains a downloadable product.
|
* Returns true if the order contains a downloadable product.
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function has_downloadable_item() {
|
public function has_downloadable_item() {
|
||||||
|
|
||||||
$has_downloadable_item = false;
|
|
||||||
|
|
||||||
foreach ( $this->get_items() as $item ) {
|
foreach ( $this->get_items() as $item ) {
|
||||||
|
|
||||||
$_product = $this->get_product_from_item( $item );
|
$_product = $this->get_product_from_item( $item );
|
||||||
|
|
||||||
if ( $_product && $_product->exists() && $_product->is_downloadable() && $_product->has_file() ) {
|
if ( $_product && $_product->exists() && $_product->is_downloadable() && $_product->has_file() ) {
|
||||||
$has_downloadable_item = true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return $has_downloadable_item;
|
/**
|
||||||
|
* Returns true if the order contains a free product
|
||||||
|
* @since 2.5.0
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function has_free_item() {
|
||||||
|
foreach ( $this->get_items() as $item ) {
|
||||||
|
if ( ! $item['line_total'] ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2264,7 +2264,7 @@ class WC_AJAX {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Trigger notifications and status changes
|
// Trigger notifications and status changes
|
||||||
if ( $order->get_remaining_refund_amount() > 0 || $order->get_remaining_refund_items() > 0 ) {
|
if ( $order->get_remaining_refund_amount() > 0 || ( $order->has_free_item() && $order->get_remaining_refund_items() > 0 ) ) {
|
||||||
/**
|
/**
|
||||||
* woocommerce_order_partially_refunded
|
* woocommerce_order_partially_refunded
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue