/** * * * @param unknown $order_id */ public function trs2_retrieve_shipping_data($order_id) { global $woocommerce; if (!empty(WCV_Shipping::$trs2_shipping_rates)) { return; } WCV_Shipping::$trs2_shipping_rates = array_filter((array) get_post_meta($order_id, '_wcvendors_trs2_shipping_rates', true)); WCV_Shipping::$trs2_shipping_calc_type = get_post_meta($order_id, '_wcvendors_trs2_shipping_calc_type', true); }
/** * * * @param unknown $order * @param unknown $group (optional) * * @return unknown */ public static function get_vendor_dues_from_order($order, $group = true) { global $woocommerce; $give_tax = WC_Vendors::$pv_options->get_option('give_tax'); $give_shipping = WC_Vendors::$pv_options->get_option('give_shipping'); $receiver = array(); $shipping_given = 0; $tax_given = 0; WCV_Shipping::$pps_shipping_costs = array(); foreach ($order->get_items() as $key => $product) { $product_id = !empty($product['variation_id']) ? $product['variation_id'] : $product['product_id']; $author = WCV_Vendors::get_vendor_from_product($product_id); $give_tax_override = get_user_meta($author, 'wcv_give_vendor_tax', true); $give_shipping_override = get_user_meta($author, 'wcv_give_vendor_shipping', true); $is_vendor = WCV_Vendors::is_vendor($author); $commission = $is_vendor ? WCV_Commission::calculate_commission($product['line_subtotal'], $product_id, $order) : 0; $tax = !empty($product['line_tax']) ? (double) $product['line_tax'] : 0; // Check if shipping is enabled if (get_option('woocommerce_calc_shipping') === 'no') { $shipping = 0; $shipping_tax = 0; } else { $shipping_costs = WCV_Shipping::get_shipping_due($order->id, $product, $author); $shipping = $shipping_costs['amount']; $shipping_tax = $shipping_costs['tax']; } // Add line item tax and shipping taxes together $total_tax = (double) $tax + (double) $shipping_tax; // Tax override on a per vendor basis if ($give_tax_override) { $give_tax = true; } // Shipping override if ($give_shipping_override) { $give_shipping = true; } if ($is_vendor) { $shipping_given += $give_shipping ? $shipping : 0; $tax_given += $give_tax ? $total_tax : 0; $give = 0; $give += !empty($receiver[$author]['total']) ? $receiver[$author]['total'] : 0; $give += $give_shipping ? $shipping : 0; $give += $commission; $give += $give_tax ? $total_tax : 0; if ($group) { $receiver[$author] = array('vendor_id' => (int) $author, 'commission' => !empty($receiver[$author]['commission']) ? $receiver[$author]['commission'] + $commission : $commission, 'shipping' => $give_shipping ? !empty($receiver[$author]['shipping']) ? $receiver[$author]['shipping'] + $shipping : $shipping : 0, 'tax' => $give_tax ? !empty($receiver[$author]['tax']) ? $receiver[$author]['tax'] + $total_tax : $total_tax : 0, 'qty' => !empty($receiver[$author]['qty']) ? $receiver[$author]['qty'] + $product['qty'] : $product['qty'], 'total' => $give); } else { $receiver[$author][$key] = array('vendor_id' => (int) $author, 'product_id' => $product_id, 'commission' => $commission, 'shipping' => $give_shipping ? $shipping : 0, 'tax' => $give_tax ? $total_tax : 0, 'qty' => $product['qty'], 'total' => ($give_shipping ? $shipping : 0) + $commission + ($give_tax ? $total_tax : 0)); } } $admin_comm = $product['line_subtotal'] - $commission; if ($group) { $receiver[1] = array('vendor_id' => 1, 'qty' => !empty($receiver[1]['qty']) ? $receiver[1]['qty'] + $product['qty'] : $product['qty'], 'commission' => !empty($receiver[1]['commission']) ? $receiver[1]['commission'] + $admin_comm : $admin_comm, 'total' => !empty($receiver[1]) ? $receiver[1]['total'] + $admin_comm : $admin_comm); } else { $receiver[1][$key] = array('vendor_id' => 1, 'product_id' => $product_id, 'commission' => $admin_comm, 'shipping' => 0, 'tax' => 0, 'qty' => $product['qty'], 'total' => $admin_comm); } } // Add remainders on end to admin $discount = $order->get_total_discount(); $shipping = $order->order_shipping - $shipping_given; $tax = round($order->order_tax + $order->order_shipping_tax - $tax_given, 2); $total = $tax + $shipping - $discount; if ($group) { $receiver[1]['commission'] = $receiver[1]['commission'] - $discount; $receiver[1]['shipping'] = $shipping; $receiver[1]['tax'] = $tax; $receiver[1]['total'] += $total; } else { $receiver[1][$key]['commission'] = $receiver[1][$key]['commission'] - $discount; $receiver[1][$key]['shipping'] = $order->order_shipping - $shipping_given; $receiver[1][$key]['tax'] = $tax; $receiver[1][$key]['total'] += $total; } // Reset the array keys // $receivers = array_values( $receiver ); return $receiver; }