/** * */ public function display_shortcodes() { if (is_page(Product_Vendor::$pv_options->get_option('orders_page')) && $this->can_view_orders) { wp_enqueue_script('jquery'); $this->product_id = !empty($_GET['orders_for_product']) ? (int) $_GET['orders_for_product'] : false; $products = array($this->product_id); $_product = get_product($this->product_id); $children = $_product->get_children(); if (!empty($children)) { $products = array_merge($products, $children); $products = array_unique($products); } $this->orders = PV_Queries::get_orders_for_products($products, array('vendor_id' => get_current_user_id())); add_action('init', array($this, 'verify_order_access')); add_shortcode('pv_orders', array($this, 'display_product_orders')); if ($this->can_export_csv && !empty($_POST['export_orders'])) { $this->download_csv(); } } }
/** * Sum of orders for a specific product * * @param array $product_ids * @param array $args (optional) * * @return object */ public static function sum_orders_for_products(array $product_ids, array $args = array()) { global $wpdb; $dates = PV_Queries::orders_within_range(); $defaults = array('status' => apply_filters('wc_product_vendor_completed_statuses', array('completed', 'processing')), 'dates' => array('before' => $dates['before'], 'after' => $dates['after'])); foreach ($product_ids as $id) { $posts = get_posts(array('numberposts' => -1, 'post_type' => 'product_variation', 'post_parent' => $id)); if (!empty($posts)) { foreach ($posts as $post) { $product_ids[] = $post->ID; } } } $args = wp_parse_args($args, $defaults); $sql = "\n\t\t\tSELECT COUNT(order_id) as total_orders,\n\t\t\t SUM(total_due + total_shipping + tax) as line_total,\n\t\t\t SUM(qty) as qty,\n\t\t\t product_id\n\n\t\t\tFROM {$wpdb->prefix}pv_commission\n\n\t\t\tWHERE product_id IN ('" . implode("','", $product_ids) . "')\n\t\t\tAND time >= '" . $args['dates']['after'] . "'\n\t\t\tAND time <= '" . $args['dates']['before'] . "'\n\t\t\tAND status != 'reversed'\n\t\t"; if (!empty($args['vendor_id'])) { $sql .= "\n\t\t\t\tAND vendor_id = {$args['vendor_id']}\n\t\t\t"; } $sql .= "\n\t\t\tGROUP BY product_id\n\t\t\tORDER BY time DESC;\n\t\t"; $orders = $wpdb->get_results($sql); return $orders; }
/** * Format products for easier displaying * * @param object $products * * @return array */ public function format_product_details($products) { if (empty($products)) { return false; } $orders_page = get_permalink(Product_Vendor::$pv_options->get_option('orders_page')); $default_commission = Product_Vendor::$pv_options->get_option('default_commission'); $total_qty = $total_cost = 0; $data = array('products' => array(), 'total_qty' => '', 'total_cost' => ''); foreach ($products as $product) { $ids[] = $product->ID; } $orders = PV_Queries::sum_orders_for_products($ids, array('vendor_id' => get_current_user_id())); if ($orders) { foreach ($orders as $order_item) { if ($order_item->qty < 1) { continue; } $commission_rate = PV_Commission::get_commission_rate($order_item->product_id); $_product = get_product($order_item->product_id); $id = !empty($_product->parent->id) ? $_product->parent->id : $order_item->product_id; $data['products'][$id] = array('id' => $id, 'title' => $_product->get_title(), 'qty' => !empty($data['products'][$id]) ? $data['products'][$id]['qty'] + $order_item->qty : $order_item->qty, 'cost' => !empty($data['products'][$id]) ? $data['products'][$id]['cost'] + $order_item->line_total : $order_item->line_total, 'view_orders_url' => esc_url(add_query_arg('orders_for_product', $id, $orders_page)), 'commission_rate' => $commission_rate); $total_qty += $order_item->qty; $total_cost += $order_item->line_total; } } $data['total_qty'] = $total_qty; $data['total_cost'] = $total_cost; // Sort by product title if (!empty($data['products'])) { usort($data['products'], array($this, 'sort_by_title')); } return $data; }