Skip to content

Commit

Permalink
Display order number on reports (woocommerce#1706)
Browse files Browse the repository at this point in the history
* Display order number on reports, and add to API response.

* Add method for getting order number, avoiding loading the data store if no filter is attached.
  • Loading branch information
justinshreve authored Feb 28, 2019
1 parent e2242da commit c42a5aa
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 22 deletions.
9 changes: 5 additions & 4 deletions client/analytics/report/downloads/table.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ export default class CouponsReportTable extends Component {
},
{
label: __( 'Order #', 'wc-admin' ),
screenReaderLabel: __( 'Order ID', 'wc-admin' ),
key: 'order_id',
screenReaderLabel: __( 'Order Number', 'wc-admin' ),
key: 'order_number',
},
{
label: __( 'User Name', 'wc-admin' ),
Expand All @@ -77,6 +77,7 @@ export default class CouponsReportTable extends Component {
file_path,
ip_address,
order_id,
order_number,
product_id,
username,
} = download;
Expand Down Expand Up @@ -111,10 +112,10 @@ export default class CouponsReportTable extends Component {
{
display: (
<Link href={ `post.php?post=${ order_id }&action=edit` } type="wp-admin">
{ order_id }
{ order_number }
</Link>
),
value: order_id,
value: order_number,
},
{
display: username,
Expand Down
9 changes: 5 additions & 4 deletions client/analytics/report/orders/table.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ export default class OrdersReportTable extends Component {
},
{
label: __( 'Order #', 'wc-admin' ),
screenReaderLabel: __( 'Order ID', 'wc-admin' ),
key: 'id',
screenReaderLabel: __( 'Order Number', 'wc-admin' ),
key: 'order_number',
required: true,
},
{
Expand Down Expand Up @@ -102,6 +102,7 @@ export default class OrdersReportTable extends Component {
net_total,
num_items_sold,
order_id,
order_number,
status,
} = row;
const { coupons, products } = extended_info;
Expand Down Expand Up @@ -133,10 +134,10 @@ export default class OrdersReportTable extends Component {
{
display: (
<Link href={ 'post.php?post=' + order_id + '&action=edit' } type="wp-admin">
{ order_id }
{ order_number }
</Link>
),
value: order_id,
value: order_number,
},
{
display: (
Expand Down
14 changes: 14 additions & 0 deletions includes/api/class-wc-admin-rest-reports-controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,20 @@ public function get_items( $request ) {
return rest_ensure_response( $data );
}

/**
* Get the order number for an order. If no filter is present for `woocommerce_order_number`, we can just return the ID.
*
* @param int $order_id Order ID.
* @return string
*/
public function get_order_number( $order_id ) {
if ( ! has_filter( 'woocommerce_order_number' ) ) {
return $order_id;
}
$order = new WC_Order( $order_id );
return $order->get_order_number();
}

/**
* Prepare a report object for serialization.
*
Expand Down
26 changes: 16 additions & 10 deletions includes/api/class-wc-admin-rest-reports-downloads-controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
* @package WooCommerce/API
* @extends WC_REST_Reports_Controller
*/
class WC_Admin_REST_Reports_Downloads_Controller extends WC_REST_Reports_Controller {
class WC_Admin_REST_Reports_Downloads_Controller extends WC_Admin_REST_Reports_Controller {

/**
* Endpoint namespace.
Expand Down Expand Up @@ -103,15 +103,15 @@ public function prepare_item_for_response( $report, $request ) {

// Figure out file name.
// Matches https://github.com/woocommerce/woocommerce/blob/4be0018c092e617c5d2b8c46b800eb71ece9ddef/includes/class-wc-download-handler.php#L197.
$product_id = intval( $data['product_id'] );
$_product = wc_get_product( $product_id );
$file_path = $_product->get_file_download_path( $data['download_id'] );

$filename = basename( $file_path );
$response->data['file_name'] = apply_filters( 'woocommerce_file_download_filename', $filename, $product_id );
$response->data['file_path'] = $file_path;
$customer = new WC_Customer( $data['user_id'] );
$response->data['username'] = $customer->get_username();
$product_id = intval( $data['product_id'] );
$_product = wc_get_product( $product_id );
$file_path = $_product->get_file_download_path( $data['download_id'] );
$filename = basename( $file_path );
$response->data['file_name'] = apply_filters( 'woocommerce_file_download_filename', $filename, $product_id );
$response->data['file_path'] = $file_path;
$customer = new WC_Customer( $data['user_id'] );
$response->data['username'] = $customer->get_username();
$response->data['order_number'] = $this->get_order_number( $data['order_id'] );

/**
* Filter a report returned from the API.
Expand Down Expand Up @@ -207,6 +207,12 @@ public function get_item_schema() {
'context' => array( 'view', 'edit' ),
'description' => __( 'Order ID.', 'wc-admin' ),
),
'order_number' => array(
'type' => 'string',
'readonly' => true,
'context' => array( 'view', 'edit' ),
'description' => __( 'Order Number.', 'wc-admin' ),
),
'user_id' => array(
'type' => 'integer',
'readonly' => true,
Expand Down
11 changes: 9 additions & 2 deletions includes/api/class-wc-admin-rest-reports-orders-controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,9 @@ public function get_items( $request ) {
$data = array();

foreach ( $report_data->data as $orders_data ) {
$item = $this->prepare_item_for_response( $orders_data, $request );
$data[] = $this->prepare_response_for_collection( $item );
$orders_data['order_number'] = $this->get_order_number( $orders_data['order_id'] );
$item = $this->prepare_item_for_response( $orders_data, $request );
$data[] = $this->prepare_response_for_collection( $item );
}

$response = rest_ensure_response( $data );
Expand Down Expand Up @@ -161,6 +162,12 @@ public function get_item_schema() {
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'order_number' => array(
'description' => __( 'Order Number.', 'wc-admin' ),
'type' => 'string',
'context' => array( 'view', 'edit' ),
'readonly' => true,
),
'date_created' => array(
'description' => __( 'Date the order was created.', 'wc-admin' ),
'type' => 'string',
Expand Down
4 changes: 3 additions & 1 deletion tests/api/reports-downloads.php
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ public function test_get_report() {
$this->assertEquals( 1, $download_report['download_id'] );
$this->assertEquals( $product->get_id(), $download_report['product_id'] );
$this->assertEquals( $order->get_id(), $download_report['order_id'] );
$this->assertEquals( $order->get_order_number(), $download_report['order_number'] );
$this->assertEquals( $this->user, $download_report['user_id'] );
$this->assertEquals( '1.2.3.4', $download_report['ip_address'] );
$this->assertEquals( 'help.png', $download_report['file_name'] );
Expand Down Expand Up @@ -396,7 +397,7 @@ public function test_reports_schema() {
$data = $response->get_data();
$properties = $data['schema']['properties'];

$this->assertEquals( 11, count( $properties ) );
$this->assertEquals( 12, count( $properties ) );
$this->assertArrayHasKey( 'id', $properties );
$this->assertArrayHasKey( 'product_id', $properties );
$this->assertArrayHasKey( 'date', $properties );
Expand All @@ -405,6 +406,7 @@ public function test_reports_schema() {
$this->assertArrayHasKey( 'file_name', $properties );
$this->assertArrayHasKey( 'file_path', $properties );
$this->assertArrayHasKey( 'order_id', $properties );
$this->assertArrayHasKey( 'order_number', $properties );
$this->assertArrayHasKey( 'user_id', $properties );
$this->assertArrayHasKey( 'username', $properties );
$this->assertArrayHasKey( 'ip_address', $properties );
Expand Down
4 changes: 3 additions & 1 deletion tests/api/reports-orders.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ public function test_get_reports() {
$order_report = reset( $reports );

$this->assertEquals( $order->get_id(), $order_report['order_id'] );
$this->assertEquals( $order->get_order_number(), $order_report['order_number'] );
$this->assertEquals( date( 'Y-m-d H:i:s', $order->get_date_created()->getTimestamp() ), $order_report['date_created'] );
$this->assertEquals( $expected_customer_id, $order_report['customer_id'] );
$this->assertEquals( 4, $order_report['num_items_sold'] );
Expand Down Expand Up @@ -113,8 +114,9 @@ public function test_reports_schema() {
$data = $response->get_data();
$properties = $data['schema']['properties'];

$this->assertEquals( 8, count( $properties ) );
$this->assertEquals( 9, count( $properties ) );
$this->assertArrayHasKey( 'order_id', $properties );
$this->assertArrayHasKey( 'order_number', $properties );
$this->assertArrayHasKey( 'date_created', $properties );
$this->assertArrayHasKey( 'status', $properties );
$this->assertArrayHasKey( 'customer_id', $properties );
Expand Down

0 comments on commit c42a5aa

Please sign in to comment.