Esempio n. 1
0
 /**
  *
  */
 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();
         }
     }
 }
Esempio n. 2
0
 /**
  * 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;
 }