/** * Add a tax row to the order. * @param array $args * @param int $tax_amount amount of tax. * @param int $shipping_tax_amount shipping amount. * @return int order item ID */ public function add_tax($tax_rate_id, $tax_amount = 0, $shipping_tax_amount = 0) { _deprecated_function('WC_Order::add_tax', '2.7', 'Create new WC_Order_Item_Tax object and add to order with WC_Order::add_item()'); $item = new WC_Order_Item_Tax(array('rate_id' => $tax_rate_id, 'tax_total' => $tax_amount, 'shipping_tax_total' => $shipping_tax_amount)); $item->set_rate($tax_rate_id); $item->set_order_id($this->get_id()); $item->save(); $this->add_item($item); wc_do_deprecated_action('woocommerce_order_add_tax', array($this->get_id(), $item->get_id(), $tax_rate_id, $tax_amount, $shipping_tax_amount), '2.7', 'Use woocommerce_new_order_item action instead.'); return $item->get_id(); }
/** * Update tax lines for the order based on the line item taxes themselves. */ public function update_taxes() { $cart_taxes = array(); $shipping_taxes = array(); foreach ($this->get_items(array('line_item', 'fee')) as $item_id => $item) { $taxes = $item->get_taxes(); foreach ($taxes['total'] as $tax_rate_id => $tax) { $cart_taxes[$tax_rate_id] = isset($cart_taxes[$tax_rate_id]) ? $cart_taxes[$tax_rate_id] + $tax : $tax; } } foreach ($this->get_shipping_methods() as $item_id => $item) { $taxes = $item->get_taxes(); foreach ($taxes['total'] as $tax_rate_id => $tax) { $shipping_taxes[$tax_rate_id] = isset($shipping_taxes[$tax_rate_id]) ? $shipping_taxes[$tax_rate_id] + $tax : $tax; } } // Remove old existing tax rows. $this->remove_order_items('tax'); // Now merge to keep tax rows. foreach (array_keys($cart_taxes + $shipping_taxes) as $tax_rate_id) { $item = new WC_Order_Item_Tax(); $item->set_rate($tax_rate_id); $item->set_tax_total(isset($cart_taxes[$tax_rate_id]) ? $cart_taxes[$tax_rate_id] : 0); $item->set_shipping_tax_total(isset($shipping_taxes[$tax_rate_id]) ? $shipping_taxes[$tax_rate_id] : 0); $this->add_item($item); } // Save tax totals $this->set_shipping_tax(WC_Tax::round(array_sum($shipping_taxes))); $this->set_cart_tax(WC_Tax::round(array_sum($cart_taxes))); $this->save(); }
/** * Add tax lines to the order. * * @param WC_Order $order */ protected function create_order_tax_lines(&$order) { foreach (array_keys(WC()->cart->taxes + WC()->cart->shipping_taxes) as $tax_rate_id) { if ($tax_rate_id && apply_filters('woocommerce_cart_remove_taxes_zero_rate_id', 'zero-rated') !== $tax_rate_id) { $item = new WC_Order_Item_Tax(); $item->set_props(array('rate_id' => $tax_rate_id, 'tax_total' => WC()->cart->get_tax_amount($tax_rate_id), 'shipping_tax_total' => WC()->cart->get_shipping_tax_amount($tax_rate_id), 'rate_code' => WC_Tax::get_rate_code($tax_rate_id), 'label' => WC_Tax::get_rate_label($tax_rate_id), 'compound' => WC_Tax::is_compound($tax_rate_id))); $order->add_item($item); } } }
/** * Test: get_taxes */ function test_get_taxes() { global $wpdb; update_option('woocommerce_calc_taxes', 'yes'); $tax_rate = array('tax_rate_country' => '', 'tax_rate_state' => '', 'tax_rate' => '10.0000', 'tax_rate_name' => 'TAX', 'tax_rate_priority' => '1', 'tax_rate_compound' => '0', 'tax_rate_shipping' => '1', 'tax_rate_order' => '1', 'tax_rate_class' => ''); WC_Tax::_insert_tax_rate($tax_rate); $object = new WC_Order(); $item_1 = new WC_Order_Item_Product(); $item_1->set_props(array('product' => WC_Helper_Product::create_simple_product(), 'quantity' => 4)); $object->add_item($item_1); $object->calculate_totals(); $this->assertCount(1, $object->get_taxes()); $item = new WC_Order_Item_Tax(); $item->set_rate(100); $item->set_tax_total(100); $item->set_shipping_tax_total(100); $object->add_item($item); $object->save(); $this->assertCount(2, $object->get_taxes()); // Cleanup $wpdb->query("DELETE FROM {$wpdb->prefix}woocommerce_tax_rates"); $wpdb->query("DELETE FROM {$wpdb->prefix}woocommerce_tax_rate_locations"); update_option('woocommerce_calc_taxes', 'no'); }
/** * Add order tax column via ajax. */ public static function add_order_tax() { global $wpdb; check_ajax_referer('order-item', 'security'); if (!current_user_can('edit_shop_orders')) { die(-1); } try { $order_id = absint($_POST['order_id']); $rate_id = absint($_POST['rate_id']); $order = wc_get_order($order_id); $data = get_post_meta($order_id); // Add new tax $item = new WC_Order_Item_Tax(); $item->set_rate($rate_id); $item->set_order_id($order_id); $item->save(); ob_start(); include 'admin/meta-boxes/views/html-order-items.php'; wp_send_json_success(array('html' => ob_get_clean())); } catch (Exception $e) { wp_send_json_error(array('error' => $e->getMessage())); } die; }
/** * Add order tax column via ajax. */ public static function add_order_tax() { global $wpdb; check_ajax_referer('order-item', 'security'); if (!current_user_can('edit_shop_orders')) { die(-1); } $order_id = absint($_POST['order_id']); $rate_id = absint($_POST['rate_id']); $order = wc_get_order($order_id); $data = get_post_meta($order_id); // Add new tax $item = new WC_Order_Item_Tax(); $item->set_rate($rate_id); $item->set_order_id($order_id); $item->save(); // Return HTML items include 'admin/meta-boxes/views/html-order-items.php'; die; }