/**
  * 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)));
 }
 /**
  * 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();
         }
     }
 }
Example #3
0
 /**
  * Filters meta to hide, to add to the list item order meta added by author class
  *
  * @param $to_hidden Array of order_item_meta meta_key to hide
  *
  * @return array New array of order item meta to hide
  * @since    1.0
  * @author   Andrea Grillo <*****@*****.**>
  */
 public function hidden_order_itemmeta($to_hidden)
 {
     if (!defined('WP_DEBUG') || defined('WP_DEBUG') && !WP_DEBUG) {
         $to_hidden[] = '_parent_line_item_id';
     }
     if (!apply_filters('yith_show_commissions_order_item_meta', YITH_Commissions()->show_order_item_meta)) {
         $to_hidden[] = '_commission_id';
         $to_hidden[] = '_parent__commission_id';
     }
     return $to_hidden;
 }
 /**
  * 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;
 }
 /**
  * Print the columns information
  *
  * @param $rec  \YITH_Commission
  * @param $column_name
  *
  * @return string
  */
 public function column_default($rec, $column_name)
 {
     switch ($column_name) {
         case 'user':
             if (empty($rec->display_name)) {
                 return "<em>" . __('User deleted', 'yith_wc_product_vendors') . "</em>";
             }
             $user_url = get_edit_user_link($rec->ID);
             $user_name = $rec->display_name;
             return !empty($user_url) ? "<a href='{$user_url}' target='_blank'>{$user_name}</a>" : $user_name;
             break;
         case 'vendor':
             $vendor = yith_get_vendor($rec->ID, 'user');
             if (!$vendor->is_valid()) {
                 return "<em>" . __('Vendor deleted', 'yith_wc_product_vendors') . "</em>";
             }
             $vendor_url = get_edit_term_link($vendor->id, $vendor->taxonomy);
             $vendor_name = $vendor->name;
             return !empty($vendor_url) ? "<a href='{$vendor_url}' target='_blank'>{$vendor_name}</a>" : $vendor_name;
             break;
         case 'amount':
             $amount = get_user_meta($rec->ID, '_vendor_commission_credit', true);
             return wc_price($amount);
             break;
         case 'user_actions':
             if ($this->_vendor->is_super_user()) {
                 printf('<a class="button tips pay" href="%1$s" data-tip="%2$s">%2$s</a>', esc_url(wp_nonce_url(add_query_arg(array('action' => 'pay_commission', 'commission_id' => $rec->ID), admin_url('admin.php')), 'yith-vendors-pay-commission')), __('Pay', 'yith_wc_product_vendors'));
             }
             break;
         case 'oldest_commission':
             $commissions = YITH_Commissions()->get_commissions(array('user_id' => $rec->ID, 'fields' => 'last_edit', 'order' => 'ASC'));
             $oldest_commission_date = array_shift($commissions);
             $t_time = date_i18n(__('Y/m/d g:i:s A'), mysql2date('U', $oldest_commission_date));
             $m_time = $oldest_commission_date;
             $time = mysql2date('G', $oldest_commission_date);
             $time_diff = time() - $time;
             if ($time_diff > 0 && $time_diff < DAY_IN_SECONDS) {
                 $h_time = sprintf(__('%s ago'), human_time_diff($time));
             } else {
                 $h_time = mysql2date(__('Y/m/d'), $m_time);
             }
             return $h_time ? '<abbr title="' . $t_time . '">' . $h_time . '</abbr>' : '<small class="meta">-</small>';
             break;
     }
     return null;
 }
 /**
  * Display the search box.
  *
  * @since 3.1.0
  * @access public
  *
  * @param $rec YITH_Commission
  */
 public function column_user_actions($rec)
 {
     printf('<a class="button tips view" href="%1$s" data-tip="%2$s">%2$s</a>', $rec->get_view_url('admin'), __('View', 'yith_wc_product_vendors'));
     if ($this->_vendor->is_super_user()) {
         if ($rec->has_status('unpaid')) {
             printf('<a class="button tips pay" href="%1$s" data-tip="%2$s">%2$s</a>', esc_url(wp_nonce_url(add_query_arg(array('action' => 'pay_commission', 'commission_id' => $rec->id), admin_url('admin.php')), 'yith-vendors-pay-commission')), __('Pay', 'yith_wc_product_vendors'));
         }
         $all_status = YITH_Commissions()->get_status();
         $action_url = admin_url('admin.php');
         $args = array('action' => 'yith_commission_table_actions', 'commission_id' => $rec->id);
         foreach ($all_status as $status => $display) {
             if ($status == 'processing' || !YITH_Commissions()->is_status_changing_permitted($status, $rec->status)) {
                 continue;
             }
             $args['new_status'] = $status;
             $action_url = add_query_arg($args, $action_url);
             printf('<a class="action-link" href="%1$s"><mark data-tip="%2$s" class="%3$s tips">%2$s</mark></a>', $action_url, __('Change status to', 'yith_wc_product_vendors') . ' ' . $display, $status);
         }
     }
 }
