parent
dcf4a4e5a8
commit
11835826de
File diff suppressed because one or more lines are too long
|
@ -695,6 +695,9 @@ ul.wc_coupon_list_block {
|
||||||
h3 small {
|
h3 small {
|
||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
|
.amount {
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.woocommerce_order_items_wrapper {
|
.woocommerce_order_items_wrapper {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
|
|
@ -582,10 +582,11 @@ jQuery( function ( $ ) {
|
||||||
if ( window.confirm( woocommerce_admin_meta_boxes.i18n_do_refund ) ) {
|
if ( window.confirm( woocommerce_admin_meta_boxes.i18n_do_refund ) ) {
|
||||||
var refund_amount = $( 'input#refund_amount' ).val();
|
var refund_amount = $( 'input#refund_amount' ).val();
|
||||||
var refund_reason = $( 'input#refund_reason' ).val();
|
var refund_reason = $( 'input#refund_reason' ).val();
|
||||||
var refund_qty = $.map( $( 'input[type=number][name^=order_item_refund_qty]' ), function( item ) {
|
var refund_qty = {};
|
||||||
var result = [];
|
$( 'input[type=number][name^=order_item_refund_qty]' ).each( function( index, item ) {
|
||||||
result.push( $( item ).closest( 'tr.item,tr.fee' ).data( 'order_item_id' ), item.value );
|
if ( $( item ).closest( 'tr' ).data( 'order_item_id' ) ) {
|
||||||
return result;
|
refund_qty[ $( item ).closest( 'tr' ).data( 'order_item_id' ) ] = item.value;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
var data = {
|
var data = {
|
||||||
action: 'woocommerce_refund_line_items',
|
action: 'woocommerce_refund_line_items',
|
||||||
|
@ -602,6 +603,8 @@ jQuery( function ( $ ) {
|
||||||
} else if ( response.error ) {
|
} else if ( response.error ) {
|
||||||
window.alert( response.error );
|
window.alert( response.error );
|
||||||
removeOrderItemsLoading();
|
removeOrderItemsLoading();
|
||||||
|
} else {
|
||||||
|
console.log(response);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1792,11 +1792,10 @@ class WC_AJAX {
|
||||||
$order_id = absint( $_POST['order_id'] );
|
$order_id = absint( $_POST['order_id'] );
|
||||||
$refund_amount = sanitize_text_field( $_POST['refund_amount'] );
|
$refund_amount = sanitize_text_field( $_POST['refund_amount'] );
|
||||||
$refund_reason = sanitize_text_field( $_POST['refund_reason'] );
|
$refund_reason = sanitize_text_field( $_POST['refund_reason'] );
|
||||||
$refund_qty = json_decode( sanitize_text_field( stripslashes( $_POST['refund_qty'] ) ) );
|
$refund_qty = json_decode( sanitize_text_field( stripslashes( $_POST['refund_qty'] ) ), true );
|
||||||
$api_refund = $_POST['api_refund'] === 'true' ? true : false;
|
$api_refund = $_POST['api_refund'] === 'true' ? true : false;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
// Validate that the refund can occur
|
// Validate that the refund can occur
|
||||||
$order = get_order( $order_id );
|
$order = get_order( $order_id );
|
||||||
$max_refund = $order->get_total() - $order->get_total_refunded();
|
$max_refund = $order->get_total() - $order->get_total_refunded();
|
||||||
|
@ -1807,9 +1806,10 @@ class WC_AJAX {
|
||||||
|
|
||||||
// Create the refund object
|
// Create the refund object
|
||||||
$refund = wc_create_refund( array(
|
$refund = wc_create_refund( array(
|
||||||
'amount' => $refund_amount,
|
'amount' => $refund_amount,
|
||||||
'reason' => $refund_reason,
|
'reason' => $refund_reason,
|
||||||
'order_id' => $order_id
|
'order_id' => $order_id,
|
||||||
|
'line_item_qty' => $refund_qty
|
||||||
) );
|
) );
|
||||||
|
|
||||||
if ( is_wp_error( $refund ) ) {
|
if ( is_wp_error( $refund ) ) {
|
||||||
|
|
|
@ -526,10 +526,11 @@ function wc_ship_to_billing_address_only() {
|
||||||
*/
|
*/
|
||||||
function wc_create_refund( $args = array() ) {
|
function wc_create_refund( $args = array() ) {
|
||||||
$default_args = array(
|
$default_args = array(
|
||||||
'amount' => '',
|
'amount' => '',
|
||||||
'reason' => null,
|
'reason' => null,
|
||||||
'order_id' => 0,
|
'order_id' => 0,
|
||||||
'refund_id' => 0
|
'refund_id' => 0,
|
||||||
|
'line_item_qty' => array()
|
||||||
);
|
);
|
||||||
|
|
||||||
$args = wp_parse_args( $args, $default_args );
|
$args = wp_parse_args( $args, $default_args );
|
||||||
|
@ -563,11 +564,50 @@ function wc_create_refund( $args = array() ) {
|
||||||
return $refund_id;
|
return $refund_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default refund meta data
|
|
||||||
if ( ! $updating ) {
|
if ( ! $updating ) {
|
||||||
|
// Default refund meta data
|
||||||
update_post_meta( $refund_id, '_refund_amount', wc_format_decimal( $args['amount'] ) );
|
update_post_meta( $refund_id, '_refund_amount', wc_format_decimal( $args['amount'] ) );
|
||||||
}
|
|
||||||
|
|
||||||
|
// Negative line items
|
||||||
|
if ( sizeof( $args['line_item_qty'] ) > 0 ) {
|
||||||
|
$order = get_order( $args['order_id'] );
|
||||||
|
$order_items = $order->get_items();
|
||||||
|
$refund = get_order( $refund_id );
|
||||||
|
$order_taxes = array();
|
||||||
|
foreach ( $args['line_item_qty'] as $refund_item_id => $refund_qty ) {
|
||||||
|
if ( isset( $order_items[ $refund_item_id ] ) && $refund_qty ) {
|
||||||
|
$refund_item = $order_items[ $refund_item_id ];
|
||||||
|
$product = $order->get_product_from_item( $refund_item );
|
||||||
|
$qty = $refund_item['qty'];
|
||||||
|
|
||||||
|
$args = array();
|
||||||
|
$args['totals']['subtotal'] = ( ( $refund_item['line_subtotal'] / $qty ) * $refund_qty ) * -1;
|
||||||
|
$args['totals']['subtotal_tax'] = ( ( $refund_item['line_subtotal_tax'] / $qty ) * $refund_qty ) * -1;
|
||||||
|
$args['totals']['total'] = ( ( $refund_item['line_total'] / $qty ) * $refund_qty ) * -1;
|
||||||
|
$args['totals']['tax'] = ( ( $refund_item['line_tax'] / $qty ) * $refund_qty ) * -1;
|
||||||
|
$args['totals']['tax_data'] = array( 'total' => array(), 'subtotal' => array() );
|
||||||
|
|
||||||
|
if ( isset( $refund_item['line_tax_data'] ) ) {
|
||||||
|
$line_tax_data = maybe_unserialize( $refund_item['line_tax_data'] );
|
||||||
|
foreach ( $line_tax_data['total'] as $key => $tax ) {
|
||||||
|
$args['totals']['tax_data']['total'][ $key ] = ( ( $tax / $qty ) * $refund_qty ) * -1;
|
||||||
|
$order_taxes[ $key ] += ( ( $tax / $qty ) * $refund_qty ) * -1;
|
||||||
|
}
|
||||||
|
foreach ( $line_tax_data['subtotal'] as $key => $tax ) {
|
||||||
|
$args['totals']['tax_data']['subtotal'][ $key ] = ( ( $tax / $qty ) * $refund_qty ) * -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$refund->add_product( $product, $refund_qty, $args );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save order tax rows
|
||||||
|
foreach ( $order_taxes as $tax_rate_id => $tax_amount ) {
|
||||||
|
$refund->add_tax( $tax_rate_id, $tax_amount );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return new WC_Order_Refund( $refund_id );
|
return new WC_Order_Refund( $refund_id );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue