/** * 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(); } } }
/** * 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');
/** * 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; } } } }