<?php

/*
 * This file belongs to the YIT Framework.
 *
 * This source file is subject to the GNU GENERAL PUBLIC LICENSE (GPL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://www.gnu.org/licenses/gpl-3.0.txt
 */
// merge Unpaid with Processing
$views = array('all' => __('All', 'yith_wc_product_vendors')) + YITH_Commissions()->get_status();
$views['unpaid'] .= '/' . $views['processing'];
unset($views['processing']);
return apply_filters('yith_wcqw_panel_commissions_options', array('commissions' => array('commissions_default_table_view' => array('title' => __('Commission page view', 'yith_wc_product_vendors'), 'type' => 'select', 'default' => 'unpaid', 'desc' => __('Select the default view for commission page', 'yith_wc_product_vendors'), 'id' => 'yith_commissions_default_table_view', 'options' => $views), 'commissions_default_coupon_handling' => array('title' => __('Coupon handling', 'yith_wc_product_vendors'), 'type' => 'checkbox', 'default' => 'yes', 'desc' => __('Include coupons in commission calculations', 'yith_wc_product_vendors'), 'desc_tip' => __('Decide whether vendor commissions have to be calculated including coupon value or not.', 'yith_wc_product_vendors'), 'id' => 'yith_wpv_include_coupon'), 'commissions_default_tax_handling' => array('title' => __('Tax handling', 'yith_wc_product_vendors'), 'type' => 'checkbox', 'default' => 'no', 'desc' => __('Include tax in commission calculations', 'yith_wc_product_vendors'), 'desc_tip' => __('Decide whether vendor commissions have to be calculated including tax value or not.', 'yith_wc_product_vendors'), 'id' => 'yith_wpv_include_tax'))), 'commissions');
Example #8
0
 /**
  * Get all unpaid commissions, if the sum amount is out threshold
  *
  * @return array|null
  */
 public function get_unpaid_commissions_if_out_threshold()
 {
     if ($this->get_unpaid_commissions_amount() < $this->threshold) {
         return array();
     }
     $args = array('vendor_id' => $this->id, 'order_id' => '', 'status' => 'unpaid');
     return YITH_Commissions()->get_commissions($args);
 }
 /**
  * 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;
     }
 }
        {
            global $pagenow;
            if ($product && 'post.php' == $pagenow && isset($_GET['post']) && ($order = wc_get_order($_GET['post']))) {
                $line_items = $order->get_items('line_item');
                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, '_commission_id', true);
                        $admin_url = YITH_Commission($commission_id)->get_view_url('admin');
                        $attribute_label = '_commission_id' == $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;
        }
    }
}
/**
 * Main instance of plugin
 *
 * @return YITH_Commissions
 * @since  1.0
 * @author Andrea Grillo <*****@*****.**>
 */
if (!function_exists('YITH_Commissions')) {
    function YITH_Commissions()
    {
        return YITH_Commissions::instance();
    }
}
YITH_Commissions();
						<h3 class="hndle ui-sortable-handle"><span><?php 
    _e('Commission Actions', 'yith_wc_product_vendors');
    ?>
</span></h3>
						<div class="inside">
							<ul class="order_actions submitbox">

								<li class="wide" id="actions">
									<select name="new_status">
										<option value=""><?php 
    _e('Actions', 'yith_wc_product_vendors');
    ?>
</option>
										<?php 
    foreach (YITH_Commissions()->get_status() as $status => $display) {
        if (!YITH_Commissions()->is_status_changing_permitted($status, $commission->status)) {
            continue;
        }
        ?>
											<option value="<?php 
        echo $status;
        ?>
"><?php 
        printf(__('Change to %s'), $display);
        ?>
</option>
										<?php 
    }
    ?>
									</select>
 /**
  * Change amount to the commission and user associated
  *
  * @param $amount
  * @param string $note
  *
  * @since 1.0
  */
 public function update_amount($amount, $note = '')
 {
     // change amount to this commission
     $this->amount += $amount;
     // add a note
     $this->add_note($note);
     // update credit into the user
     YITH_Commissions()->update_credit_to_user($this->user_id, $amount);
 }
 public function check_awaiting_payment($posted)
 {
     // Insert or update the post data
     $order_id = absint(WC()->session->order_awaiting_payment);
     // Resume the unpaid order if its pending
     if ($order_id > 0 && ($order = wc_get_order($order_id)) && $order->has_status(array('pending', 'failed'))) {
         $suborder_ids = $this->get_suborder($order_id);
         YITH_Commissions()->bulk_action($suborder_ids, 'delete');
         foreach ($suborder_ids as $suborder_id) {
             wc_delete_shop_order_transients($suborder_id);
             wp_delete_post($suborder_id, true);
         }
     }
 }
 /**
  * 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;
             }
         }
     }
 }