'Order ID', 'date_created' => 'Time', 'customer_name' => 'Customer', 'payment_status' => 'Payment', 'fulfill_status' => 'Fulfillment', 'tracking_status' => 'Tracking', 'fulfill_cost' => 'Fulfill cost', 'shipping_cost' => 'Shipping cost', 'status' => 'Status', 'action' => 'Action', ); return $columns; } function column_default( $item, $column_name ) { switch( $column_name ) { case 'id': case 'date_created': case 'customer_name': case 'payment_status': case 'fulfill_status': case 'tracking_status': case 'fulfill_cost': case 'shipping_cost': case 'status': return $item[ $column_name ]; default: return print_r( $item, true ); //Show the whole array for troubleshooting purposes } } function column_id( $item ) { return sprintf( '%s
No: %s', $item['id'], $item['order_number'] ); } function column_action( $item ) { $attribute = [ 'class'=>'button-submit-order', 'data-id' => $item['id'] ]; if($item['status'] != 'Draft') $attribute['disabled'] = true; submit_button( 'Submit' , 'primary button-submit-order' ,'',true,$attribute); } function get_sortable_columns() { $sortable_columns = array( 'id' => array( 'id', false ), 'date_created' => array( 'date_created', false ), 'customer_name' => array( 'customer_name', false ), 'payment_status' => array( 'payment_status', false ), 'fulfill_status' => array( 'fulfill_status', false ), 'tracking_status' => array( 'tracking_status', false ), 'fulfill_cost' => array( 'fulfill_cost', false ), 'shipping_cost' => array( 'shipping_cost', false ), 'status' => array( 'status', false ) ); return $sortable_columns; } function usort_reorder( $a, $b ) { // If no sort, default to title $orderby = ( ! empty( $_GET['orderby'] ) ) ? sanitize_text_field($_GET['orderby']) : 'date_created'; // If no order, default to asc $order = ( ! empty($_GET['order'] ) ) ? sanitize_text_field($_GET['order']) : 'desc'; // Determine sort order $result = strcmp( $a[$orderby], $b[$orderby] ); // Send final sort direction to usort return ( $order === 'asc' ) ? $result : -$result; } function no_items() { _e( 'No orders found.' ); } function get_request_data() { $data = array( 'api_key' => get_option( 'pod_api_key' ), ); $dates = array(); if (isset($_GET['start_date'])) { $start_date = sanitize_text_field($_GET['start_date']); $dates[] = date( 'Y-m-d H:i:s', strtotime( $start_date . ' 00:00:00' ) ); } else { $dates[] = date('Y-m-d H:i:s', strtotime('today - 30 days')); } if (isset($_GET['end_date'])) { $end_date = sanitize_text_field($_GET['end_date']); $dates[] = date( 'Y-m-d H:i:s', strtotime( $end_date. ' 23:59:59' ) ); } else { $dates[] = date('Y-m-d H:i:s', strtotime('today + 1 days')); } $data['date'] = $dates; if ( isset( $_GET['payment_status'] ) ) { $data['payment'] = sanitize_text_field($_GET['payment_status']); } if ( isset( $_GET['fulfillment_status'] ) ) { $data['fulfill'] = sanitize_text_field($_GET['fulfillment_status']); } if ( isset( $_GET['tracking_status'] ) ) { $data['tracking'] = sanitize_text_field($_GET['tracking_status']); } if ( isset( $_GET['other_status'] ) ) { $data['other'] = sanitize_text_field($_GET['other_status']); } if ( isset( $_GET['search_type'] ) ) { $data['search_type'] = sanitize_text_field($_GET['search_type']); if (isset($_GET['search_key'])) { $data['s'] = sanitize_text_field($_GET['search_key']); } } return $data; } public function get_orders( $per_page ) { try{ $response_orders = array(); $orders = array(); $data = $this->get_request_data(); $data['page'] = $this->get_pagenum(); $data['size'] = $per_page; $query_url = AFF_API_URL . 'order/list?' . http_build_query( $data ); $response = wp_remote_get( $query_url ); $response_body = wp_remote_retrieve_body( $response ); if ( is_wp_error( $response ) || ! json_decode( $response_body, true ) || ! array_key_exists( 'data', json_decode( $response_body, true ) ) ) { return array( 'orders' => [], 'number_total_orders' => 0 ); } $result = json_decode( $response_body, true ); $orders_data = $result['data']; foreach( $orders_data as $order_data ){ $order = array(); $order['id'] = $order_data['id']; $order['order_number'] = $order_data['order_number']; $order['date_created'] = date( 'd/m/Y H:i:s', strtotime( $order_data['created_at'] ) ); $order['customer_name'] = $order_data['customer_name']; $order['payment_status'] = $order_data['payment_status_text'] ? ucfirst( $order_data['payment_status_text'] ) : '...'; $order['fulfill_status'] = $order_data['fulfill_status_text'] ? ucfirst( $order_data['fulfill_status_text'] ) : '...'; $order['tracking_status'] = $order_data['tracking_code'] ? wc_help_tip($order_data['tracking_code']): '...'; $order['fulfill_cost'] = aff_money_format( $order_data['fulfill_price'] ); $order['shipping_cost'] = aff_money_format( $order_data['shipping_cost'] ); $order['status'] = $this->convert_status( $order_data['status'] ); array_push( $orders, $order ); } $number_total_orders = $result['meta']['total']; $response_orders['orders'] = $orders; $response_orders['number_total_orders'] = $number_total_orders; return $response_orders; } catch ( \Exception $e ) { aff_logger( $e ); return []; } } function prepare_items() { $per_page = 10; $response_orders = $this->get_orders( $per_page ); $orders = $response_orders['orders']; $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); usort( $orders, array( &$this, 'usort_reorder' ) ); $this->_column_headers = array( $columns, $hidden, $sortable ); $total_items = $response_orders['number_total_orders']; $this->set_pagination_args( array( 'total_items' => $total_items, //WE have to calculate the total number of items 'per_page' => $per_page //WE have to determine how many items to show on a page ) ); $this->items = $orders; } public function convert_status( $int_status ) { $status = [ 0 => 'Draft', 1 => 'Address Verifying', 2 => 'Address US Valid', 3 => 'Address US Invalid', 4 => 'Address US Buyer Confirmed', 5 => 'Address Other', 11 => 'Design Checking', 12 => 'Design Error', 13 => 'Design Completed', 20 => 'Paid', 21 => 'Refunded', 22 => 'Unpaid', 30 => 'Processing', 31 => 'Fulfilled', 32 => 'Delivered', 33 => 'Processing', 34 => 'Processing', 40 => 'Tracking Completed', 41 => 'Tracking Incomplete', 42 => 'Tracking Missing', 50 => 'Done', -1 => 'Cancel', -2 => 'Unresolved', -3 => 'Rejected', ]; if ( array_key_exists( $int_status, $status ) ) { $string_status = $status[ $int_status ]; } else { $string_status = '...'; } return $string_status; } }