当前位置: 首页>>代码示例>>PHP>>正文


PHP WC_Tax::calc_shipping_tax方法代码示例

本文整理汇总了PHP中WC_Tax::calc_shipping_tax方法的典型用法代码示例。如果您正苦于以下问题:PHP WC_Tax::calc_shipping_tax方法的具体用法?PHP WC_Tax::calc_shipping_tax怎么用?PHP WC_Tax::calc_shipping_tax使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在WC_Tax的用法示例。


在下文中一共展示了WC_Tax::calc_shipping_tax方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: create_order

 /**
  * Create a order.
  *
  * @since 2.4
  *
  * @return WC_Order Order object.
  */
 public static function create_order()
 {
     // Create product
     $product = WC_Helper_Product::create_simple_product();
     WC_Helper_Shipping::create_simple_flat_rate();
     $order_data = array('status' => 'pending', 'customer_id' => 1, 'customer_note' => '', 'total' => '');
     $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
     // Required, else wc_create_order throws an exception
     $order = wc_create_order($order_data);
     // Add order products
     $item_id = $order->add_product($product, 4);
     // Set billing address
     $billing_address = array('country' => 'US', 'first_name' => 'Jeroen', 'last_name' => 'Sormani', 'company' => 'WooCompany', 'address_1' => 'WooAddress', 'address_2' => '', 'postcode' => '123456', 'city' => 'WooCity', 'state' => 'NY', 'email' => 'admin@example.org', 'phone' => '555-32123');
     $order->set_address($billing_address, 'billing');
     // Add shipping costs
     $shipping_taxes = WC_Tax::calc_shipping_tax('10', WC_Tax::get_shipping_tax_rates());
     $order->add_shipping(new WC_Shipping_Rate('flat_rate_shipping', 'Flat rate shipping', '10', $shipping_taxes, 'flat_rate'));
     // Set payment gateway
     $payment_gateways = WC()->payment_gateways->payment_gateways();
     $order->set_payment_method($payment_gateways['bacs']);
     // Set totals
     $order->set_total(10, 'shipping');
     $order->set_total(0, 'cart_discount');
     $order->set_total(0, 'cart_discount_tax');
     $order->set_total(0, 'tax');
     $order->set_total(0, 'shipping_tax');
     $order->set_total(40, 'total');
     // 4 x $10 simple helper product
     return wc_get_order($order->id);
 }
开发者ID:bitoncoin,项目名称:woocommerce,代码行数:37,代码来源:class-wc-helper-order.php

示例2: create_order

 /**
  * Create a order.
  *
  * @since 2.4
  *
  * @return WC_Order Order object.
  */
 public static function create_order($customer_id = 1)
 {
     // Create product
     $product = WC_Helper_Product::create_simple_product();
     WC_Helper_Shipping::create_simple_flat_rate();
     $order_data = array('status' => 'pending', 'customer_id' => $customer_id, 'customer_note' => '', 'total' => '');
     $_SERVER['REMOTE_ADDR'] = '127.0.0.1';
     // Required, else wc_create_order throws an exception
     $order = wc_create_order($order_data);
     // Add order products
     $order->add_product($product, 4);
     // Set billing address
     $order->set_billing_first_name('Jeroen');
     $order->set_billing_last_name('Sormani');
     $order->set_billing_company('WooCompany');
     $order->set_billing_address_1('WooAddress');
     $order->set_billing_address_2('');
     $order->set_billing_city('WooCity');
     $order->set_billing_state('NY');
     $order->set_billing_postcode('123456');
     $order->set_billing_country('US');
     $order->set_billing_email('admin@example.org');
     $order->set_billing_phone('555-32123');
     // Add shipping costs
     $shipping_taxes = WC_Tax::calc_shipping_tax('10', WC_Tax::get_shipping_tax_rates());
     $rate = new WC_Shipping_Rate('flat_rate_shipping', 'Flat rate shipping', '10', $shipping_taxes, 'flat_rate');
     $item = new WC_Order_Item_Shipping();
     $item->set_props(array('method_title' => $rate->label, 'method_id' => $rate->id, 'total' => wc_format_decimal($rate->cost), 'taxes' => $rate->taxes, 'meta_data' => $rate->get_meta_data()));
     $order->add_item($item);
     // Set payment gateway
     $payment_gateways = WC()->payment_gateways->payment_gateways();
     $order->set_payment_method($payment_gateways['bacs']);
     // Set totals
     $order->set_shipping_total(10);
     $order->set_discount_total(0);
     $order->set_discount_tax(0);
     $order->set_cart_tax(0);
     $order->set_shipping_tax(0);
     $order->set_total(40);
     // 4 x $10 simple helper product
     $order->save();
     return $order;
 }
开发者ID:woocommerce,项目名称:woocommerce,代码行数:50,代码来源:class-wc-helper-order.php

示例3: array

 /**
  * Add a rate
  *
  * A a shipping rate. If taxes are not set they will be calculated based on cost.
  */
 function add_rate($args = array())
 {
     global $woocommerce;
     $defaults = array('id' => '', 'label' => '', 'cost' => '0', 'taxes' => '', 'calc_tax' => 'per_order');
     $args = wp_parse_args($args, $defaults);
     extract($args);
     // Id and label are required
     if (!$id || !$label) {
         return;
     }
     // Handle cost
     $total_cost = is_array($cost) ? array_sum($cost) : $cost;
     // Taxes - if not an array and not set to false, calc tax based on cost and passed calc_tax variable
     // This saves shipping methods having to do compelex tax calculations
     if (!is_array($taxes) && $taxes !== false && $total_cost > 0 && get_option('woocommerce_calc_taxes') == 'yes' && $this->tax_status == 'taxable') {
         $_tax = new WC_Tax();
         $taxes = array();
         switch ($calc_tax) {
             case "per_item":
                 // If we have an array of costs we can look up each items tax class and add tax accordingly
                 if (is_array($cost)) {
                     $cart = $woocommerce->cart->get_cart();
                     foreach ($cost as $cost_key => $amount) {
                         if (!isset($cart[$cost_key])) {
                             continue;
                         }
                         $_product = $cart[$cost_key]['data'];
                         $rates = $_tax->get_shipping_tax_rates($_product->get_tax_class());
                         $item_taxes = $_tax->calc_shipping_tax($amount, $rates);
                         // Sum the item taxes
                         foreach (array_keys($taxes + $item_taxes) as $key) {
                             $taxes[$key] = (isset($item_taxes[$key]) ? $item_taxes[$key] : 0) + (isset($taxes[$key]) ? $taxes[$key] : 0);
                         }
                     }
                     // Add any cost for the order - order costs are in the key 'order'
                     if (isset($cost['order'])) {
                         $rates = $_tax->get_shipping_tax_rates();
                         $item_taxes = $_tax->calc_shipping_tax($cost['order'], $rates);
                         // Sum the item taxes
                         foreach (array_keys($taxes + $item_taxes) as $key) {
                             $taxes[$key] = (isset($item_taxes[$key]) ? $item_taxes[$key] : 0) + (isset($taxes[$key]) ? $taxes[$key] : 0);
                         }
                     }
                 }
                 break;
             default:
                 $rates = $_tax->get_shipping_tax_rates();
                 $taxes = $_tax->calc_shipping_tax($total_cost, $rates);
                 break;
         }
     }
     $this->rates[] = new WC_Shipping_Rate($id, $label, $total_cost, $taxes);
 }
