/**
  * Get all data needed for this report and store in the class
  */
 private function query_report_data()
 {
     $vendor = yith_get_vendor('current', 'user');
     if (!$vendor->is_valid() && !$vendor->has_limited_access()) {
         return false;
     }
     $this->report_data = new stdClass();
     $date_query = YITH_Reports()->get_wp_query_date_args($this->start_date, $this->end_date);
     $query_args = array_merge(array('vendor_id' => $vendor->id), $date_query);
     $commission_status = YITH_Commissions()->get_status();
     $commission_status['all'] = 'all';
     foreach ($commission_status as $key => $value) {
         $commission_ids = YITH_Commissions()->get_commissions(array_merge($query_args, array('status' => $key)));
         $data = "commissions_{$key}";
         $data_amount = "{$data}_amount";
         $data_count = "{$data}_count";
         $this->report_data->{$data_amount} = 0;
         foreach ($commission_ids as $commision_id) {
             $commission = YITH_Commission($commision_id);
             if ('all' == $key && ('cancelled' == $commission->status || 'refunded' == $commission->status)) {
                 continue;
             }
             $this->report_data->{$data}[$commision_id] = new stdClass();
             $this->report_data->{$data}[$commision_id]->amount = $this->round_chart_totals($commission->get_amount());
             $this->report_data->{$data}[$commision_id]->commission_date = $commission->get_date();
             $this->report_data->{$data_count}[$commision_id] = new stdClass();
             $this->report_data->{$data_count}[$commision_id]->count = 1;
             $this->report_data->{$data_count}[$commision_id]->commission_date = $commission->get_date();
             $this->report_data->{$data_amount} += $commission->get_amount();
         }
     }
 }
Пример #2
0
 /**
  * Change commission label value
  *
  * @param           $attribute_label  The Label Value
  * @param           $meta_key         The Meta Key value
  * @param bool|\The $product          The Product object
  *
  * @return string           The label value
  */
 public function commissions_attribute_label($attribute_label, $meta_key, $product = false)
 {
     global $pagenow;
     if ($product && 'post.php' == $pagenow && isset($_GET['post']) && ($order = wc_get_order($_GET['post']))) {
         $line_items = $order->get_items('line_item');
         $item_meta_key = wp_get_post_parent_id($order->id) ? '_commission_id' : '_child__commission_id';
         foreach ($line_items as $line_item_id => $line_item) {
             if ($line_item['product_id'] == $product->id) {
                 $commission_id = wc_get_order_item_meta($line_item_id, $item_meta_key, true);
                 $admin_url = YITH_Commission($commission_id)->get_view_url('admin');
                 $attribute_label = $item_meta_key == $meta_key ? sprintf("<a href='%s' class='%s'>" . __('commission_id', 'yith_wc_product_vendors') . '</a>', $admin_url, 'commission-id-label') : $attribute_label;
             }
         }
     }
     return $attribute_label;
 }
 /**
  * Delete wishlist on bulk action
  *
  * @since 1.0.0
  */
 public function process_bulk_action()
 {
     // Detect when a bulk action is being triggered...
     if (!isset($_REQUEST['page']) || $_REQUEST['page'] != YITH_Commissions()->get_screen() || !isset($_REQUEST['action']) || !isset($_REQUEST['commissions'])) {
         return;
     }
     $vendor = yith_get_vendor('current', 'user');
     if (!$vendor->is_super_user()) {
         return;
     }
     $action = $_REQUEST['action'] != -1 ? $_REQUEST['action'] : $_REQUEST['action2'];
     $commissions = $_REQUEST['commissions'];
     $message = 'updated';
     // change status action
     if (in_array($action, array_keys(YITH_Commissions()->get_status()))) {
         foreach ($commissions as $commission_id) {
             YITH_Commission($commission_id)->update_status($action);
         }
     } else {
         if ('pay' == $action) {
             $data = array();
             foreach ($commissions as $commission_id) {
                 $commission = YITH_Commission($commission_id);
                 $vendor = $commission->get_vendor();
                 $data[] = array('paypal_email' => $vendor->paypal_email, 'amount' => round($commission->get_amount(), 2), 'request_id' => $commission->id);
             }
             // process payment
             $result = YITH_Vendors_Credit()->pay($data);
             foreach ($commissions as $commission_id) {
                 /** @var YITH_Commission $commission */
                 $commission = YITH_Commission($commission_id);
                 // set as processing, because paypal will set as paid as soon as the transaction is completed
                 if ($result['status']) {
                     $message = 'pay-process';
                     $commission->update_status('processing');
                 } else {
                     $message = 'pay-failed';
                     $commission->add_note(sprintf(__('Payment failed: %s', 'yith_wc_product_vendors'), $result['messages']));
                 }
             }
         } else {
             return;
         }
     }
     wp_redirect(esc_url_raw(add_query_arg('message', $message, wp_get_referer())));
     exit;
 }
 /**
  * Prepare items for table
  *
  * @return void
  * @since 1.0.0
  */
 public function prepare_items()
 {
     // sets pagination arguments
     $per_page = $this->get_items_per_page('edit_commissions_per_page');
     $current_page = absint($this->get_pagenum());
     // commissions args
     $args = array('status' => $this->get_current_view(), 'paged' => $current_page, 'number' => $per_page);
     // merge Unpaid with Processing
     if ('unpaid' == $args['status']) {
         $args['status'] = array('unpaid', 'processing');
     }
     if ($this->_vendor->is_valid() && $this->_vendor->has_limited_access() && $this->_vendor->is_owner()) {
         $args['user_id'] = get_current_user_id();
     }
     $args = apply_filters('yith_wpv_commissions_table_args', $args);
     $commission_ids = YITH_Commissions()->get_commissions($args);
     $total_items = YITH_Commissions()->count_commissions('last-query');
     // sets columns headers
     $columns = $this->get_columns();
     $hidden = array();
     $sortable = $this->get_sortable_columns();
     $this->_column_headers = array($columns, $hidden, $sortable);
     $items = array();
     foreach ($commission_ids as $commission_id) {
         $items[$commission_id] = YITH_Commission($commission_id);
     }
     // retrieve data for table
     $this->items = $items;
     // sets pagination args
     $this->set_pagination_args(array('total_items' => $total_items, 'per_page' => $per_page, 'total_pages' => ceil($total_items / $per_page)));
 }
