Order refunds v1 and v2

This commit is contained in:
Claudio Sanches 2017-02-16 01:27:44 -02:00
parent a19fa78cef
commit d2818be2ba
3 changed files with 34 additions and 81 deletions

View File

@ -14,8 +14,6 @@ if ( ! defined( 'ABSPATH' ) ) {
exit;
}
include( 'class-wc-rest-orders-controller.php' );
/**
* REST API Order Refunds controller class.
*
@ -220,13 +218,14 @@ class WC_REST_Order_Refunds_Controller extends WC_REST_Orders_Controller {
/**
* Query args.
*
* @param array $args
* @param WP_REST_Request $request
* @param array $args Request args.
* @param WP_REST_Request $request Request object.
* @return array
*/
public function query_args( $args, $request ) {
$args['post_status'] = array_keys( wc_get_order_statuses() );
$args['post_parent__in'] = array( absint( $request['order_id'] ) );
return $args;
}
@ -479,35 +478,6 @@ class WC_REST_Order_Refunds_Controller extends WC_REST_Orders_Controller {
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'meta' => array(
'description' => __( 'Order item meta data (formatted).', 'woocommerce' ),
'type' => 'array',
'context' => array( 'view', 'edit' ),
'readonly' => true,
'items' => array(
'type' => 'object',
'properties' => array(
'key' => array(
'description' => __( 'Meta key.', 'woocommerce' ),
'type' => 'string',
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'label' => array(
'description' => __( 'Meta label.', 'woocommerce' ),
'type' => 'string',
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'value' => array(
'description' => __( 'Meta value.', 'woocommerce' ),
'type' => 'string',
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
),
),
),
),
),
),

View File

@ -20,7 +20,7 @@ if ( ! defined( 'ABSPATH' ) ) {
* @package WooCommerce/API
* @extends WC_REST_Posts_Controller
*/
class WC_REST_Order_Refunds_V1_Controller extends WC_REST_Posts_Controller {
class WC_REST_Order_Refunds_V1_Controller extends WC_REST_Orders_V1_Controller {
/**
* Endpoint namespace.
@ -120,8 +120,6 @@ class WC_REST_Order_Refunds_V1_Controller extends WC_REST_Posts_Controller {
* @return WP_REST_Response $data
*/
public function prepare_item_for_response( $post, $request ) {
global $wpdb;
$order = wc_get_order( (int) $request['order_id'] );
if ( ! $order ) {
@ -130,17 +128,17 @@ class WC_REST_Order_Refunds_V1_Controller extends WC_REST_Posts_Controller {
$refund = wc_get_order( $post );
if ( ! $refund || intval( $refund->post->post_parent ) !== intval( $order->id ) ) {
if ( ! $refund || $refund->get_parent_id() !== $order->get_id() ) {
return new WP_Error( 'woocommerce_rest_invalid_order_refund_id', __( 'Invalid order refund ID.', 'woocommerce' ), 404 );
}
$dp = $request['dp'];
$data = array(
'id' => $refund->id,
'date_created' => wc_rest_prepare_date_response( $refund->date ),
'amount' => wc_format_decimal( $refund->get_refund_amount(), $dp ),
'reason' => $refund->get_refund_reason(),
'id' => $refund->get_id(),
'date_created' => wc_rest_prepare_date_response( $refund->get_date_created() ),
'amount' => wc_format_decimal( $refund->get_amount(), $dp ),
'reason' => $refund->get_reason(),
'line_items' => array(),
);
@ -153,8 +151,8 @@ class WC_REST_Order_Refunds_V1_Controller extends WC_REST_Posts_Controller {
// Check if the product exists.
if ( is_object( $product ) ) {
$product_id = $product->id;
$variation_id = $product->variation_id;
$product_id = $item->get_product_id();
$variation_id = $item->get_variation_id();
$product_sku = $product->get_sku();
}
@ -237,14 +235,15 @@ class WC_REST_Order_Refunds_V1_Controller extends WC_REST_Posts_Controller {
* Prepare links for the request.
*
* @param WC_Order_Refund $refund Comment object.
* @param WP_REST_Request $request Request object.
* @return array Links for the given order refund.
*/
protected function prepare_links( $refund, $request ) {
$order_id = $refund->post->post_parent;
$order_id = $refund->get_parent_id();
$base = str_replace( '(?P<order_id>[\d]+)', $order_id, $this->rest_base );
$links = array(
'self' => array(
'href' => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $base, $refund->id ) ),
'href' => rest_url( sprintf( '/%s/%s/%d', $this->namespace, $base, $refund->get_id() ) ),
),
'collection' => array(
'href' => rest_url( sprintf( '/%s/%s', $this->namespace, $base ) ),
@ -260,13 +259,13 @@ class WC_REST_Order_Refunds_V1_Controller extends WC_REST_Posts_Controller {
/**
* Query args.
*
* @param array $args
* @param WP_REST_Request $request
* @param array $args Request args.
* @param WP_REST_Request $request Request object.
* @return array
*/
public function query_args( $args, $request ) {
// Set post_status.
$args['post_status'] = 'any';
$args['post_status'] = array_keys( wc_get_order_statuses() );
$args['post_parent__in'] = array( absint( $request['order_id'] ) );
return $args;
}
@ -279,6 +278,7 @@ class WC_REST_Order_Refunds_V1_Controller extends WC_REST_Posts_Controller {
*/
public function create_item( $request ) {
if ( ! empty( $request['id'] ) ) {
/* translators: %s: post type */
return new WP_Error( "woocommerce_rest_{$this->post_type}_exists", sprintf( __( 'Cannot create existing %s.', 'woocommerce' ), $this->post_type ), array( 'status' => 400 ) );
}
@ -292,42 +292,25 @@ class WC_REST_Order_Refunds_V1_Controller extends WC_REST_Posts_Controller {
return new WP_Error( 'woocommerce_rest_invalid_order_refund', __( 'Refund amount must be greater than zero.', 'woocommerce' ), 400 );
}
$api_refund = is_bool( $request['api_refund'] ) ? $request['api_refund'] : true;
$data = array(
'order_id' => $order_data->ID,
'amount' => $request['amount'],
'reason' => empty( $request['reason'] ) ? null : $request['reason'],
'line_items' => $request['line_items'],
);
// Create the refund.
$refund = wc_create_refund( $data );
$refund = wc_create_refund( array(
'order_id' => $order_data->ID,
'amount' => $request['amount'],
'reason' => empty( $request['reason'] ) ? null : $request['reason'],
'line_items' => $request['line_items'],
'refund_payment' => is_bool( $request['api_refund'] ) ? $request['api_refund'] : true,
'restock_items' => true,
) );
if ( is_wp_error( $refund ) ) {
return new WP_Error( 'woocommerce_rest_cannot_create_order_refund', $refund->get_error_message(), 500 );
}
if ( ! $refund ) {
return new WP_Error( 'woocommerce_rest_cannot_create_order_refund', __( 'Cannot create order refund, please try again.', 'woocommerce' ), 500 );
}
// Refund via API.
if ( $api_refund ) {
if ( WC()->payment_gateways() ) {
$payment_gateways = WC()->payment_gateways->payment_gateways();
}
$order = wc_get_order( $order_data );
if ( isset( $payment_gateways[ $order->payment_method ] ) && $payment_gateways[ $order->payment_method ]->supports( 'refunds' ) ) {
$result = $payment_gateways[ $order->payment_method ]->process_refund( $order->id, $refund->get_refund_amount(), $refund->get_refund_reason() );
if ( is_wp_error( $result ) ) {
return $result;
} elseif ( ! $result ) {
return new WP_Error( 'woocommerce_rest_create_order_refund_api_failed', __( 'An error occurred while attempting to create the refund using the payment gateway API.', 'woocommerce' ), 500 );
}
}
}
$post = get_post( $refund->id );
$post = get_post( $refund->get_id() );
$this->update_additional_fields_for_object( $post, $request );
/**

View File

@ -150,9 +150,9 @@ class WC_API extends WC_Legacy_API {
include_once( dirname( __FILE__ ) . '/api/v1/class-wc-rest-coupons-controller.php' );
include_once( dirname( __FILE__ ) . '/api/v1/class-wc-rest-customer-downloads-controller.php' );
include_once( dirname( __FILE__ ) . '/api/v1/class-wc-rest-customers-controller.php' );
include_once( dirname( __FILE__ ) . '/api/v1/class-wc-rest-orders-controller.php' );
include_once( dirname( __FILE__ ) . '/api/v1/class-wc-rest-order-notes-controller.php' );
include_once( dirname( __FILE__ ) . '/api/v1/class-wc-rest-order-refunds-controller.php' );
include_once( dirname( __FILE__ ) . '/api/v1/class-wc-rest-orders-controller.php' );
include_once( dirname( __FILE__ ) . '/api/v1/class-wc-rest-product-attribute-terms-controller.php' );
include_once( dirname( __FILE__ ) . '/api/v1/class-wc-rest-product-attributes-controller.php' );
include_once( dirname( __FILE__ ) . '/api/v1/class-wc-rest-product-categories-controller.php' );
@ -172,9 +172,9 @@ class WC_API extends WC_Legacy_API {
include_once( dirname( __FILE__ ) . '/api/class-wc-rest-coupons-controller.php' );
include_once( dirname( __FILE__ ) . '/api/class-wc-rest-customer-downloads-controller.php' );
include_once( dirname( __FILE__ ) . '/api/class-wc-rest-customers-controller.php' );
include_once( dirname( __FILE__ ) . '/api/class-wc-rest-orders-controller.php' );
include_once( dirname( __FILE__ ) . '/api/class-wc-rest-order-notes-controller.php' );
include_once( dirname( __FILE__ ) . '/api/class-wc-rest-order-refunds-controller.php' );
include_once( dirname( __FILE__ ) . '/api/class-wc-rest-orders-controller.php' );
include_once( dirname( __FILE__ ) . '/api/class-wc-rest-product-attribute-terms-controller.php' );
include_once( dirname( __FILE__ ) . '/api/class-wc-rest-product-attributes-controller.php' );
include_once( dirname( __FILE__ ) . '/api/class-wc-rest-product-categories-controller.php' );