开发者ID:rosslavery,项目名称:woocommerce,代码行数:58,代码来源:class-wc-shipping-method.php

示例4: calculate_shipping

 /**
  * Calculate shipping when this method is used standalone.
  */
 public function calculate_shipping($package)
 {
     $_tax = new WC_Tax();
     $taxes = array();
     $shipping_cost = 0;
     // This shipping method loops through products, adding up the cost
     if (sizeof($package['contents']) > 0) {
         foreach ($package['contents'] as $item_id => $values) {
             if ($values['quantity'] > 0) {
                 if ($values['data']->needs_shipping()) {
                     $rule = false;
                     $item_shipping_cost = 0;
                     if ($values['variation_id']) {
                         $rule = woocommerce_per_product_shipping_get_matching_rule($values['variation_id'], $package);
                     }
                     if ($rule === false) {
                         $rule = woocommerce_per_product_shipping_get_matching_rule($values['product_id'], $package);
                     }
                     if ($rule) {
                         $item_shipping_cost += $rule->rule_item_cost * $values['quantity'];
                         $item_shipping_cost += $rule->rule_cost;
                     } elseif ($this->cost === '0' || $this->cost > 0) {
                         // Use default
                         $item_shipping_cost += $this->cost * $values['quantity'];
                     } else {
                         // NO default and nothing found - abort
                         return;
                     }
                     // Fee
                     $item_shipping_cost += $this->get_fee($this->fee, $item_shipping_cost) * $values['quantity'];
                     $shipping_cost += $item_shipping_cost;
                     if (get_option('woocommerce_calc_taxes') == 'yes' && $this->tax_status == 'taxable') {
                         $rates = $_tax->get_shipping_tax_rates($values['data']->get_tax_class());
                         $item_taxes = $_tax->calc_shipping_tax($item_shipping_cost, $rates);
                         // Sum the item taxes
                         foreach (array_keys($taxes + $item_taxes) as $key) {
                             $taxes[$key] = (isset($item_taxes[$key]) ? $item_taxes[$key] : 0) + (isset($taxes[$key]) ? $taxes[$key] : 0);
                         }
                     }
                 }
             }
         }
     }
     // Add order shipping cost + tax
     if ($this->order_fee) {
         $order_fee = $this->get_fee($this->order_fee, $shipping_cost);
         $shipping_cost += $order_fee;
         if (get_option('woocommerce_calc_taxes') == 'yes' && $this->tax_status == 'taxable') {
             $rates = $_tax->get_shipping_tax_rates();
             $item_taxes = $_tax->calc_shipping_tax($order_fee, $rates);
             // Sum the item taxes
             foreach (array_keys($taxes + $item_taxes) as $key) {
                 $taxes[$key] = (isset($item_taxes[$key]) ? $item_taxes[$key] : 0) + (isset($taxes[$key]) ? $taxes[$key] : 0);
             }
         }
     }
     // Add rate
     $this->add_rate(array('id' => $this->id, 'label' => $this->title, 'cost' => $shipping_cost, 'taxes' => $taxes));
 }
开发者ID:NoviumDesign,项目名称:polefitness,代码行数:62,代码来源:class-wc-shipping-per-product.php