if (!defined('ABSPATH')) {
    exit;
    // Exit if accessed directly
}
$vendor_products = $vendor->get_products(array('fields' => 'ids'));
?>
<tbody>
<?php 
foreach ($items as $item_id => $item) {
    $_product = apply_filters('woocommerce_order_item_product', $order->get_product_from_item($item), $item);
    if (!in_array($_product->id, $vendor_products)) {
        continue;
    }
    $item_meta = new WC_Order_Item_Meta($item['item_meta'], $_product);
    /** @var $commission YITH_Commission */
    $commission = !empty($item['commission_id']) ? YITH_Commission($item['commission_id']) : false;
    if (apply_filters('woocommerce_order_item_visible', true, $item)) {
        ?>
		<tr class="<?php 
        echo esc_attr(apply_filters('woocoomerce_order_item_class', 'order_item', $item, $order));
        ?>
">
			<td style="text-align:left; vertical-align:middle; border: 1px solid #eee; word-wrap:break-word;"><?php 
        // Show title/image etc
        if ($show_image) {
            echo apply_filters('woocommerce_order_item_thumbnail', '<img src="' . ($_product->get_image_id() ? current(wp_get_attachment_image_src($_product->get_image_id(), 'thumbnail')) : wc_placeholder_img_src()) . '" alt="' . __('Product Image', 'woocommerce') . '" height="' . esc_attr($image_size[1]) . '" width="' . esc_attr($image_size[0]) . '" style="vertical-align:middle; margin-right: 10px;" />', $item);
        }
        // Product name
        echo apply_filters('woocommerce_order_item_name', $item['name'], $item);
        // SKU
        if ($show_sku && is_object($_product) && $_product->get_sku()) {
 /**
  * Multiple Delete Bulk commission
  *
  * @param $order_id array  The order ids to apply the bulk action
  * @param $action   string Bulk action type
  *
  * @author Andrea Grillo <*****@*****.**>
  * @since 1.8.4
  * @return void
  */
 public function bulk_action($order_ids, $action = 'delete')
 {
     switch ($action) {
         case 'delete':
             foreach ($order_ids as $order_id) {
                 $commission_ids = YITH_Commissions()->get_commissions(array('order_id' => $order_id, 'status' => $this->get_status()));
                 foreach ($commission_ids as $commission_id) {
                     $commission = YITH_Commission($commission_id);
                     if ($commission_id) {
                         $commission->remove();
                     }
                 }
             }
             break;
     }
 }
 /**
  * Process success payment
  *
  * @param $args
  */
 public function handle_payment_successful($args)
 {
     if (empty($args['unique_id'])) {
         return;
     }
     $commission = YITH_Commission(absint($args['unique_id']));
     // perform only if the commission is in progress
     if (!$commission->has_status('processing')) {
         return;
     }
     // emails
     WC()->mailer();
     // if completed, set as paid
     if ($args['status'] == 'Completed') {
         $commission->update_status('paid', sprintf(__('Commission paid via PayPal (txn ID: %s)', 'yith_wc_product_vendors'), $args['txn_id']));
         do_action('yith_vendors_commissions_paid', $commission);
     } else {
         $commission->update_status('unpaid', sprintf(__('Payment %s', 'yith_wc_product_vendors'), $args['status']));
         do_action('yith_vendors_commissions_unpaid', $commission);
     }
 }
 /**
  * Get all data needed for this report and store in the class
  */
 private function query_report_data()
 {
     $vendor = yith_get_vendor('current', 'user');
     if (!$vendor->is_valid() && !$vendor->has_limited_access()) {
         return false;
     }
     $this->report_data = new stdClass();
     $date_query = YITH_Reports()->get_wp_query_date_args($this->start_date, $this->end_date);
     $query_args = array_merge(array('vendor_id' => $vendor->id), $date_query);
     $products = $vendor->get_products();
     $commission_ids = YITH_Commissions()->get_commissions(array_merge($query_args, array('status' => 'all')));
     $orders = array();
     $this->report_data->orders_all_count = 0;
     $this->report_data->orders_all_product_total = 0;
     $this->report_data->orders_refunded_total = 0;
     $this->report_data->orders_gross_amount = 0;
     $this->report_data->orders_net_amount = 0;
     foreach ($commission_ids as $commision_id) {
         $commission = YITH_Commission($commision_id);
         $order = $commission->get_order();
         $line_items = $order->get_items('line_item');
         $refunds = $order->get_refunds();
         if (!in_array($order->id, $orders)) {
             $orders[] = $order->id;
             $this->report_data->orders_all_count++;
         }
         // order placed
         if (!isset($this->report_data->orders_count[$order->id])) {
             $this->report_data->orders_count[$order->id] = new stdClass();
             $this->report_data->orders_count[$order->id]->order_date = $order->post->post_date;
             $this->report_data->orders_count[$order->id]->count = 0;
         }
         $this->report_data->orders_count[$order->id]->count += 1;
         foreach ($line_items as $line_item_id => $line_item) {
             if (in_array($line_item['product_id'], $products)) {
                 // net sales
                 $this->report_data->orders_net[$order->id] = new stdClass();
                 $this->report_data->orders_net[$order->id]->amount = $this->round_chart_totals(floatval($line_item['line_total']));
                 $this->report_data->orders_net[$order->id]->order_date = $order->post->post_date;
                 $this->report_data->orders_net_count[$order->id] = new stdClass();
                 $this->report_data->orders_net_count[$order->id]->count = absint($line_item['qty']);
                 $this->report_data->orders_net_count[$order->id]->order_date = $order->post->post_date;
                 $this->report_data->orders_net_amount += floatval($line_item['line_total']);
                 // gross sales
                 $this->report_data->orders_gross[$order->id] = new stdClass();
                 $chart_totals = floatval($line_item['line_total']) + floatval($line_item['line_tax']);
                 $this->report_data->orders_gross[$order->id]->amount = $this->round_chart_totals($chart_totals);
                 $this->report_data->orders_gross[$order->id]->order_date = $order->post->post_date;
                 $this->report_data->orders_gross_amount += $chart_totals;
                 // items purchased
                 $this->report_data->orders_all_product[$order->id] = new stdClass();
                 $this->report_data->orders_all_product[$order->id]->count = $line_item['qty'];
                 $this->report_data->orders_all_product[$order->id]->order_date = $order->post->post_date;
                 $this->report_data->orders_all_product_total += $line_item['qty'];
                 // charged for shipping
                 $this->report_data->orders_all_product[$order->id] = new stdClass();
                 $this->report_data->orders_all_product[$order->id]->count = $line_item['qty'];
                 $this->report_data->orders_all_product[$order->id]->order_date = $order->post->post_date;
                 //  $this->report_data->orders_all_product_total += $line_item['qty'];
                 $this->report_data->orders_refunded[$order->id] = new stdClass();
                 $this->report_data->orders_refunded[$order->id]->amount = 0;
                 $this->report_data->orders_refunded[$order->id]->order_date = $order->post->post_date;
             }
         }
     }
 }
 /**
  * Change commission label value
  *
  * @param           $attribute_label  The Label Value
  * @param           $meta_key         The Meta Key value
  * @param bool|\The $product          The Product object
  *
  * @return string           The label value
  */
 public function commissions_attribute_label($attribute_label, $meta_key, $product = false)
 {
     global $pagenow;
     if ($product && 'post.php' == $pagenow && isset($_GET['post']) && ($order = wc_get_order($_GET['post']))) {
         $line_items = $order->get_items('line_item');
         $item_meta_key = wp_get_post_parent_id($order->id) ? '_commission_id' : '_child__commission_id';
         foreach ($line_items as $line_item_id => $line_item) {
             if ($line_item['product_id'] == $product->id) {
                 $commission_id = wc_get_order_item_meta($line_item_id, $item_meta_key, true);
                 $commission = YITH_Commission($commission_id);
                 $admin_url = YITH_Commission($commission_id)->get_view_url('admin');
                 $url_attribute_label = sprintf("<a href='%s' class='%s'>%s</a> <small>(%s: <strong>%s</strong>)</small>", $admin_url, 'commission-id-label', __('commission_id', 'yith_wc_product_vendors'), __('status', 'yith_wc_product_vendors'), strtolower($commission->get_status('display')));
                 $attribute_label = $item_meta_key == $meta_key ? $url_attribute_label : $attribute_label;
             }
         }
     }
     return $attribute_label;
 }