Since: 2.7.0
Author: WooThemes
Inheritance: extends WC_Order_Item
 /**
  * Add a fee to the order.
  * Order must be saved prior to adding items.
  * @param object $fee
  * @return int updated order item ID
  */
 public function add_fee($fee)
 {
     _deprecated_function('WC_Order::add_fee', '2.7', 'Create new WC_Order_Item_Fee object and add to order with WC_Order::add_item()');
     $item = new WC_Order_Item_Fee(array('name' => $fee->name, 'tax_class' => $fee->taxable ? $fee->tax_class : 0, 'total' => $fee->amount, 'total_tax' => $fee->tax, 'taxes' => array('total' => $fee->tax_data), 'order_id' => $this->get_id()));
     $item->save();
     $this->add_item($item);
     wc_do_deprecated_action('woocommerce_order_add_fee', array($this->get_id(), $item->get_id(), $fee), '2.7', 'Use woocommerce_new_order_item action instead.');
     return $item->get_id();
 }
 /**
  * Create or update an order fee
  *
  * @since 2.2
  * @param \WC_Order $order
  * @param array $fee item data
  * @param string $action 'create' to add fee or 'update' to update it
  * @throws WC_API_Exception invalid data, server error
  */
 protected function set_fee($order, $fee, $action)
 {
     if ('create' === $action) {
         // fee title is required
         if (!isset($fee['title'])) {
             throw new WC_API_Exception('woocommerce_invalid_fee_item', __('Fee title is required', 'woocommerce'), 400);
         }
         $item = new WC_Order_Item_Fee();
         $item->set_name(sanitize_title($fee['title']));
         $item->set_total(isset($fee['total']) ? floatval($fee['total']) : 0);
         // if taxable, tax class and total are required
         if (!empty($fee['taxable'])) {
             if (!isset($fee['tax_class'])) {
                 throw new WC_API_Exception('woocommerce_invalid_fee_item', __('Fee tax class is required when fee is taxable', 'woocommerce'), 400);
             }
             $item->set_tax_status('taxable');
             $item->set_tax_class($fee['tax_class']);
             if (isset($fee['total_tax'])) {
                 $item->set_total_tax(isset($fee['total_tax']) ? wc_format_refund_total($fee['total_tax']) : 0);
             }
             if (isset($fee['tax_data'])) {
                 $item->set_total_tax(wc_format_refund_total(array_sum($fee['tax_data'])));
                 $item->set_taxes(array_map('wc_format_refund_total', $fee['tax_data']));
             }
         }
         $fee_id = $item->save();
         if (!$fee_id) {
             throw new WC_API_Exception('woocommerce_cannot_create_fee', __('Cannot create fee, try again', 'woocommerce'), 500);
         }
     } else {
         $item = new WC_Order_Item_Fee($fee['id']);
         if (isset($fee['title'])) {
             $item->set_name(sanitize_title($fee['title']));
         }
         if (isset($fee['tax_class'])) {
             $item->set_tax_class($fee['tax_class']);
         }
         if (isset($fee['total'])) {
             $item->set_total(floatval($fee['total']));
         }
         if (isset($fee['total_tax'])) {
             $item->set_total_tax(floatval($fee['total_tax']));
         }
         $fee_id = $item->save();
         if (!$fee_id) {
             throw new WC_API_Exception('woocommerce_cannot_update_fee', __('Cannot update fee, try again', 'woocommerce'), 500);
         }
     }
 }
 /**
  * Add fees to the order.
  *
  * @param  WC_Order $order
  */
 protected function create_order_fee_lines(&$order)
 {
     foreach (WC()->cart->get_fees() as $fee_key => $fee) {
         $item = new WC_Order_Item_Fee();
         $item->set_props(array('name' => $fee->name, 'tax_class' => $fee->taxable ? $fee->tax_class : 0, 'total' => $fee->amount, 'total_tax' => $fee->tax, 'taxes' => array('total' => $fee->tax_data)));
         // Set this to pass to legacy actions.
         $item->legacy_fee = $fee;
         $item->legacy_fee_key = $fee_key;
         $order->add_item($item);
     }
 }
Esempio n. 4
0
 /**
  * Test: get_fees
  */
 function test_get_fees()
 {
     $object = new WC_Order();
     $item = new WC_Order_Item_Fee();
     $item->set_props(array('name' => 'Some Fee', 'tax_status' => 'taxable', 'total' => '100', 'tax_class' => ''));
     $object->add_item($item);
     $this->assertCount(1, $object->get_fees());
 }
Esempio n. 5
0
 /**
  * Add order fee via ajax.
  */
 public static function add_order_fee()
 {
     check_ajax_referer('order-item', 'security');
     if (!current_user_can('edit_shop_orders')) {
         die(-1);
     }
     try {
         $order_id = absint($_POST['order_id']);
         $order = wc_get_order($order_id);
         $order_taxes = $order->get_taxes();
         $item = new WC_Order_Item_Fee();
         $item->set_order_id($order_id);
         $item_id = $item->save();
         ob_start();
         include 'admin/meta-boxes/views/html-order-fee.php';
         wp_send_json_success(array('html' => ob_get_clean()));
     } catch (Exception $e) {
         wp_send_json_error(array('error' => $e->getMessage()));
     }
     die;
 }
Esempio n. 6
0
 /**
  * Add order fee via ajax.
  */
 public static function add_order_fee()
 {
     check_ajax_referer('order-item', 'security');
     if (!current_user_can('edit_shop_orders')) {
         die(-1);
     }
     $order_id = absint($_POST['order_id']);
     $order = wc_get_order($order_id);
     $order_taxes = $order->get_taxes();
     $item = new WC_Order_Item_Fee();
     $item->set_order_id($order_id);
     $item_id = $item->save();
     include 'admin/meta-boxes/views/html-order-fee.php';
     // Quit out
     die;
 }