示例5: calculate_recurring_line_taxes

 /**
  * Calculate recurring line taxes when a store manager clicks the "Calc Line Tax" button on the "Edit Order" page.
  *
  * Based on the @see woocommerce_calc_line_taxes() function.
  * @since 1.2.4
  * @return void
  */
 public static function calculate_recurring_line_taxes()
 {
     global $woocommerce, $wpdb;
     check_ajax_referer('woocommerce-subscriptions', 'security');
     $tax = new WC_Tax();
     $taxes = $tax_rows = $item_taxes = $shipping_taxes = $return = array();
     $item_tax = 0;
     $order_id = absint($_POST['order_id']);
     $country = strtoupper(esc_attr($_POST['country']));
     $state = strtoupper(esc_attr($_POST['state']));
     $postcode = strtoupper(esc_attr($_POST['postcode']));
     $tax_class = esc_attr($_POST['tax_class']);
     if (isset($_POST['city'])) {
         $city = sanitize_title(esc_attr($_POST['city']));
     }
     $shipping = $_POST['shipping'];
     $line_subtotal = isset($_POST['line_subtotal']) ? esc_attr($_POST['line_subtotal']) : 0;
     $line_total = isset($_POST['line_total']) ? esc_attr($_POST['line_total']) : 0;
     $product_id = '';
     if (isset($_POST['order_item_id'])) {
         $product_id = woocommerce_get_order_item_meta($_POST['order_item_id'], '_product_id');
     } elseif (isset($_POST['product_id'])) {
         $product_id = esc_attr($_POST['product_id']);
     }
     if (!empty($product_id) && WC_Subscriptions_Product::is_subscription($product_id)) {
         // Get product details
         $product = WC_Subscriptions::get_product($product_id);
         $item_tax_status = $product->get_tax_status();
         if ($item_tax_status == 'taxable') {
             $tax_rates = $tax->find_rates(array('country' => $country, 'state' => $state, 'postcode' => $postcode, 'city' => $city, 'tax_class' => $tax_class));
             $line_subtotal_taxes = $tax->calc_tax($line_subtotal, $tax_rates, false);
             $line_taxes = $tax->calc_tax($line_total, $tax_rates, false);
             $line_subtotal_tax = $tax->round(array_sum($line_subtotal_taxes));
             $line_tax = $tax->round(array_sum($line_taxes));
             if ($line_subtotal_tax < 0) {
                 $line_subtotal_tax = 0;
             }
             if ($line_tax < 0) {
                 $line_tax = 0;
             }
             $return = array('recurring_line_subtotal_tax' => $line_subtotal_tax, 'recurring_line_tax' => $line_tax);
             // Sum the item taxes
             foreach (array_keys($taxes + $line_taxes) as $key) {
                 $taxes[$key] = (isset($line_taxes[$key]) ? $line_taxes[$key] : 0) + (isset($taxes[$key]) ? $taxes[$key] : 0);
             }
         }
         // Now calculate shipping tax
         $matched_tax_rates = array();
         $tax_rates = $tax->find_rates(array('country' => $country, 'state' => $state, 'postcode' => $postcode, 'city' => $city, 'tax_class' => ''));
         if ($tax_rates) {
             foreach ($tax_rates as $key => $rate) {
                 if (isset($rate['shipping']) && $rate['shipping'] == 'yes') {
                     $matched_tax_rates[$key] = $rate;
                 }
             }
         }
         $shipping_taxes = $tax->calc_shipping_tax($shipping, $matched_tax_rates);
         $shipping_tax = $tax->round(array_sum($shipping_taxes));
         $return['recurring_shipping_tax'] = $shipping_tax;
         // Remove old tax rows
         $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}woocommerce_order_itemmeta WHERE order_item_id IN ( SELECT order_item_id FROM {$wpdb->prefix}woocommerce_order_items WHERE order_id = %d AND order_item_type = 'recurring_tax' )", $order_id));
         $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}woocommerce_order_items WHERE order_id = %d AND order_item_type = 'recurring_tax'", $order_id));
         // Get tax rates
         $rates = $wpdb->get_results("SELECT tax_rate_id, tax_rate_country, tax_rate_state, tax_rate_name, tax_rate_priority FROM {$wpdb->prefix}woocommerce_tax_rates ORDER BY tax_rate_name");
         $tax_codes = array();
         foreach ($rates as $rate) {
             $code = array();
             $code[] = $rate->tax_rate_country;
             $code[] = $rate->tax_rate_state;
             $code[] = $rate->tax_rate_name ? sanitize_title($rate->tax_rate_name) : 'TAX';
             $code[] = absint($rate->tax_rate_priority);
             $tax_codes[$rate->tax_rate_id] = strtoupper(implode('-', array_filter($code)));
         }
         // Now merge to keep tax rows
         ob_start();
         foreach (array_keys($taxes + $shipping_taxes) as $key) {
             $item = array();
             $item['rate_id'] = $key;
             $item['name'] = $tax_codes[$key];
             $item['label'] = $tax->get_rate_label($key);
             $item['compound'] = $tax->is_compound($key) ? 1 : 0;
             $item['tax_amount'] = $tax->round(isset($taxes[$key]) ? $taxes[$key] : 0);
             $item['shipping_tax_amount'] = $tax->round(isset($shipping_taxes[$key]) ? $shipping_taxes[$key] : 0);
             if (!$item['label']) {
                 $item['label'] = $woocommerce->countries->tax_or_vat();
             }
             // Add line item
             $item_id = woocommerce_add_order_item($order_id, array('order_item_name' => $item['name'], 'order_item_type' => 'recurring_tax'));
             // Add line item meta
             if ($item_id) {
                 woocommerce_add_order_item_meta($item_id, 'rate_id', $item['rate_id']);
                 woocommerce_add_order_item_meta($item_id, 'label', $item['label']);
                 woocommerce_add_order_item_meta($item_id, 'compound', $item['compound']);
//.........这里部分代码省略.........
开发者ID:akshayxhtmljunkies,项目名称:brownglock,代码行数:101,代码来源:class-wc-subscriptions-order.php

示例6: test_calc_shipping_tax

 /**
  * Shipping tax amounts.
  */
 public function test_calc_shipping_tax()
 {
     global $wpdb;
     $wpdb->query("DELETE FROM {$wpdb->prefix}woocommerce_tax_rates");
     $wpdb->query("DELETE FROM {$wpdb->prefix}woocommerce_tax_rate_locations");
     $tax_rate = array('tax_rate_country' => 'GB', 'tax_rate_state' => '', 'tax_rate' => '20.0000', 'tax_rate_name' => 'VAT', 'tax_rate_priority' => '1', 'tax_rate_compound' => '0', 'tax_rate_shipping' => '1', 'tax_rate_order' => '1', 'tax_rate_class' => '');
     $tax_rate_id = WC_Tax::_insert_tax_rate($tax_rate);
     $tax_rates = WC_Tax::find_rates(array('country' => 'GB', 'state' => 'Cambs', 'postcode' => 'PE14 1XX', 'city' => 'Somewhere', 'tax_class' => ''));
     $calced_tax = WC_Tax::calc_shipping_tax('10', $tax_rates);
     $this->assertEquals($calced_tax, array($tax_rate_id => '2'));
     WC_Tax::_delete_tax_rate($tax_rate_id);
 }
开发者ID:Korkey128k,项目名称:woocommerce,代码行数:15,代码来源:tax.php

示例7: calculate_taxes

 /**
  * Calculate taxes for all line items and shipping, and store the totals and tax rows.
  *
  * Will use the base country unless customer addresses are set.
  *
  * @return bool success or fail
  */
 public function calculate_taxes()
 {
     $tax_total = 0;
     $taxes = array();
     $tax_based_on = get_option('woocommerce_tax_based_on');
     if ('billing' === $tax_based_on) {
         $country = $this->billing_country;
         $state = $this->billing_state;
         $postcode = $this->billing_postcode;
         $city = $this->billing_city;
     } elseif ('shipping' === $tax_based_on) {
         $country = $this->shipping_country;
         $state = $this->shipping_state;
         $postcode = $this->shipping_postcode;
         $city = $this->shipping_city;
     }
     // Default to base
     if ('base' === $tax_based_on || empty($country)) {
         $default = wc_get_base_location();
         $country = $default['country'];
         $state = $default['state'];
         $postcode = '';
         $city = '';
     }
     // Get items
     foreach ($this->get_items(array('line_item', 'fee')) as $item_id => $item) {
         $product = $this->get_product_from_item($item);
         $line_total = isset($item['line_total']) ? $item['line_total'] : 0;
         $line_subtotal = isset($item['line_subtotal']) ? $item['line_subtotal'] : 0;
         $tax_class = $item['tax_class'];
         $item_tax_status = $product ? $product->get_tax_status() : 'taxable';
         if ('0' !== $tax_class && 'taxable' === $item_tax_status) {
             $tax_rates = WC_Tax::find_rates(array('country' => $country, 'state' => $state, 'postcode' => $postcode, 'city' => $city, 'tax_class' => $tax_class));
             $line_subtotal_taxes = WC_Tax::calc_tax($line_subtotal, $tax_rates, false);
             $line_taxes = WC_Tax::calc_tax($line_total, $tax_rates, false);
             $line_subtotal_tax = max(0, array_sum($line_subtotal_taxes));
             $line_tax = max(0, array_sum($line_taxes));
             $tax_total += $line_tax;
             wc_update_order_item_meta($item_id, '_line_subtotal_tax', wc_format_decimal($line_subtotal_tax));
             wc_update_order_item_meta($item_id, '_line_tax', wc_format_decimal($line_tax));
             wc_update_order_item_meta($item_id, '_line_tax_data', array('total' => $line_taxes, 'subtotal' => $line_subtotal_taxes));
             // Sum the item taxes
             foreach (array_keys($taxes + $line_taxes) as $key) {
                 $taxes[$key] = (isset($line_taxes[$key]) ? $line_taxes[$key] : 0) + (isset($taxes[$key]) ? $taxes[$key] : 0);
             }
         }
     }
     // Now calculate shipping tax
     $matched_tax_rates = array();
     $tax_rates = WC_Tax::find_rates(array('country' => $country, 'state' => $state, 'postcode' => $postcode, 'city' => $city, 'tax_class' => ''));
     if (!empty($tax_rates)) {
         foreach ($tax_rates as $key => $rate) {
             if (isset($rate['shipping']) && 'yes' === $rate['shipping']) {
                 $matched_tax_rates[$key] = $rate;
             }
         }
     }
     $shipping_taxes = WC_Tax::calc_shipping_tax($this->order_shipping, $matched_tax_rates);
     $shipping_tax_total = WC_Tax::round(array_sum($shipping_taxes));
     // Save tax totals
     $this->set_total($shipping_tax_total, 'shipping_tax');
     $this->set_total($tax_total, 'tax');
     // Tax rows
     $this->remove_order_items('tax');
     // Now merge to keep tax rows
     foreach (array_keys($taxes + $shipping_taxes) as $tax_rate_id) {
         $this->add_tax($tax_rate_id, isset($taxes[$tax_rate_id]) ? $taxes[$tax_rate_id] : 0, isset($shipping_taxes[$tax_rate_id]) ? $shipping_taxes[$tax_rate_id] : 0);
     }
     return true;
 }
开发者ID:danisdead,项目名称:gastrointernacional,代码行数:77,代码来源:abstract-wc-order.php

示例8: get_taxes_per_item

 /**
  * Calc taxes per item being shipping in costs array.
  * @since 2.6.0
  * @access protected
  * @param  array $costs
  * @return array of taxes
  */
 protected function get_taxes_per_item($costs)
 {
     $taxes = array();
     // If we have an array of costs we can look up each items tax class and add tax accordingly
     if (is_array($costs)) {
         $cart = WC()->cart->get_cart();
         foreach ($costs as $cost_key => $amount) {
             if (!isset($cart[$cost_key])) {
                 continue;
             }
             $item_taxes = WC_Tax::calc_shipping_tax($amount, WC_Tax::get_shipping_tax_rates($cart[$cost_key]['data']->get_tax_class()));
             // Sum the item taxes
             foreach (array_keys($taxes + $item_taxes) as $key) {
                 $taxes[$key] = (isset($item_taxes[$key]) ? $item_taxes[$key] : 0) + (isset($taxes[$key]) ? $taxes[$key] : 0);
             }
         }
         // Add any cost for the order - order costs are in the key 'order'
         if (isset($costs['order'])) {
             $item_taxes = WC_Tax::calc_shipping_tax($costs['order'], WC_Tax::get_shipping_tax_rates());
             // Sum the item taxes
             foreach (array_keys($taxes + $item_taxes) as $key) {
                 $taxes[$key] = (isset($item_taxes[$key]) ? $item_taxes[$key] : 0) + (isset($taxes[$key]) ? $taxes[$key] : 0);
             }
         }
     }
     return $taxes;
 }
开发者ID:jesusmarket,项目名称:jesusmarket,代码行数:34,代码来源:abstract-wc-shipping-method.php

示例9: calculate_shipping_tax

 /**
  * Calculate wcmp vendor shipping tax
  *
  * @param double $shipping_amount
  * @param object $order
  */
 public function calculate_shipping_tax($shipping_amount, $order)
 {
     global $WCMp, $woocommerce;
     $wc_tax_enabled = get_option('woocommerce_calc_taxes');
     if ('no' === $wc_tax_enabled) {
         return 0;
     }
     $tax_based_on = get_option('woocommerce_tax_based_on');
     $WC_Tax = new WC_Tax();
     if ('base' === $tax_based_on) {
         $default = wc_get_base_location();
         $country = $default['country'];
         $state = $default['state'];
         $postcode = '';
         $city = '';
     } elseif ('billing' === $tax_based_on) {
         $country = $order->billing_country;
         $state = $order->billing_state;
         $postcode = $order->billing_postcode;
         $city = $order->billing_city;
     } else {
         $country = $order->shipping_country;
         $state = $order->shipping_state;
         $postcode = $order->shipping_postcode;
         $city = $order->shipping_city;
     }
     $matched_tax_rates = array();
     $tax_rates = $WC_Tax->find_rates(array('country' => $country, 'state' => $state, 'postcode' => $postcode, 'city' => $city, 'tax_class' => ''));
     if ($tax_rates) {
         foreach ($tax_rates as $key => $rate) {
             if (isset($rate['shipping']) && 'yes' === $rate['shipping']) {
                 $matched_tax_rates[$key] = $rate;
             }
         }
     }
     $vendor_shipping_taxes = $WC_Tax->calc_shipping_tax($shipping_amount, $matched_tax_rates);
     $vendor_shipping_tax_total = $WC_Tax->round(array_sum($vendor_shipping_taxes));
     return $vendor_shipping_tax_total;
 }
开发者ID:qhuit,项目名称:UrbanPekor,代码行数:45,代码来源:class-wcmp-vendor-details.php

示例10: foreach

 /**
  * woocommerce_per_product_shipping_addition function.
  *
  * @access public
  * @return void
  */
 function woocommerce_per_product_shipping_addition($rates, $package)
 {
     global $woocommerce;
     $_tax = new WC_Tax();
     if ($rates) {
         foreach ($rates as $rate_id => $rate) {
             // Skip free shipping
             if ($rate->cost == 0 && apply_filters('woocommerce_per_product_shipping_skip_free_method_' . $rate->method_id, true)) {
                 continue;
             }
             // Skip self
             if ($rate->method_id == 'per_product') {
                 continue;
             }
             if (sizeof($package['contents']) > 0) {
                 foreach ($package['contents'] as $item_id => $values) {
                     if ($values['quantity'] > 0) {
                         if ($values['data']->needs_shipping()) {
                             $item_shipping_cost = 0;
                             $rule = false;
                             if ($values['variation_id']) {
                                 $rule = woocommerce_per_product_shipping_get_matching_rule($values['variation_id'], $package, false);
                             }
                             if ($rule === false) {
                                 $rule = woocommerce_per_product_shipping_get_matching_rule($values['product_id'], $package, false);
                             }
                             if (empty($rule)) {
                                 continue;
                             }
                             $item_shipping_cost += $rule->rule_item_cost * $values['quantity'];
                             $item_shipping_cost += $rule->rule_cost;
                             $rate->cost += $item_shipping_cost;
                             if ($woocommerce->shipping->shipping_methods[$rate->method_id]->tax_status == 'taxable') {
                                 $tax_rates = $_tax->get_shipping_tax_rates($values['data']->get_tax_class());
                                 $item_taxes = $_tax->calc_shipping_tax($item_shipping_cost, $tax_rates);
                                 // Sum the item taxes
                                 foreach (array_keys($rate->taxes + $item_taxes) as $key) {
                                     $rate->taxes[$key] = (isset($item_taxes[$key]) ? $item_taxes[$key] : 0) + (isset($rate->taxes[$key]) ? $rate->taxes[$key] : 0);
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     return $rates;
 }
开发者ID:cimocimocimo,项目名称:staydrysystems.com,代码行数:54,代码来源:shipping-per-product.php

示例11: add_rate

 /**
  * Add a rate
  *
  * Add a shipping rate. If taxes are not set they will be calculated based on cost.
  *
  * @param array $args (default: array())
  */
 public function add_rate($args = array())
 {
     $args = wp_parse_args($args, array('id' => '', 'label' => '', 'cost' => '0', 'taxes' => '', 'calc_tax' => 'per_order'));
     // Id and label are required
     if (!$args['id'] || !$args['label']) {
         return;
     }
     // Handle cost
     $total_cost = is_array($args['cost']) ? array_sum($args['cost']) : $args['cost'];
     $taxes = $args['taxes'];
     // Taxes - if not an array and not set to false, calc tax based on cost and passed calc_tax variable
     // This saves shipping methods having to do complex tax calculations
     if (!is_array($taxes) && $taxes !== false && $total_cost > 0 && $this->is_taxable()) {
         $taxes = array();
         switch ($args['calc_tax']) {
             case "per_item":
                 // If we have an array of costs we can look up each items tax class and add tax accordingly
                 if (is_array($args['cost'])) {
                     $cart = WC()->cart->get_cart();
                     foreach ($args['cost'] as $cost_key => $amount) {
                         if (!isset($cart[$cost_key])) {
                             continue;
                         }
                         $item_taxes = WC_Tax::calc_shipping_tax($amount, WC_Tax::get_shipping_tax_rates($cart[$cost_key]['data']->get_tax_class()));
                         // Sum the item taxes
                         foreach (array_keys($taxes + $item_taxes) as $key) {
                             $taxes[$key] = (isset($item_taxes[$key]) ? $item_taxes[$key] : 0) + (isset($taxes[$key]) ? $taxes[$key] : 0);
                         }
                     }
                     // Add any cost for the order - order costs are in the key 'order'
                     if (isset($args['cost']['order'])) {
                         $item_taxes = WC_Tax::calc_shipping_tax($args['cost']['order'], WC_Tax::get_shipping_tax_rates());
                         // Sum the item taxes
                         foreach (array_keys($taxes + $item_taxes) as $key) {
                             $taxes[$key] = (isset($item_taxes[$key]) ? $item_taxes[$key] : 0) + (isset($taxes[$key]) ? $taxes[$key] : 0);
                         }
                     }
                 }
                 break;
             default:
                 $taxes = WC_Tax::calc_shipping_tax($total_cost, WC_Tax::get_shipping_tax_rates());
                 break;
         }
     }
     $this->rates[] = new WC_Shipping_Rate($args['id'], $args['label'], $total_cost, $taxes, $this->id);
 }
开发者ID:slavic18,项目名称:cats,代码行数:53,代码来源:abstract-wc-shipping-method.php

示例12: calculate_shipping_tax

 public static function calculate_shipping_tax($shipping_amount, $order)
 {
     $tax_based_on = get_option('woocommerce_tax_based_on');
     $wc_tax_enabled = get_option('woocommerce_calc_taxes');
     // if taxes aren't enabled don't calculate them
     if ('no' === $wc_tax_enabled) {
         return 0;
     }
     if ('base' === $tax_based_on) {
         $default = wc_get_base_location();
         $country = $default['country'];
         $state = $default['state'];
         $postcode = '';
         $city = '';
     } elseif ('billing' === $tax_based_on) {
         $country = $order->billing_country;
         $state = $order->billing_state;
         $postcode = $order->billing_postcode;
         $city = $order->billing_city;
     } else {
         $country = $order->shipping_country;
         $state = $order->shipping_state;
         $postcode = $order->shipping_postcode;
         $city = $order->shipping_city;
     }
     // Now calculate shipping tax
     $matched_tax_rates = array();
     $tax_rates = WC_Tax::find_rates(array('country' => $country, 'state' => $state, 'postcode' => $postcode, 'city' => $city, 'tax_class' => ''));
     if ($tax_rates) {
         foreach ($tax_rates as $key => $rate) {
             if (isset($rate['shipping']) && 'yes' === $rate['shipping']) {
                 $matched_tax_rates[$key] = $rate;
             }
         }
     }
     $shipping_taxes = WC_Tax::calc_shipping_tax($shipping_amount, $matched_tax_rates);
     $shipping_tax_total = WC_Tax::round(array_sum($shipping_taxes));
     return $shipping_tax_total;
 }
开发者ID:LinguaFrancaXXI,项目名称:wc-vendors,代码行数:39,代码来源:class-shipping.php

示例13: woocommerce_calc_line_taxes

/**
 * Calc line tax
 *
 * @access public
 * @return void
 */
function woocommerce_calc_line_taxes()
{
    global $woocommerce, $wpdb;
    check_ajax_referer('calc-totals', 'security');
    header('Content-Type: application/json; charset=utf-8');
    $tax = new WC_Tax();
    $taxes = $tax_rows = $item_taxes = $shipping_taxes = array();
    $order_id = absint($_POST['order_id']);
    $country = strtoupper(esc_attr($_POST['country']));
    $state = strtoupper(esc_attr($_POST['state']));
    $postcode = strtoupper(esc_attr($_POST['postcode']));
    $city = sanitize_title(esc_attr($_POST['city']));
    $items = $_POST['items'];
    $shipping = $_POST['shipping'];
    $item_tax = 0;
    // Calculate sales tax first
    if (sizeof($items) > 0) {
        foreach ($items as $item_id => $item) {
            $item_id = absint($item_id);
            $line_subtotal = isset($item['line_subtotal']) ? esc_attr($item['line_subtotal']) : '';
            $line_total = esc_attr($item['line_total']);
            $tax_class = esc_attr($item['tax_class']);
            if (!$item_id || $tax_class == '0') {
                continue;
            }
            // Get product details
            if (get_post_type($item_id) == 'product') {
                $_product = get_product($item_id);
                $item_tax_status = $_product->get_tax_status();
            } else {
                $item_tax_status = 'taxable';
            }
            // Only calc if taxable
            if ($item_tax_status == 'taxable') {
                $tax_rates = $tax->find_rates(array('country' => $country, 'state' => $state, 'postcode' => $postcode, 'city' => $city, 'tax_class' => $tax_class));
                $line_subtotal_taxes = $tax->calc_tax($line_subtotal, $tax_rates, false);
                $line_taxes = $tax->calc_tax($line_total, $tax_rates, false);
                $line_subtotal_tax = $tax->round(array_sum($line_subtotal_taxes));
                $line_tax = $tax->round(array_sum($line_taxes));
                //$line_subtotal_tax = rtrim( rtrim( number_format( array_sum( $line_subtotal_taxes ), 4, '.', '' ), '0' ), '.' );
                //$line_tax = rtrim( rtrim( number_format( array_sum( $line_taxes ), 4, '.', '' ), '0' ), '.' );
                if ($line_subtotal_tax < 0) {
                    $line_subtotal_tax = 0;
                }
                if ($line_tax < 0) {
                    $line_tax = 0;
                }
                $item_taxes[$item_id] = array('line_subtotal_tax' => $line_subtotal_tax, 'line_tax' => $line_tax);
                $item_tax += $line_tax;
                // Sum the item taxes
                foreach (array_keys($taxes + $line_taxes) as $key) {
                    $taxes[$key] = (isset($line_taxes[$key]) ? $line_taxes[$key] : 0) + (isset($taxes[$key]) ? $taxes[$key] : 0);
                }
            }
        }
    }
    // Now calculate shipping tax
    $matched_tax_rates = array();
    $tax_rates = $tax->find_rates(array('country' => $country, 'state' => $state, 'postcode' => $postcode, 'city' => $city, 'tax_class' => ''));
    if ($tax_rates) {
        foreach ($tax_rates as $key => $rate) {
            if (isset($rate['shipping']) && $rate['shipping'] == 'yes') {
                $matched_tax_rates[$key] = $rate;
            }
        }
    }
    $shipping_taxes = $tax->calc_shipping_tax($shipping, $matched_tax_rates);
    //$shipping_tax = rtrim( rtrim( number_format( array_sum( $shipping_taxes ), 2, '.', '' ), '0' ), '.' );
    $shipping_tax = $tax->round(array_sum($shipping_taxes));
    // Remove old tax rows
    $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}woocommerce_order_itemmeta WHERE order_item_id IN ( SELECT order_item_id FROM {$wpdb->prefix}woocommerce_order_items WHERE order_id = %d AND order_item_type = 'tax' )", $order_id));
    $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->prefix}woocommerce_order_items WHERE order_id = %d AND order_item_type = 'tax'", $order_id));
    // Get tax rates
    $rates = $wpdb->get_results("SELECT tax_rate_id, tax_rate_country, tax_rate_state, tax_rate_name, tax_rate_priority FROM {$wpdb->prefix}woocommerce_tax_rates ORDER BY tax_rate_name");
    $tax_codes = array();
    foreach ($rates as $rate) {
        $code = array();
        $code[] = $rate->tax_rate_country;
        $code[] = $rate->tax_rate_state;
        $code[] = $rate->tax_rate_name ? sanitize_title($rate->tax_rate_name) : 'TAX';
        $code[] = absint($rate->tax_rate_priority);
        $tax_codes[$rate->tax_rate_id] = strtoupper(implode('-', array_filter($code)));
    }
    // Now merge to keep tax rows
    ob_start();
    foreach (array_keys($taxes + $shipping_taxes) as $key) {
        $item = array();
        $item['rate_id'] = $key;
        $item['name'] = $tax_codes[$key];
        $item['label'] = $tax->get_rate_label($key);
        $item['compound'] = $tax->is_compound($key) ? 1 : 0;
        $item['tax_amount'] = $tax->round(isset($taxes[$key]) ? $taxes[$key] : 0);
        $item['shipping_tax_amount'] = $tax->round(isset($shipping_taxes[$key]) ? $shipping_taxes[$key] : 0);
        if (!$item['label']) {
//.........这里部分代码省略.........
开发者ID:rongandat,项目名称:sallumeh,代码行数:101,代码来源:woocommerce-ajax.php

示例14: calc_line_taxes

 /**
  * Calc line tax
  */
 public static function calc_line_taxes()
 {
     global $wpdb;
     check_ajax_referer('calc-totals', 'security');
     if (!current_user_can('edit_shop_orders')) {
         die(-1);
     }
     $tax = new WC_Tax();
     $order_id = absint($_POST['order_id']);
     $items = array();
     $country = strtoupper(esc_attr($_POST['country']));
     $state = strtoupper(esc_attr($_POST['state']));
     $postcode = strtoupper(esc_attr($_POST['postcode']));
     $city = wc_clean(esc_attr($_POST['city']));
     $order = wc_get_order($order_id);
     $taxes = array();
     $shipping_taxes = array();
     // Parse the jQuery serialized items
     parse_str($_POST['items'], $items);
     // Prevent undefined warnings
     if (!isset($items['line_tax'])) {
         $items['line_tax'] = array();
     }
     if (!isset($items['line_subtotal_tax'])) {
         $items['line_subtotal_tax'] = array();
     }
     $items['order_taxes'] = array();
     // Action
     $items = apply_filters('woocommerce_ajax_calc_line_taxes', $items, $order_id, $country, $_POST);
     // Get items and fees taxes
     if (isset($items['order_item_id'])) {
         $line_total = $line_subtotal = $order_item_tax_class = array();
         foreach ($items['order_item_id'] as $item_id) {
             $item_id = absint($item_id);
             $line_total[$item_id] = isset($items['line_total'][$item_id]) ? wc_format_decimal($items['line_total'][$item_id]) : 0;
             $line_subtotal[$item_id] = isset($items['line_subtotal'][$item_id]) ? wc_format_decimal($items['line_subtotal'][$item_id]) : $line_total[$item_id];
             $order_item_tax_class[$item_id] = isset($items['order_item_tax_class'][$item_id]) ? sanitize_text_field($items['order_item_tax_class'][$item_id]) : '';
             $product_id = $order->get_item_meta($item_id, '_product_id', true);
             // Get product details
             if (get_post_type($product_id) == 'product') {
                 $_product = wc_get_product($product_id);
                 $item_tax_status = $_product->get_tax_status();
             } else {
                 $item_tax_status = 'taxable';
             }
             if ('0' !== $order_item_tax_class[$item_id] && 'taxable' === $item_tax_status) {
                 $tax_rates = WC_Tax::find_rates(array('country' => $country, 'state' => $state, 'postcode' => $postcode, 'city' => $city, 'tax_class' => $order_item_tax_class[$item_id]));
                 $line_taxes = WC_Tax::calc_tax($line_total[$item_id], $tax_rates, false);
                 $line_subtotal_taxes = WC_Tax::calc_tax($line_subtotal[$item_id], $tax_rates, false);
                 // Set the new line_tax
                 foreach ($line_taxes as $_tax_id => $_tax_value) {
                     $items['line_tax'][$item_id][$_tax_id] = $_tax_value;
                 }
                 // Set the new line_subtotal_tax
                 foreach ($line_subtotal_taxes as $_tax_id => $_tax_value) {
                     $items['line_subtotal_tax'][$item_id][$_tax_id] = $_tax_value;
                 }
                 // Sum the item taxes
                 foreach (array_keys($taxes + $line_taxes) as $key) {
                     $taxes[$key] = (isset($line_taxes[$key]) ? $line_taxes[$key] : 0) + (isset($taxes[$key]) ? $taxes[$key] : 0);
                 }
             }
         }
     }
     // Get shipping taxes
     if (isset($items['shipping_method_id'])) {
         $matched_tax_rates = array();
         $tax_rates = WC_Tax::find_rates(array('country' => $country, 'state' => $state, 'postcode' => $postcode, 'city' => $city, 'tax_class' => ''));
         if ($tax_rates) {
             foreach ($tax_rates as $key => $rate) {
                 if (isset($rate['shipping']) && 'yes' == $rate['shipping']) {
                     $matched_tax_rates[$key] = $rate;
                 }
             }
         }
         $shipping_cost = $shipping_taxes = array();
         foreach ($items['shipping_method_id'] as $item_id) {
             $item_id = absint($item_id);
             $shipping_cost[$item_id] = isset($items['shipping_cost'][$item_id]) ? wc_format_decimal($items['shipping_cost'][$item_id]) : 0;
             $_shipping_taxes = WC_Tax::calc_shipping_tax($shipping_cost[$item_id], $matched_tax_rates);
             // Set the new shipping_taxes
             foreach ($_shipping_taxes as $_tax_id => $_tax_value) {
                 $items['shipping_taxes'][$item_id][$_tax_id] = $_tax_value;
                 $shipping_taxes[$_tax_id] = isset($shipping_taxes[$_tax_id]) ? $shipping_taxes[$_tax_id] + $_tax_value : $_tax_value;
             }
         }
     }
     // Remove old tax rows
     $order->remove_order_items('tax');
     // Add tax rows
     foreach (array_keys($taxes + $shipping_taxes) as $tax_rate_id) {
         $order->add_tax($tax_rate_id, isset($taxes[$tax_rate_id]) ? $taxes[$tax_rate_id] : 0, isset($shipping_taxes[$tax_rate_id]) ? $shipping_taxes[$tax_rate_id] : 0);
     }
     // Create the new order_taxes
     foreach ($order->get_taxes() as $tax_id => $tax_item) {
         $items['order_taxes'][$tax_id] = absint($tax_item['rate_id']);
     }
//.........这里部分代码省略.........
开发者ID:JodiWarren,项目名称:woocommerce,代码行数:101,代码来源:class-wc-ajax.php

示例15: add_line_taxes

 public static function add_line_taxes($order_id)
 {
     global $wpdb;
     check_ajax_referer('calc-totals', 'security');
     if (!current_user_can('edit_shop_orders')) {
         die(-1);
     }
     $tax = new WC_Tax();
     $items = array();
     $country = strtoupper(esc_attr($_POST['country']));
     $state = strtoupper(esc_attr($_POST['state']));
     $postcode = strtoupper(esc_attr($_POST['postcode']));
     $city = wc_clean(esc_attr($_POST['city']));
     $order = wc_get_order(absint($order_id));
     $taxes = array();
     $shipping_taxes = array();
     // Parse the jQuery serialized items
     parse_str($_POST['items'], $items);
     // Prevent undefined warnings
     if (!isset($items['line_tax'])) {
         $items['line_tax'] = array();
     }
     if (!isset($items['line_subtotal_tax'])) {
         $items['line_subtotal_tax'] = array();
     }
     $items['order_taxes'] = array();
     // Action
     $items = apply_filters('woocommerce_ajax_calc_line_taxes', $items, $order_id, $country, $_POST);
     // Get items and fees taxes
     if (isset($items['order_item_id'])) {
         $line_total = $line_subtotal = $order_item_tax_class = array();
         foreach ($items['order_item_id'] as $parent_item_id) {
             $parent_item_id = absint($parent_item_id);
             $item_id = self::get_child_item_id($parent_item_id);
             if (empty($item_id)) {
                 //no current suborder items
                 continue;
             }
             $line_total[$item_id] = isset($items['line_total'][$parent_item_id]) ? wc_format_decimal($items['line_total'][$parent_item_id]) : 0;
             $line_subtotal[$item_id] = isset($items['line_subtotal'][$parent_item_id]) ? wc_format_decimal($items['line_subtotal'][$parent_item_id]) : $line_total[$parent_item_id];
             $order_item_tax_class[$item_id] = isset($items['order_item_tax_class'][$parent_item_id]) ? sanitize_text_field($items['order_item_tax_class'][$parent_item_id]) : '';
             $product_id = $order->get_item_meta($item_id, '_product_id', true);
             $vendor = yith_get_vendor($product_id, 'product');
             if (!$vendor->is_valid()) {
                 // no vnedor products
                 continue;
             }
             $vendor_order_ids = $vendor->get_orders('suborder');
             if (!in_array($order_id, $vendor_order_ids)) {
                 // the current product isn't in the current suborder
                 continue;
             }
             // Get product details
             if (get_post_type($product_id) == 'product') {
                 $_product = wc_get_product($product_id);
                 $item_tax_status = $_product->get_tax_status();
             } else {
                 $item_tax_status = 'taxable';
             }
             if ('0' !== $order_item_tax_class[$item_id] && 'taxable' === $item_tax_status) {
                 $tax_rates = WC_Tax::find_rates(array('country' => $country, 'state' => $state, 'postcode' => $postcode, 'city' => $city, 'tax_class' => $order_item_tax_class[$item_id]));
                 $line_taxes = WC_Tax::calc_tax($line_total[$item_id], $tax_rates, false);
                 $line_subtotal_taxes = WC_Tax::calc_tax($line_subtotal[$item_id], $tax_rates, false);
                 // Set the new line_tax
                 foreach ($line_taxes as $_tax_id => $_tax_value) {
                     $items['line_tax'][$item_id][$_tax_id] = $_tax_value;
                 }
                 // Set the new line_subtotal_tax
                 foreach ($line_subtotal_taxes as $_tax_id => $_tax_value) {
                     $items['line_subtotal_tax'][$item_id][$_tax_id] = $_tax_value;
                 }
                 // Sum the item taxes
                 foreach (array_keys($taxes + $line_taxes) as $key) {
                     $taxes[$key] = (isset($line_taxes[$key]) ? $line_taxes[$key] : 0) + (isset($taxes[$key]) ? $taxes[$key] : 0);
                 }
             }
         }
     }
     // Get shipping taxes
     if (isset($items['shipping_method_id'])) {
         $matched_tax_rates = array();
         $tax_rates = WC_Tax::find_rates(array('country' => $country, 'state' => $state, 'postcode' => $postcode, 'city' => $city, 'tax_class' => ''));
         if ($tax_rates) {
             foreach ($tax_rates as $key => $rate) {
                 if (isset($rate['shipping']) && 'yes' == $rate['shipping']) {
                     $matched_tax_rates[$key] = $rate;
                 }
             }
         }
         $shipping_cost = $shipping_taxes = array();
         foreach ($items['shipping_method_id'] as $item_id) {
             $item_id = absint($item_id);
             $shipping_cost[$item_id] = isset($items['shipping_cost'][$parent_item_id]) ? wc_format_decimal($items['shipping_cost'][$parent_item_id]) : 0;
             $_shipping_taxes = WC_Tax::calc_shipping_tax($shipping_cost[$item_id], $matched_tax_rates);
             // Set the new shipping_taxes
             foreach ($_shipping_taxes as $_tax_id => $_tax_value) {
                 $items['shipping_taxes'][$item_id][$_tax_id] = $_tax_value;
                 $shipping_taxes[$_tax_id] = isset($shipping_taxes[$_tax_id]) ? $shipping_taxes[$_tax_id] + $_tax_value : $_tax_value;
             }
         }
//.........这里部分代码省略.........
开发者ID:k2jysy,项目名称:mergeshop,代码行数:101,代码来源:class.yith-orders.php


注:本文中的WC_Tax::calc_shipping_tax方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。